Charger la fonction externe SHGetSetFolderCustomSettings de shell32.dll XP et W

cs_AgentAmine Messages postés 28 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 11 avril 2012 - 2 nov. 2011 à 21:58
cs_AgentAmine Messages postés 28 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 11 avril 2012 - 9 nov. 2011 à 21:40
Salut,

dans XP, je peut charger cette fonction externe du shell32.dll :

function SHGetSetFolderCustomSettings(pfcs: PSHFOLDERCUSTOMSETTINGS;
  pszPath: PWideChar; dwReadWrite: DWORD): HRESULT; stdcall; external 'shell32.dll'
  name 'SHGetSetFolderCustomSettingsW';


mais, dans win7, cette fonction est renommee au SHGetSetFolderCustomSettings (sans W)

il faut que l'application s'execute sans erreurs dans les deux SE, comment je faire donc pour charger la bonne fonction (SHGetSetFolderCustomSettingsW dans XP, SHGetSetFolderCustomSettings dans Win7)

aide svp


SHGetSetFolderCustomSettings MSDN


pourquoi cette fonction est renommee :


In Windows XP Service Pack 2 (SP2) and earlier versions, this function supported both ANSI and Unicode strings. In Windows Vista and later versions, only Unicode strings are supported.
Note This function is available through Windows XP SP2 and Windows Server 2003. It might be altered or unavailable in subsequent versions of Windows.


merci d'avance
AgentAmine

5 réponses

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
3 nov. 2011 à 14:24
Bonjour,

Avec une directive de compilation ? Par contre tu auras un exe par OS.

Bon courage
Jean.
0
Utilisateur anonyme
3 nov. 2011 à 16:30
A mon avis ce n'est pas ce qu'il veut : Mais en cherchant un peu notre ami AgentAmine devrait très facileeeeeeeement trouver la réponse par lui même
0
cs_AgentAmine Messages postés 28 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 11 avril 2012
3 nov. 2011 à 18:45
Merci bcp pour vos reponses. c'est le code :



var
SHGetSetFolderCustomSettings: function (pfcs: PSHFOLDERCUSTOMSETTINGS; pszPath: PWideChar; dwReadWrite: DWORD):HRESULT; stdcall;

implementation

..
..
..

var Shell32: HModule;
begin
  Shell32 := GetModuleHandle('Shell32');
  if Shell32 = 0 then RaiseLastOSError;
  @SHGetSetFolderCustomSettings := GetProcAddress(Shell32, 'SHGetSetFolderCustomSettings');  // Win7 / Vista
  if not Assigned(_SHGetSetFolderCustomSettings) then
  @_SHGetSetFolderCustomSettings := GetProcAddress(Shell32, 'SHGetSetFolderCustomSettingsW'); // XP and older
end;



mais...

var fcs: SHFOLDERCUSTOMSETTINGS;
.
.
SHGetSetFolderCustomSettings(@fcs,PWideChar(Folder),FCS_FORCEWRITE);


= j'ai un access violation

aide svp ?
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
4 nov. 2011 à 17:15
Salut,

remplaces les PWideChar par des PChar et tu appelles la fonction avec SHGetSetFolderCustomSettings

Delphi fera automatiquement la "conversion"

en effet pour les versions de Delphi < D2009
PChar == PAnsiChar
et à partir de D2009 et +
PChar == PWideChar

donc si tu n'as pas besoin de l'Unicode cette méthode est la meilleur.

Par contre si tu as besoin de l'Unicode sous D7 (par ex.) il te faudra tester la version de l'os avant et charger la fonction en conséquence


[hr]@+Cirec
[hr]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AgentAmine Messages postés 28 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 11 avril 2012
9 nov. 2011 à 21:40
Salut,

Si vous aviez la réponse, j'ai déjà cherché mais ca marche pas, donc svp Dites-le-moi

AgentAmine;
0