我有一个正在导出类的DLL
class EMUDIAG_CLIENT_DLL CEmuDiagnosticsDLL
{
//...
CProjectDataFB *m_pProjectData;
//...
};
class CProjectDataFB
{
//...
WORD m_wErrorCode;
vector<EmuComputerData> m_emuComputerData;
//...
};
struct EmuComputerData
{
DWORD dwEmuComputerNo;
WORD wAPVecSize;
DWORD dwIPAddress;
vector<DWORD> apNumbers;
};
DLL会执行自己的操作来填充m_wErrorCode
和m_emuComputerData
。
我有一个EXE,其中包含CEmuDiagnosticsDLL
类的对象,并尝试获取m_wErrorCode
和m_emuComputerData
。
在调试模式下,我得到的价值m_wErrorCode
和m_emuComputerData
正确。
在发布模式下,值form_wErrorCode
可以,但form_emuComputerData
始终为0。
我无法弄清楚是什么引起了问题?
请不要在这里进入类定义的语法/顺序,因为提到它仅供参考。
由于调试版本中使用了额外的安全措施,各种STL容器的大小(和内部结构)可能会有所不同,这是因为调试版本中使用了额外的安全措施-特别是对于MS Visual C ++,请参见此处。
我怀疑您看到这种奇怪行为的原因是因为DLL和主应用程序是使用不同的配置(调试/发行版)或该_HAS_ITERATOR_DEBUGGING
宏的设置(在链接的论坛线程中显示)构建的。然后,您可能会很幸运地触发此“大小似乎为0”的问题,它也可能会崩溃。
然后,解决方案是始终保持使用相同配置(当然,也使用相同版本的MSVC等)构建的EXE和DLL部分-跨越DLL边界传递C ++对象并不容易),或者可能更改迭代器手动将宏调试为所需的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句