无法从 C DLL 调用函数
Not able to call the function from 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;
}
代码执行到else条件下的cout语句。
为 DLL 中的函数编译时收到错误。
收到错误'DisplayHelloFromDLL':未声明的标识符
运行 Depends.exe 确认函数在 DLL 地址 space.
中的可用性
DLL和示例程序是在32位环境下编译的。
6.Program 唯一目的是调用函数 C DLL 并打印 Hello From DLL 消息。
有什么建议吗?
您将保存 "DisplayHelloFromDLL" 函数指针的变量命名为 "LibMainEntryPoint":
DisplayHelloFromDLLFuncPtr LibMainEntryPoint=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");
但随后您尝试使用不同的名称 (DisplayHelloFromDLL):
if (!DisplayHelloFromDLL) ...
与变量名保持一致,代码应该可以运行。
将其更改为:
DisplayHelloFromDLLFuncPtr DisplayHelloFromDLL=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");
//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;
}
代码执行到else条件下的cout语句。
为 DLL 中的函数编译时收到错误。
收到错误'DisplayHelloFromDLL':未声明的标识符
运行 Depends.exe 确认函数在 DLL 地址 space.
中的可用性
DLL和示例程序是在32位环境下编译的。
6.Program 唯一目的是调用函数 C DLL 并打印 Hello From DLL 消息。
有什么建议吗?
您将保存 "DisplayHelloFromDLL" 函数指针的变量命名为 "LibMainEntryPoint":
DisplayHelloFromDLLFuncPtr LibMainEntryPoint=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");
但随后您尝试使用不同的名称 (DisplayHelloFromDLL):
if (!DisplayHelloFromDLL) ...
与变量名保持一致,代码应该可以运行。 将其更改为:
DisplayHelloFromDLLFuncPtr DisplayHelloFromDLL=(DisplayHelloFromDLLFuncPtr)GetProcAddress(hGetProcIDDLL, "DisplayHelloFromDLL");