Changing from AfxGetAppModuleState to AfxGetStaticModuleState gives linker error: LNK1169: one or more multiply defined symbols found

Changing from AfxGetAppModuleState to AfxGetStaticModuleState gives linker error: LNK1169: one or more multiply defined symbols found

我有一个带有 属性 "Use MFC in a Shared DLL" 的 dll 模块。我预计在所有可以从外部调用的 public 方法的开头应该有

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 AfxGetAppModuleState 是错误的。

请阅读:https://msdn.microsoft.com/library/jj129660(v=vs.100).aspx

This swaps the current module state with the state returned from AfxGetAppModuleState until the end of the current scope.

To set or restore the module state from a DLL function, do not use AfxGetAppModuleState. Instead, use AfxGetStaticModuleState.

For more information on module states and MFC, see Managing the State Data of MFC Modules in Creating New Documents, Windows, and Views and Technical Note 58.

只要您不提供有关调用堆栈和崩溃位置的更多信息,我就无法告诉您有关崩溃原因的任何信息。

问题主要是链接器错误,而不是 AfxGetAppModuleState 或 AfxGetStaticModuleState 本身。对不起,如果我问的问题有任何混淆。 当在该模块引用的另一个模块中定义符号或声明具有 MFC 和非 MFC 的 header 文件的顺序时,会发生此链接器错误。 我很难通过组织 header 来解决这个问题。我不得不把这个任务搁置一旁,以便我可以在空闲时间再次选择它!