![](/img/trans.png)
[英]How can I call a function of a C++ DLL that accepts a parameter of type stringstream from C#?
[英]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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.