Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[ VS C++] Przekazanie wskaźnika funkcji do funkcji z biblioteki DLL

Ostatnio zmodyfikowano 2015-01-18 18:10
Autor Wiadomość
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:

C/C++
_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:
C/C++
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.
P-124889
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.
P-124891
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:
C/C++
_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.
P-124914
DejaVu
» 2015-01-18 18:10:51
P-125160
« 1 »
  Strona 1 z 1