[英]Access violation reading location when accessing a dll method
我使用以下代碼訪問dll文件中的方法,並從dll方法調用方法時獲取Access violation reading location 0x41100000
。
我嘗試訪問的方法是以下原型
int dstoch(float,float,float,float,float,float,float,float,float);
這是我的代碼
typedef int (*LPMyfunct)(float,float,float,float,float,float,float,float,float);
HINSTANCE hDLL = NULL;
LPMyfunct lpdstoch = NULL;
hDLL = LoadLibrary("c:\\myfile.dll");
if(hDLL!=NULL)
{
std::cout << "Library loaded \n";
lpdstoch = (LPMyfunct)GetProcAddress((HMODULE)hDLL, "dstoch");
int res = 0;
if(lpdstoch != NULL)
{
try
{
res = lpdstoch(1.1,2.2,3.3,4.4,5.4,6.4,7.4,8.8,9.9); //Gives the error
}
catch (std::exception &e)
{
std::cout << e.what();
}
}
}
有什么建議原因可能是什么? dll文件中是否有錯誤? 有什么辦法可以讀取dll文件的參數嗎? 請它檢查我是否正確獲取參數類型? 依賴檢查器顯示該方法存在,但我不能確定參數類型?
更新:
我仍然得到錯誤
test.exe中0x0040356c處的第一次機會異常:0xC0000005:訪問沖突寫入位置0x42080000。 Cexperiment.exe中0x0040356c處的未處理異常:0xC0000005:訪問沖突寫入位置0x42080000。
我也相信這個問題可能與調用約定無關。我相信的原因是因為我沒有收到來自VS2010的錯誤消息,說明調用約定可能是一個原因。當我嘗試使用其他一些時,我收到了該消息DLL。 因此,如果調用約定或參數不是問題(如果參數不同,則會獲得相同的調用約定消息),那么它可能是其他內容。 關於我可以嘗試的任何建議?
您需要檢查dll函數的調用約定並相應地聲明LPMyfunct
類型。 調用約定的可能值為: stdcall
, cdecl
, pascal
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.