我目前正在将大量代码从基于 MFC 的应用程序移植到 DLL 以用于客户品牌推广。
我遇到了一个不寻常的问题。这段代码在两个系统中是相同的:
// ...
CCommsProperties props;
pController->GetProperties( props );
if (props.handshake != HANDSHAKE_RTS_CTS)
{
props.handshake = HANDSHAKE_RTS_CTS;
pController->RefreshCommProperties( props );
}
// ... in another file:
void CControllerSI::RefreshCommProperties ( const CCommsProperties& props )
{
// ... code ...
}
CommProperties 是 comm 设置、序列化等的包装器,pController 是 ControllerSI 类型,它本身是实际 Comms 和应用程序之间的一个层。
在原始 MFC 版本上,与 RTS-CTS 握手的设置保持不变,但是当作为 DLL 版本运行时,它会在输入函数后立即将自身重置为 0。代码完全包含在代码的 DLL 部分中,因此没有界限。
原始模块和新模块之间的主要区别是调用各种对话框的变量已被删除,并且已删除 #includes
我已经为此失去了一个下午,我真的不想再失去了......