2014-01-30 30 views
0

我只是想從API中調用該函數。 WhozCraig剛纔告訴我,我的只是一種類型而不是一種功能。但我仍然不知道如何解決這個問題。我應該如何聲明而不是隻是typedef?對不起,我是一個noob。謝謝你們的幫助!當我運行此代碼時,它「停止工作」。我希望從API中調用這個簡單的函數

#include <Windows.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <stdio.h> 
#include "ftrScanAPI.h" 

typedef FTR_API_PREFIX FTRHANDLE (FTR_API *MyftrScanOpenDevice)(); 


MyftrScanOpenDevice NowftrScanOpenDevice; 


void main() 
{ 
FTRHANDLE hDevice=NULL; 
PVOID pBuffer; 
FTRSCAN_IMAGE_SIZE ImageSize; 

hDevice=LoadLibrary("ftrScanAPI.dll"); 
if(hDevice==NULL) 

{ printf("Failed to detect ScanAPI.dll"); 
    getch(); 
    exit(EXIT_FAILURE); 
} 

hDevice = NowftrScanOpenDevice(); 
} 

下面是來自API的一個片段:

FTR_API_PREFIX FTRHANDLE FTR_API ftrScanOpenDevice(); 

回答

1

變量NowftrScanOpenDevice是指向一個功能,因爲它是一個全局變量,它是零初始化。通過調用它,實際上會取消引用NULL指針,這是未定義的行爲並導致崩潰。

您需要使用GetProcAddress獲取函數的實際地址,並將其分配給NowftrScanOpenDevice

... 
HMODULE hLibrary = LoadLibrary(...); 

NowftrScanOpenDevice = (MyftrScanOpenDevice) GetProcAddress(hLibrary, 
                  "ftrScanOpenDevice"); 

hDevice = NowftrScanOpenDevice(); 
... 

注:我添加了一個新的變量hLibraryLoadLibrary返回的句柄。您需要它稍後致電FreeLibrary

+0

非常感謝您的幫助!它解決了一切。我欠你很多! = d – victorteoh90

相關問題