2013-02-09 180 views
0

我在構建我的調試項目時出現了一個奇怪的問題。我搜索了網頁,但不幸的是我還沒有找到任何線索。0xC0000005:訪問衝突寫入位置0x00000000

我想在我的控制檯應用程序項目中加載一個dll。我的DLL有幾個函數,我只想調用FUNC1來檢查這個函數是否正常工作。

在我的DL FUNC1的聲明是:

int FUNC1 (char *inVal, int *retVal) 

我已成功加載的dll在我的控制檯應用程序,我稱之爲有如下函數指針的FUNC1:

int main() 
{ 

HINSTANCE testInstance; 

testInstance = LoadLibrary("Path\\to\\my.dll"); 


typedef int (WINAPI *FUNC1Ptr)(char *inVal, int *retVal); 

if(testInstance == NULL) 
{ 
    printf("The dll is not loaded, Please check the path!\n"); 
} 
else 
{ 

    printf("The dll is loaded successfully!!"); 
} 

FUNC1Ptr FUNC1Lnk = (FUNC1Ptr)GetProcAddress(testInstance,"FUNC1"); 

if (!FUNC1tLnk) 
{ 
    FreeLibrary(testInstance); 
    printf("Error in getting function address!!\n"); 
} 
else 
{ 

    int *ret = 0; 
    char *PIN = NULL; 
    PIN = "test"; 

    int retVal1 = FUNC1Lnk(PIN, ret); 

} 
return 0; 
} 

PS。違反稱爲free.c文件:使用指針

 retval = HeapFree(_crtheap, 0, pBlock); 
    if (retval == 0) 
    { 
     errno = _get_errno_from_oserr(GetLastError()); 
    } 

}

+0

你用相同的調用代碼測試,但沒有* *調用LoadLibrary? (即直接鏈接到一個函數的目標文件) – 2013-02-09 11:56:10

+0

還沒有,我會檢查它,並隨時通知你 – A23149577 2013-02-09 11:59:18

+0

@AntonKovalenko:我檢查了它,它沒有loadlibrary工作正常! – A23149577 2013-02-11 14:29:53

回答

1

如何FUNC1?它可能不喜歡傳遞給它的int *爲空。

試試這個(有一個實際的整數類型 - 不是指針 - 並且採取它的地址):

int ret = 0; 
char *PIN = NULL; 
PIN = "test"; 

int retVal1 = FUNC1Lnk(PIN, &ret); 
+0

FUNC1獲取char * PIN輸入並返回一個整數到int * retVal,我改變了調用函數,正如你所提到的,我遇到了錯誤:在函數調用中,ESP的值沒有正確保存。這通常是調用一個調用約定的函數聲明的結果,其中函數指針聲明的調用約定不同。 – A23149577 2013-02-09 13:10:37

相關問題