Aat*_*akA 3 c++ windows winapi
我有一个带有可执行文件和 DLL 的 VS 解决方案。
在可执行文件(MAIN)中:
__declspec(dllexport) void testExe()
{
printf("Hello from EXE");
}
__declspec(dllimport) void DoStuff();
int main()
{
DoStuff();
}
Run Code Online (Sandbox Code Playgroud)
在 .dll (DLL) 中
__declspec(dllimport) void testExe();
__declspec(dllexport) void testDll()
{
printf("Hello from Dll");
}
__declspec(dllexport) void DoStuff()
{
testExe();
testDll();
}
Run Code Online (Sandbox Code Playgroud)
我在 MAIN.exe 中链接了 Dll.lib,但仍然收到链接错误:
error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl testExe(void)" referenced in function "void __cdecl DoStuff(void)"
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
不要从 EXE 导出函数。从接受函数指针作为输入的 DLL 导出函数,然后让 EXE 在运行时调用该函数。
EXE文件:
__declspec(dllimport) void SetFunc(void (*)());
__declspec(dllimport) void DoStuff();
void testExe()
{
printf("Hello from EXE");
}
int main()
{
SetFunc(testExe);
DoStuff();
}
Run Code Online (Sandbox Code Playgroud)
动态链接库:
typedef void (*lpFuncType)();
lpFuncType pExeFunc = NULL;
void testDll()
{
printf("Hello from Dll");
}
__declspec(dllexport) void SetFunc(lpFuncType func)
{
pExeFunc = func;
}
__declspec(dllexport) void DoStuff()
{
if (pExeFunc) pExeFunc();
testDll();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |