gpt4 book ai didi

c++ - 无法从 C DLL 调用函数

转载 作者:行者123 更新时间:2023-11-28 04:55:13 24 4
gpt4 key购买 nike

//DLL Code

#include <stdio.h>

extern "C"

{


__declspec(dllexport) void DisplayHelloFromDLL()

{
printf("Hello from DLL !\n");
}
}


//Program Accessing DLL

#include<windows.h>
#include<iostream>
#include<conio.h>

typedef void (*DisplayHelloFromDLLFuncPtr)();
using namespace std;



int main()

{

HINSTANCE hGetProcIDDLL = LoadLibrary("L:\\C_Learning\\Library\\MyLib\\Debug\\MyLib.dll");
if (!hGetProcIDDLL)
{

cout << "\nCould Not The Library";
return EXIT_FAILURE;

}

else

{
cout << "\nDLL is Loaded";

}

DisplayHelloFromDLLFuncPtr LibMainEntryPoint=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");

if (!DisplayHelloFromDLL)
{

cout << "\nCould not locate the function";
return EXIT_FAILURE;
}

cout << DisplayHelloFromDLL();

return EXIT_SUCCESS;

_getch();
return 0;


}
  1. 代码执行到 else 条件下的 cout 语句。

  2. 编译 DLL 中的函数时收到错误。

  3. 收到“DisplayHelloFromDLL”错误:未声明的标识符

  4. 运行 Depends.exe,确认函数在 DLL 地址空间中的可用性。

  5. DLL和示例程序是在32位环境下编译的。

    6.程序的唯一目的是调用函数 C DLL 并打印 Hello From DLL 消息。

    有什么建议吗?

最佳答案

您将保存“DisplayHelloFromDLL”函数指针的变量命名为“LibMainEntryPoint”:

DisplayHelloFromDLLFuncPtr LibMainEntryPoint=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");

但随后您尝试使用不同的名称 (DisplayHelloFromDLL):

if (!DisplayHelloFromDLL) ...

与变量名保持一致,代码应该可以运行。将其更改为:

DisplayHelloFromDLLFuncPtr DisplayHelloFromDLL=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");

关于c++ - 无法从 C DLL 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47284586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com