我有一个相当大的基于MFC的程序.我的任务是让它在Linux上运行.我已经解释过这需要将程序重写为带有STL的直接C++(更多工作),或者重写Qt/C++(更少的工作).我现在被告知我需要编写包装器以使每个MFC类在Linux中工作并使用预处理器指令仅编译Linux或Windows中所需的内容.我解释说我们正在断开通信,而且我认为这比从头开始重写整个项目要多得多(我不需要转换为Qt).
有什么好的论据可以帮助解释这个问题吗?我错了吗?
该程序是在WindowsXP机器上用VC++ 6.0编写的.
如果我尝试直接将__int64变量设置为-2500000000,则将其截断为32位值并采用二进制补码.
__int64 testval;
testval = -2500000000;
Run Code Online (Sandbox Code Playgroud)
此时,testval等于1794967293(110 1010 1111 1101 0000 0111 0000 0000二进制).
当我将变量设置为2500000000然后乘以负数时,它可以工作:
__int64 testval;
testval = 2500000000;
testval *= -1;
Run Code Online (Sandbox Code Playgroud)
变量testval等于-2500000000(1001 0101 0000 0010 1111 1001 0000 0000二进制).
有任何想法吗?谢谢.
我有一个MFC源文件,我需要在Qt下编译.此文件使用MFC/ATL CString.具体来说,它使用CString作为iostream :: open()的参数.我编写了一个继承自QString的CString类,以便我可以使用大多数QStrings的功能.
我主要担心的是我无法让我的CString实现在调用iostream :: open()的地方工作:
这是我的班级声明:
class CString : public QString {
public:
CString() : QString() {}
CString(const QString& other) : QString(other) {}
CString(const CString& other) : QString(other) {}
CString(_In_opt_z_ const XCHAR* pszSrc) : QString( pszSrc ) { *this = pszSrc; }
CString(const char* pszSrc) : QString( pszSrc ) {}
...
}
Run Code Online (Sandbox Code Playgroud)
并且,这是使用CString的代码的一部分:
ofstream outfile;
CString Path("dump.txt");
outfile.open(Path);
Run Code Online (Sandbox Code Playgroud)
错误是:
没有用于调用'std :: basic_ofstream> :: open(CString&)'的匹配函数
在"正常"情况下,我会做一些像:
outfile.open(Path.toStdString().c_str());
Run Code Online (Sandbox Code Playgroud)
但是,这不是一种选择.未授权修改原始代码.:(
有没有办法做到这一点,或者我将不得不使用Microsoft在cstringt.h中使用的相同,更复杂和冗长的代码来重建类?
谢谢