[ VS C++] Przekazanie wskaźnika funkcji do funkcji z biblioteki DLL
Ostatnio zmodyfikowano 2015-01-18 18:10
lycon5 Temat założony przez niniejszego użytkownika |
[ VS C++] Przekazanie wskaźnika funkcji do funkcji z biblioteki DLL » 2015-01-14 12:22:23 Prototyp funkcji wywoływanej z DLL (zgodnie z dokumentacją) wygląda następująco: _INT_ i_PCI3600_SetBoardIntRoutine( BYTE b_BoardHandle, BYTE b_UserCallingMode, DWORD dw_UserSharedMemorySize, VOID ** ppv_UserSharedMemoryAppLevel, VOID ** ppv_UserSharedMemoryKernelLevel, VOID( WINAPI * v_FunctionName ) )
Wszystko ok, oprócz tego, że nie mogę podać wskaźnika do funkcji która będzie obsługiwała wystąpienie przerwania (VOID (WINAPI *v_FunctionName)) Jak przygotować funkcję do podania jej adresu jako wskaźnik ? Funkcja musi wyglądać następująco: void WINAPI v_InterruptRoutine( DWORD dw_BoardHandle, BYTE b_CallingMode, PVOID pv_UserSharedMemory, DWORD dw_InterruptSource, DWORD dw_InterruptMask, DWORD dw_NbrOfComputerBuffer, PDWORD pdw_ComputerBufferAddressKernelLevelArray, PDWORD pdw_ComputerBufferAddressApplicLevelArray )
Jak ją wydelegować ? Czytałem o tym ale nie mogę odnieść tego do mojego problemu. |
|
Monika90 |
» 2015-01-14 13:07:44 VOID( WINAPI * v_FunctionName ) |
Taka deklaracja jest nieprawidłowa. To w ogóle nie jest wskaźnik do funkcji, tylko po prostu void*, atrybut WINAPI może być tylko stosowany do wskaźników do funkcji. |
|
lycon5 Temat założony przez niniejszego użytkownika |
» 2015-01-14 17:48:58 Podążam za tym co mówi mi dokumentacja. Jednak zajrzałem do pliku nagłówkowego i w nim deklaracja brzmi następująco: _INT_ i_PCI3600_SetBoardIntRoutine( DWORD_ dw_BoardHandle, BYTE_ b_UserCallingMode, DWORD_ dw_UserSharedMemorySize, VOID ** ppv_UserSharedMemoryAppLevel, VOID ** ppv_UserSharedMemoryKernelLevel, void( far pascal * v_FunctionName )( DWORD_ dw_BoardHandle, BYTE_ b_UserCallingMode, VOID * pv_UserSharedMemory, DWORD_ dw_InterruptSource, DWORD_ dw_InterruptMask, DWORD_ dw_NbrOfComputerBuffer, PDWORD_ pdw_ComputerBufferAddressKernelLevel, PDWORD_ pdw_ComputerBufferAddressApplicLevel ) );
Czy taki zapis jest poprawny ? Mam sprawny przykład który się kompiluje ale w języku C. Tam sprawa jest trochę prostsza. Gdy w grę wchodzi użycie języka obiektowego pojawia się problem. |
|
DejaVu |
» 2015-01-18 18:10:51 |
|
« 1 » |