DLL中能否使用外部符号?调用外部符号遇链接错误求解
在DLL中调用主程序定义的外部符号(函数/变量)的解决方案
我想在DLL里调用一个定义在DLL外部的函数;或者把这个函数放到DLL里,但它会用到DLL外部定义的变量。两种尝试都触发了“unresolved external”链接错误,这些外部符号(函数或变量)都定义在使用该DLL的主程序中。请问有没有办法在DLL中使用这类外部符号?
以下是问题的简单示例代码:
// dllmain.cpp : Defines the entry point for the DLL application. #include "pch.h" void ExternalFunction(); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } extern "C" __declspec(dllexport) LRESULT CALLBACK DummyFunction() { ExternalFunction(); return 0; }
编辑补充
我找到一个相关问题“circular dependencies between dlls with Visual Studio”,但该问题未涉及“unresolved external”链接错误,提问者似乎已解决问题。这个问题有十个答案,观点差异较大:四个称无解,两个提供其他语言代码,两个建议非Visual Studio方案,一个仅提供文章链接,还有一个方案看似不完整,且没有被采纳的答案。我无法将这些答案应用到自身问题中,除非真的无解,因此希望得到针对本问题的解答。
目前我已实现Alan Birtles的方案:通过DLL导出一个新函数,将ExternalFunction()的指针传入DLL,之后按需调用该指针即可,该方案运行正常,是个优质且独特的解决方案。
内容的提问来源于stack exchange,提问作者Kalle Svensson
相关产品推荐
相关产品推荐

