无法从C DLL调用该函数

时间:2017-11-14 11:26:34

标签: c++ dll load

//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. 代码执行到其他条件下的cout语句。

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

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

  4. Ran Depends.exe确认DLL地址空间中的功能可用性。

  5. DLL和示例程序使用32位环境进行编译。

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

    有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您将变量命名为&#34; DisplayHelloFromDLL&#34;函数指针为&#34; LibMainEntryPoint&#34;:

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

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

if (!DisplayHelloFromDLL) ...

与变量名一致,代码应该有效。 将其更改为:

DisplayHelloFromDLLFuncPtr DisplayHelloFromDLL =(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL,&#34; DisplayHelloFromDLL&#34;);