在“释放”模式下访问时,向量大小为0

日本语

我有一个正在导出类的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_wErrorCodem_emuComputerData

我有一个EXE,其中包含CEmuDiagnosticsDLL类的对象,并尝试获取m_wErrorCodem_emuComputerData
在调试模式下,我得到的价值m_wErrorCodem_emuComputerData正确。
在发布模式下,值form_wErrorCode可以,但form_emuComputerData始终为0。

我无法弄清楚是什么引起了问题?

请不要在这里进入类定义的语法/顺序,因为提到它仅供参考。

伊尔卡

由于调试版本中使用了额外的安全措施,各种STL容器的大小(和内部结构)可能会有所不同,这是因为调试版本中使用了额外的安全措施-特别是对于MS Visual C ++,请参见此处

我怀疑您看到这种奇怪行为的原因是因为DLL和主应用程序是使用不同的配置(调试/发行版)或该_HAS_ITERATOR_DEBUGGING宏的设置(在链接的论坛线程中显示)构建的然后,您可能会很幸运地触发此“大小似乎为0”的问题,它也可能会崩溃。

然后,解决方案是始终保持使用相同配置(当然,也使用相同版本的MSVC等)构建的EXE和DLL部分-跨越DLL边界传递C ++对象并不容易),或者可能更改迭代器手动将宏调试为所需的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章