簡體   English   中英

我如何從其他C ++ DLL中的DLL調用JNIEXPORT函數

[英]How can i call JNIEXPORT function from dll in other c++ dll

我用一個JNIEXPORT函數編寫可視的c ++ dll,如下所示:

extern "C"
{
    JNIEXPORT int JNICALL sum()
    {
        return 1;
    }
}

我想在其他可視c ++ dll中調用此函數,如下所示:

typedef int(__stdcall *f_funci)();

HINSTANCE hGetProcIDDLL = LoadLibrary("C:/.../JNIdllTest.dll");

if (!hGetProcIDDLL) {

    std::cout << "could not load the dynamic library" << std::endl;

    return EXIT_FAILURE;
}

    f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "sum");

if (!funci) {

    std::cout << "could not locate the function" << std::endl;

    return EXIT_FAILURE;
}

std::cout << "funci() returned " << funci() << std::endl;

return EXIT_SUCCESS;

但是當我運行它時,會發生此錯誤

找不到功能

我該怎么辦?

看來您的“ sum”功能不是真正從JNIdllTest.dll dll導出的。 您可以通過在依賴關系查看器中打開DLL來查看從DLL導出的功能: http : //www.dependencywalker.com/

因此,請下載該文件並檢查導出視圖是否具有sum函數,以及該函數的名稱是否僅為純“ sum”或是否以某種方式修飾。 (默認情況下,C ++在函數名稱中添加返回值和函數參數的類型)。

不應修飾它,因為您的函數位於extern“ C”塊內,但如果存在,請確保函數聲明前面也有extern“ C”。

如果該函數確實不是從DLL導出的,請檢查您對JNIEXPORT的定義,然后嘗試使用“ __declspec(dllexport)”-參見https://msdn.microsoft.com/zh-cn/library/a90k134d。 aspx

謝謝薩米·薩利琳

因此,請下載該文件並檢查導出視圖是否具有sum函數,以及該函數的名稱是否僅為純“ sum”或是否以某種方式修飾。 (默認情況下,C ++在函數名稱中添加返回值和函數參數的類型)。

在此處輸入圖片說明

暫無
暫無

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

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