我使用下面的代碼來訪問dll文件中的方法,從dll方法調用方法時我得到一個Access violation reading location 0x41100000
。訪問dll方法時訪問衝突讀取位置
,我試圖訪問該方法的原型如下
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文件的參數?它檢查我是否正在獲取參數類型?從屬性檢查器顯示該方法存在,但我無法確定參數類型?
更新:
我仍然得到錯誤
第一次機會異常在0x0040356c中的test.exe:0000005: 訪問衝突寫入位置0x42080000。 0x0040356c在Cexperiment.exe中未處理的異常:0xC0000005:寫入 位置0x42080000的訪問衝突。
我也相信,這個問題可能不會涉及到調用約定。其原因我認爲是因爲我沒有得到從VS2010指出調用約定可能是cause.I得到了消息的錯誤消息當我嘗試使用其他的DLL。因此,如果調用約定或參數不是問題(您獲得相同的調用約定消息,則在參數不同的情況下),那麼它可能是別的。有什麼我可以嘗試的建議嗎?
在你的另一個問題中,你說它需要9個花車。這裏你傳遞了9個非浮點數。 – huskerchad 2013-05-10 01:49:12
是的。我認爲這個涵蓋是隱含的。我已經嘗試過傳遞花車,並得到相同的答案 – MistyD 2013-05-10 01:51:33
不要擔心,代替花車的整數很好。 – chris 2013-05-10 01:52:06