无法从 C DLL 调用该函数

萨沙
//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. Ran 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");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章