小编E.F*_*tas的帖子

在Linux上运行MFC程序

我有一个相当大的基于MFC的程序.我的任务是让它在Linux上运行.我已经解释过这需要将程序重写为带有STL的直接C++(更多工作),或者重写Qt/C++(更少的工作).我现在被告知我需要编写包装器以使每个MFC类在Linux中工作并使用预处理器指令仅编译Linux或Windows中所需的内容.我解释说我们正在断开通信,而且我认为这比从头开始重写整个项目要多得多(我不需要转换为Qt).

有什么好的论据可以帮助解释这个问题吗?我错了吗?

c++ qt mfc stl

17
推荐指数
2
解决办法
1万
查看次数

为什么我不能直接将__int64变量设置为-2500000000?

该程序是在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二进制).

有任何想法吗?谢谢.

c++ windows visual-c++-6 int64 visual-c++

6
推荐指数
2
解决办法
1842
查看次数

如何复制CString功能

我有一个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中使用的相同,更复杂和冗长的代码来重建类?

谢谢

c++ qt mfc

2
推荐指数
1
解决办法
1035
查看次数

标签 统计

c++ ×3

mfc ×2

qt ×2

int64 ×1

stl ×1

visual-c++ ×1

visual-c++-6 ×1

windows ×1