从 DLL 内部调用 EXE 函数

3

我需要从DLL位置调用EXE中的多个函数,并且还需要从DLL中访问一些在EXE中找到的变量。以下是错误列表,可能没有什么帮助,但我还是附上了。 我使用.def文件、dllimport和其他依赖项来实现相反的操作(exe->dll)。现在我需要做相反的事情。 注:Micros*t Visual Studio 2008专业版,标准-C。

3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_GentityNum referenced in function _SV_BotAllocateClient
3>sv_bot.obj : error LNK2001: unresolved external symbol "_svs"
3>sv_bot.obj : error LNK2001: unresolved external symbol "_sv_maxclients"
3>sv_bot.obj : error LNK2001: unresolved external symbol "_botlib_export"
3>sv_bot.obj : error LNK2019: unresolved external symbol _Cvar_Get referenced in function _BotDrawDebugPolygons
3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_Trace referenced in function _BotImport_Trace
3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_ClipToEntity referenced in function _BotImport_EntityTrace
3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_PointContents referenced in function _BotImport_PointContents
3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_inPVS referenced in function _BotImport_inPVS
3>sv_bot.obj : error LNK2019: unresolved external symbol _CM_EntityString referenced in function _BotImport_BSPEntityData
3>sv_bot.obj : error LNK2019: unresolved external symbol _CM_ModelBounds referenced in function _BotImport_BSPModelMinsMaxsOrigin
3>sv_bot.obj : error LNK2019: unresolved external symbol _CM_InlineModel referenced in function _BotImport_BSPModelMinsMaxsOrigin
3>sv_bot.obj : error LNK2019: unresolved external symbol _Z_TagMalloc referenced in function _BotImport_GetMemory
3>sv_bot.obj : error LNK2019: unresolved external symbol _Z_Free referenced in function _BotImport_FreeMemory
3>sv_bot.obj : error LNK2019: unresolved external symbol _Hunk_Alloc referenced in function _BotImport_HunkAlloc
3>sv_bot.obj : error LNK2019: unresolved external symbol _Hunk_CheckMark referenced in function _BotImport_HunkAlloc
3>sv_bot.obj : error LNK2019: unresolved external symbol _SV_ExecuteClientCommand referenced in function _BotClientCommand
3>sv_bot.obj : error LNK2019: unresolved external symbol _VM_Call referenced in function _SV_BotFrame
3>sv_bot.obj : error LNK2001: unresolved external symbol "_gvm"
2>creating library ..\..\build\quake3_release\ioquake3.lib and object ..\..\build\quake3_release\ioquake3.exp
3>sv_bot.obj : error LNK2019: unresolved external symbol _GetBotLibAPI referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _FS_Seek referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _FS_FCloseFile referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _FS_Write referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _FS_Read2 referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _FS_FOpenFileByMode referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _Z_AvailableMemory referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _Z_Malloc referenced in function _SV_BotInitBotLib
3>sv_bot.obj : error LNK2019: unresolved external symbol _Cvar_VariableIntegerValue referenced in function _SV_BotInitBotLib
2>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs. Use /NODEFAULTLIB:library
3>ビルドログは "file://c:\Documents and Settings\yasir\デスクトップ\ioquake3dev\ioquake3dev - sandbox\build\game_release\BuildLog.htm" に保存されました。
3>game - エラー 29、警告 0
2>LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll ignored; no imports found from OleAcc.dll
2>

2
为什么不在主 .exe 中将函数指针传递给函数,而不是直接从 DLL 中调用它们呢?这样你也可以减少程序中的“紧耦合”问题。 - Lundin
1个回答

1

我认为你不能将DLL链接到EXE。相反,定义一个包含函数指针的结构体,并在你的exe中初始化该结构体的实例。将你的函数指针分配给你的结构体实例中的指针。调用一个DLL函数来将结构体实例的指针存储在DLL的静态变量中。每当你的DLL想要调用一个EXE函数时,使用结构体实例中的函数指针调用此函数。


实际上我可以。我会发布供参考的内容。 http://www.codeproject.com/Answers/154678/Calling-to-an-EXE-function-from-inside-a-DLL.aspx - user598208
你是对的,你可以这样做。然而,我不认为这是一个好的设计。使用运行时链接会很慢且容易出错。我仍然建议使用虚函数表方法。 - frast

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接