int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hinstLib;
DWORD nErrorCode;
CHAR* msg;
//LPCSTR DllName = "D:\\Mes Projets\\LIBPQ\\Exe\\Exécutable Windows 64 bits\\EnCours-libpq64\\libintl-8.dll";
LPCSTR DllName = "D:\\Mes Projets\\LIBPQ\\Exe\\Exécutable Windows 64 bits\\EnCours-libpq64\\libpq.dll";
hinstLib = LoadLibraryA(DllName);
if (hinstLib == NULL)
{
nErrorCode = GetLastError();
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
nErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPSTR)&msg,
0,
NULL);
printf("Erreur : %d\n%s\n", nErrorCode, msg); // nErrorCode = 193
}
else
{
FreeLibrary(hinstLib);
printf("%s\n", "Ok");
}
return 0;
}
1>------ Début de la génération : Projet : ConsoleApplication4, Configuration : Debug x64 ------
1> ConsoleApplication4.cpp
1> ConsoleApplication4.vcxproj -> D:\VS2013\ConsoleApplication4\x64\Debug\ConsoleApplication4.exe
========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
pour libintl-8.dll -> ok
pour libpq.dll -> Erreur : 193
%1 n'est pas une application Win32 valide. (message identique !)
Sauf erreur de ma part, le problème me semble de moins en moins lié au langage mais plus à libpq.dll version 64 bits.
]]>Module Module1
Private Declare Function LoadLibraryA Lib "kernel32" Alias "LoadLibraryA" (ByVal lpFileName As String) As Long
Sub Main()
Dim hnd As Long
Dim DllName As String
DllName = "D:\Mes Projets\LIBPQ\Exe\Exécutable Windows 64 bits\EnCours-libpq64\libintl-8.dll"
hnd = LoadLibraryA(DllName)
MsgBox(hnd, MsgBoxStyle.Information, "libintl-8.dll")
DllName = "D:\Mes Projets\LIBPQ\Exe\Exécutable Windows 64 bits\EnCours-libpq64\libpq.dll"
hnd = LoadLibraryA(DllName)
MsgBox(hnd, MsgBoxStyle.Information, "libpq.dll")
End Sub
End Module
------ Début de la génération : Projet : ConsoleApplication2, Configuration : Debug x64 ------
ConsoleApplication2 -> D:\VS2013\ConsoleApplication2\ConsoleApplication2\bin\x64\Debug\ConsoleApplication2.exe
========== Génération : 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
libintl-8.dll renvoi hnd <> 0
libpq.dll renvoi hnd = 0
le problème ne semble pas lié à Windev
]]>- J'ai téléchargé postgresql-9.4.0-1-windows-binaries.zip et postgresql-9.4.0-1-windows-x64-binaries.zip pour avoir
libpq.dll et libintl.dll (32 bits)
libpq.dll et libintl-8.dll (64 bits)
- Avec dumpbin de Visual Studio 12.0 j'ai bien vérifié que j'avais bien des versions 32 bits et 64 bits
- Avec Windev version 18
1° je compile mon application pour du 32bits : tout fonctionne à 100%
2° je compile mon application pour du 64 bits : Impossible de charger la dll libpq.dll
Message d'erreur : "libpq.dll n'est pas une application Win32 valide"
Si je test avec la fonction : LoadLibraryA au lieu d'utiliser la fonction LoadDll() de Windev :
DLLName1 est une chaîne = PathOfDll + "libintl-8.dll"
handleDLL1 est un entier système = API("Kernel32.dll", "LoadLibraryA", &DLLName1) // ---> handleDLL <> 0 c'est OK
DLLName2 est une chaîne = PathOfDll + "libpq.dll"
handleDLL2 est un entier système = API("Kernel32.dll", "LoadLibraryA", &DLLName2) // ---> handleDLL = 0 c'est bad
J'avoue que je sèche lamentablement...
]]>