c - 从DLL内部调用EXE函数

标签 c visual-studio-2008 dllimport

我需要从DLL位置调用EXE内的几个函数。而且,我还需要从DLL访问EXE内的某些变量。下面是错误列表,可能根本没有帮助,但无论如何都附上了它。
我通过使用.def文件,dllimport和其他依赖项执行了相反的操作(exe-> dll)。而且,现在我陷入了另一种困境。
注意:Micros * t Visual Studio 2008专业版,标准C。

3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_GentityNumが关数_SV_BotAllocateClientで参照されました。
3> sv_bot.obj:错误LNK2001:外部シン宝ル“ _svs”は未解决です。
3> sv_bot.obj:错误LNK2001:外部シン宝ル“ _sv_maxclients”は未解决です。
3> sv_bot.obj:错误LNK2001:外部シン宝ル“ _botlib_export”は未解决です。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Cvar_Getが关数_BotDrawDebugPolygonsで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_Traceが关数_BotImport_Traceで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_ClipToEntityが关数_BotImport_EntityTraceで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_PointContentsが关数_BotImport_PointContentsで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_inPVSが关数_BotImport_inPVSで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_CM_EntityStringが关数_BotImport_BSPEntityDataで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_CM_ModelBoundsが关数_BotImport_BSPModelMinsMaxsOriginで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_CM_InlineModelが关数_BotImport_BSPModelMinsMaxsOriginで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Z_TagMallocが关数_BotImport_GetMemoryで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Z_Freeが关数_BotImport_FreeMemoryで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Hunk_Allocが关数_BotImport_HunkAllocで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Hunk_CheckMarkが关数_BotImport_HunkAllocで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_SV_ExecuteClientCommandが关数_BotClientCommandで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_VM_Callが关数_SV_BotFrameで参照されました。
3> sv_bot.obj:错误LNK2001:外部シン宝ル“ _gvm”は未解决です。
2>ライブラリ.. \ .. \ build \ quake3_release \ ioquake3.libとオブジェクト.. \ .. \ build \ quake3_release \ ioquake3.expを作成中
3> sv_bot.obj:错误LNK2019:未解决の外部シンボル_GetBotLibAPIが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_FS_Seekが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_FS_FCloseFileが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_FS_Writeが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シンボル_FS_Read2が关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シンボル_FS_FOpenFileByModeが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Z_AvailableMemoryが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シン宝ル_Z_Mallocが关数_SV_BotInitBotLibで参照されました。
3> sv_bot.obj:错误LNK2019:未解决の外部シンボル_Cvar_VariableIntegerValueが关数_SV_BotInitBotLibで参照されました。
3> .. \ .. \ build \ game_release \ qagamex86.dll:致命错误LNK1120:外部参照28が未解决です。
2> LINK:警告LNK4098:defaultlib'LIBCMT'は他のライブラリの使用と竞合しています。/NODEFAULTLIB:libraryを正在使用。い。
3>ビルドログは“ file:// c:\ Documents and Settings \ yasir \デスクトップ\ ioquake3dev \ ioquake3dev-sandbox \ build \ game_release \ BuildLog.htm”に保存されました。
3>游戏-エラー29,警告0
2> LINK:警告LNK4199:/DELAYLOAD:OleAcc.dllは无视されます。OleAcc.dllにインポートがありません。
2> cm_patch.obj:错误LNK2019:未解决の外部シン宝ル_BotDrawDebugPolygonsが关数_CM_DrawDebugSurfaceで参照されました。
2> sv_client.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotFreeClientが关数_SV_DropClientで参照されました。
2> sv_game.obj:错误LNK2001:外部シン宝ル“ _SV_BotFreeClient”は未解决です。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotGetConsoleMessageが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotGetSnapshotEntityが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotLibShutdownが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotLibSetupが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_BotImport_DebugPolygonDeleteが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_BotImport_DebugPolygonCreateが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotAllocateClientが关数_SV_GameSystemCallsで参照されました。
2> sv_game.obj:错误LNK2001:外部シン宝ル“ _bot_enable”は未解决です。
2> sv_init.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotFrameが关数_SV_SpawnServerで参照されました。
2> sv_main.obj:错误LNK2001:外部シン宝ル“ _SV_BotFrame”は未解决です。
2> sv_init.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotInitBotLibが关数_SV_Initで参照されました。
2> sv_init.obj:错误LNK2019:未解决の外部シン宝ル_SV_BotInitCvarsが关数_SV_Initで参照されました。
2> .. \ .. \ build \ quake3_release \ ioquake3.exe:致命错误LNK1120:外部参照13が未解决です。
2>ビルドログは“ file:// c:\ Documents and Settings \ yasir \デスクトップ\ ioquake3dev \ ioquake3dev-sandbox \ build \ quake3_release \ BuildLog.htm”に保存されました。
2> quake3-エラー16,警告2
==========ビル0:0正常终了,2失败,2更新不要,1スキップ==========

最佳答案

我认为您无法将DLL链接到您的EXE。而是定义一个包含函数指针的结构,并在exe中初始化该结构的实例。将指向函数的指针关联到struct实例中的指针。调用DLL函数以将指向结构实例的指针存储在DLL的静态变量中。每当您的DLL要调用EXE函数时,都使用结构实例中的函数指针调用此函数。

关于c - 从DLL内部调用EXE函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919780/

相关文章:

c# - PInvoke 不改变对象

c - C 中的系统调用 read 和 write

c - 如何填充 va_list

c - 从C开始,结构和函数简单程序,返回数据可能错误

c# - 如何加快加载启动画面

visual-studio-2008 - 如何访问iframe中页面中的字段?

c++ - 数组未正确分配

c++ - QLibrary 函数在第一次调用时运行缓慢

c++ - 托管 C++ - 根据配置文件导入不同的 DLL

c - 如何使用 Arb 库获得更高精度的正弦波?