Toon posts:

[BC++] E2034 Cannot convert

Pagina: 1
Acties:

Verwijderd

Topicstarter
De volgende voorbeeld code is uit een boek gehaald voor het programmeren voor aspi :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public:        // User declarations 
        HINSTANCE LoadWNASPI32; 
        DWORD(*pfnGetASPI32SupportInfo)(void); 

//---------------------------------------------------------------- 
LoadWNASPI32 = LoadLibrary ("WNASPI32.dll"); 

if (!LoadWNASPI32) 
   { 
    MessageBox ( NULL, "LoadLibrary:\nWNASPI.DLL not found.", 
                       "Error FS 001", MB_SYSTEMMODAL ); 
        return; 

   } 
pfnGetASPI32SupportInfo = GetProcAddress(LoadWNASPI32, "GetASPI32SupportInfo");


De volgende error is het gevolg van het compileren van deze source.

code:
1
2
Build 
C++ Error] SCSI32.cpp(29): E2034 Cannot convert 'int (__stdcall *)()' to 'unsigned long (*)()'


Weet iemand een algemene oplossing voordit probleem het hoeft niet specifiek met dit onderwerp te maken te hebben, het mag natuurlijk wel.

code:
1
2
3
4
5
pfnGetASPI32SupportInfo =(int ( __stdcall*)(HWND)) GetProcAddress(LoadWNASPI32, "GetASPI32SupportInfo");

ipv

pfnGetASPI32SupportInfo = GetProcAddress LoadWNASPI32, "GetASPI32SupportInfo");


Maar krijg nog steeds dezelfde error.

Verwijderd

je cast naar een INT en dat geeft een fout omdat het een long moet zijn. Voor de HWND ten minste, ik weet zo even snel niet waar die pointer voor is die er tussen staat maar ik heb dan ook nooit Win32 API's gebruikt in C++.

[ Voor 52% gewijzigd door Verwijderd op 13-09-2004 10:08 ]


  • igmar
  • Registratie: April 2000
  • Laatst online: 12-05 15:46

igmar

ISO20022

GetProcAddress() geeft een functieadres terug, en wel voor de stdcall conventie. Jouw definitie voldoet daar niet aan, vandaar de error. Het volgende zou het op moeten lossen :

C:
1
typedef DWORD (WINAPI * pfnGetASPI32SupportInfo)(void); 


MSDN heeft overigens voorbeelden hiervan, daar heb ik ze toendertijd ook vanaf gehaald :)

[ Voor 16% gewijzigd door igmar op 13-09-2004 10:34 ]