2009-12-10 3 views
0

Je charge dynamiquement plusieurs API de registre à partir de la bibliothèque Advapi32.dll. Sous Windows XP et Vista tout est OK. Sous Windows 7, je continue d'obtenir l'erreur Le paramètre est incorrect et dans certains cas (comme RegCloseKey) mon application se bloque.Chargement dynamique de la fonction de registre sur Windows 7?

Le code J'utilise est l'habituel:

// RegCreateKeyEx 
typedef LONG (WINAPI *MyRegCreateKeyEx)(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); 
MyRegCreateKeyEx LoadedRegCreateKeyEx; 

puis-je utiliser LoadLibrary pour charger Advapi.dll et GetProcAddress pour trouver l'adresse à RegCreateKeyEx. Comme:

LoadedRegCreateKeyEx = (MyRegCreateKeyEx)GetProcAddress(LibHandle, "RegCreateKeyEx"); 

Tout retourne OK, il n'y a pas d'erreurs et les pointeurs semblent correctes, mais il ne fonctionne pas sous Windows 7. Toutes les idées? Quelque chose a changé? Y a-t-il une manière différente de faire ceci pour Windows 7?

Merci jess.

EDIT: Il semble que ce problème s'étend à tous les types d'API sur Windows 7. Une idée?

+0

L'essayez-vous sur Windows 7 ** x64 **? – SLaks

+0

x86 et x64. dans les deux cas, la même chose arrive. – Jessica

+0

avez-vous le même problème lorsque vous appelez RegCreateKeyEx directement plutôt que celui chargé dynamiquement? – karoberts

Répondre

1

Le problème consistait à obtenir le bon décalage de la bibliothèque. Une fois que je l'ai eu tout a fonctionné correctement

2

Vous pouvez spécifier la version correcte lorsque vous appelez GetProcAddress, c'est-à-dire A pour ANSI et W pour UNICODE.

+0

Merci. J'importe Importation RegCreateKeyExA. mais que l'on retourne une erreur "paramètre invalide" si j'appelle RegCreateKeyExA avec les mêmes paramètres alors ça marche ok – Jessica

+0

Juste pour essayer d'importer la version Unicode et j'ai eu une erreur complètement différente: erreur 18 (ERROR_NO_MORE_FILES). Je suis perplexe. – Jessica

+0

Il semble que si vous importez la version Unicode, cela fonctionne quand vous exécutez un binaire 32 bits sur x86 et un binaire 64 bits sur x64, mais pas avec WOW64 (lorsque vous exécutez un binaire 32 bits sur un Windows x64). Des idées? – Jessica

Questions connexes