代码之家  ›  专栏  ›  技术社区  ›  sasha

无法从C DLL调用函数

  •  0
  • sasha  · 技术社区  · 6 年前
    //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. 收到错误“DisplayHelloFromDLL”:未声明的标识符

    3. 视情况而定。exe,确认DLL地址空间中的函数可用性。

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

      有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   roalz Steve Townsend    6 年前

    您将包含“DisplayHelloFromDLL”函数指针的变量命名为“libmaintentrypoint”:

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

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

    if (!DisplayHelloFromDLL) ...
    

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

    显示HellofRomdllFuncptr =(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL,“DisplayHelloFromDLL”);