簡體   English   中英

訪問dll方法時訪問沖突讀取位置

[英]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類型。 調用約定的可能值為: stdcallcdeclpascal

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM