【发布时间】:2015-12-02 08:16:38
【问题描述】:
我有一个具有“在共享 DLL 中使用 MFC”属性的 dll 模块。我希望在所有可以从外部调用的公共方法的开头都应该有
AFX_MANAGE_STATE(AfxGetStaticModuleState());
但在代码中,我发现它们有
AFX_MANAGE_STATE(AfxGetAppModuleState());
目前我们正面临一些应用程序崩溃和访问冲突。我怀疑这可能是一种可能性,因此我尝试更改其中一种方法来调用 AfxGetStaticModuleState 而不是 AfxGetAppModuleState。 我开始收到链接器错误
LNK1169: one or more multiply defined symbols found
我不明白为什么这个错误会导致这个变化! 请帮忙
添加调用栈:
1b0b2ce1()
msvbvm60.dll!7299ce49()
[Frames below may be incorrect and/or missing, no symbols loaded for msvbvm60.dll]
msvbvm60.dll!7299f97d()
user32.dll!764bc4e7()
user32.dll!764bc5e7()
user32.dll!764bc590()
user32.dll!764b4f0e()
user32.dll!764afe58()
user32.dll!764b4f7d()
ntdll.dll!777a702e()
user32.dll!764b4ec3()
user32.dll!764ab300()
msvbvm60.dll!7295f45a()
msvbvm60.dll!7295f9bd()
msvbvm60.dll!72941b31()
ntdll.dll!777b89d8()
ntdll.dll!7778f731()
ntdll.dll!777a60b4()
ntdll.dll!7778f632()
msvcr110d.dll!_endthreadex(unsigned int retcode) Line 410 C
mfc110d.dll!AfxEndThread(unsigned int nExitCode, int bDelete) Line 388 + 0xc bytes C++
mfc110d.dll!_AfxThreadEntry(void * pParam) Line 129 C++
msvcr110d.dll!_callthreadstartex() Line 354 + 0xf bytes C
msvcr110d.dll!_threadstartex(void * ptd) Line 337 C
kernel32.dll!7621ed6c()
ntdll.dll!777c37eb()
ntdll.dll!777c37be()
【问题讨论】:
-
向我们提供有关调用堆栈内容和崩溃位置的更多信息。
-
如您所见:您没有涉及任何 DLL 代码。即使您没有执行任何代码。好的。您可能会以非常严厉的方式破坏堆栈。但即使你应该能够调试它。因此,如果有错误,您会以某种方式破坏堆栈或堆。所以不存在导致崩溃的直接“编码错误”。
标签: c++ mfc linker-errors