Tag: mfc

将MFC CString转换为整数

如何将一个CString对象转换为MFC中的整数。

应用程序不与VS 2008 SP1 DLL一起运行,以前的版本与RTM版本一起使用

由于我们从Visual Studio 6切换到Visual Studio 2008,我们一直在使用MFC90.dll和msvc [pr] 90.dll以及清单文件在一个私人的并排configuration,以便不用担心版本或者将它们安装到系统中。 在SP1之前,这是工作正常(并仍然在我们的开发机器上正常工作)。 现在我们已经完成了SP1后的一些testing,自从昨天上午以来我一直在拉我的头发。 首先,我们的NSIS安装程序脚本从redist文件夹中提取dll和清单文件。 这些不再正确,因为应用程序仍然链接到RTM版本。 因此,我将_BIND_TO_CURRENT_VCLIBS_VERSION=1的定义添加到了我们所有的项目中,以便他们将使用redist文件夹中的SP1 DLL(或随着新服务包的出现)。 花了几个小时才find这个。 我已经从编译中检查了中间文件文件夹中生成的清单文件,并正确列出了9.0.30729.1 SP1版本。 我有双重和三重检查取决于一个干净的机器:它都链接到本地​​dll没有错误。 运行应用程序仍然得到以下错误: 应用程序未能正确初始化(0xc0150002)。 单击确定以终止该应用程序。 我在谷歌或微软所做的search都没有提出任何与我的具体问题有关的事情(但是有这个错误消息的2005年的点击率)。 任何人有任何类似的问题与SP1? 选项: find问题并解决问题,使其工作,因为它应该(首选) 安装redist 挖掘旧的RTM dll和清单文件,并删除#define使用当前的。 (我已经在早期的安装程序版本中获得了它们,因为微软将它们从您的redist文件夹中剔除)! 编辑:我已经尝试重新构buildclosures的定义(链接到RTM DLL),并且只要在文件夹中安装了RTM dll即可。 如果SP1 dll被放入,它会得到以下错误: c:\ Program Files \ … \ … \ X.exe 此应用程序无法启动,因为应用程序configuration不正确。 重新安装应用程序可能会解决此问题。 没有其他人必须处理这个问题吗? 编辑:只是为了咧嘴笑,我下载并在我的testing机上运行VS2008SP1的vcredist_x86.exe。 它工作。 使用SP1 DLL。 和我的RTM链接的应用程序。 但不是在SP1以前的私人并行分布。

C + + MFC与.NET?

我的同事正在使用Visual Studio 2002并使用C ++ MFC。 我正在用C#开发。 以前没有任何问题,但现在质疑我们的客户,如果我们真的应该在不同的环境中发展。 我的同事们认为(当然)我应该转向C ++ MFC。 我认为他们可以使用.NET而不是MFC。 有什么要学习的MFC? 感觉有点过时了,还是我错了? 什么是反对和.NET与MFC比较? 编辑: 我们正在为核工业开发过程系统和辅助应用程序。 主要的应用程序是模拟旧计算机系统并使用C ++ / MFC的模拟器。 这是非常紧要的,也许核心应该仍然是原生的C ++。 但是仿真器和所有周边应用程序的GUI并不特别重要。 是否有真正的理由,你应该replace现有的MFC应用程序?

我如何决定是否将ATL,MFC,Win32或CLR用于新的C ++项目?

我刚刚开始我的第一个C ++项目。 我正在使用Visual Studio 2008 。 这是一个单一窗体的Windows应用程序,用于访问几个数据库并启动WebSphere MQ事务。 我基本上理解ATL,MFC,Win32(我实际上对此有点朦胧)和CLR之间的区别,但是我对如何select我却不知所措。 是否有一个或多个这些为了向后兼容? CLR 是一个坏主意吗? 任何build议感激。 编辑:我已经selectC ++这个项目,因为我没有在post中进入,这不完全是技术性的。 所以, 假设 C ++是唯一的/最好的select,我应该select哪一个?

如何将CString和:: std :: string :: std :: wstring转换为对方?

CString非常方便,而std::string与STL容器更兼容。 我正在使用hash_map 。 但是, hash_map不支持CString作为键,所以我想将CString转换为std::string 。 编写一个CString哈希函数似乎花费了很多时间。 CString —–> std::string 我怎样才能做到这一点? std::string —–> CString: inline CString toCString(std::string const& str) { return CString(str.c_str()); } 我对吗? 编辑: 这里有更多的问题: 我怎样才能将wstring , CString转换为对方? //wstring -> CString, std::wstring src; CString result(src.c_str()); //CString->wstring. CString src; ::std::wstring des(src.GetString()); 有什么问题吗? 如何将std::wstring , std::string转换为对方?

MFC和ATL的根本区别是什么?

假设我只是使用它们作为“正常”的GUI程序(没有COM,没有ActiveX,没有什么奇特的),我将在ATL和MFC之间看到的基本区别是什么,以帮助我找出使用哪一个? 我在网上做了一些search,但最终没有一个答案真的回答了我的问题: http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx : “ATL是一种既快速又简单的方法,既可以在C ++中创build一个COM组件,又可以占用很小的空间。如果不需要MFC自动提供的所有内置function,可以使用ATL创build一个控件。 没有真正回答我的问题,因为: 我没有使用COM。 这是否意味着MFC 不是很快? 为什么/怎么样? “MFC允许您创build完整的应用程序,ActiveX控件和活动文档,如果您已经使用MFC创build了控件,则可能需要继续在MFC中进行开发。创build新控件时,如果您不需要使用ATL所有MFC的内置function“。 也不回答我的问题,因为: 我甚至不知道什么是第一个ActiveX。 看起来好像微软不鼓励使用MFC,但我不明白为什么。 什么是 ATL不提供的MFC的“内置function”? 总的来说,这并不能回答我的问题,因为这并不能解释它们背后的缺点和原因。 因为直接或间接地,一切似乎都链接回上一页: 我如何决定是否将ATL,MFC,Win32或CLR用于新的C ++项目? “ATL&MFC在两者之间有点棘手。 [不要开玩笑!] 我会把你引到MSDN的页面来select它们之间的决定。 显然 ,这不能回答我的问题。 🙂 http://www.codeguru.com/forum/archive/index.php/t-64778.html 等等 我目前观察到的 (在过去几天里,同时试图学习): ATL基于模板或编译时多态。 ATL方法往往是非虚拟的,并倾向于返回引用。 MFC是基于虚拟方法,或者是运行时多态的。 MFC方法往往是虚拟的,并倾向于返回指针。 但是他们之间似乎没有任何架构上的区别 : 两者都使用消息映射( BEGIN_MSG_MAP与BEGIN_MESSAGE_MAP …大不了) 都将Win32方法包装到类中 两人似乎都有CWnd和CWindow类似 但是,如果除了编译时间和运行时间方面没有真正的差别,为什么它们都存在? 他们中的一个还不够吗? 我在这里错过了什么?

LPCSTR,LPCTSTR和LPTSTR

LPCSTR , LPCTSTR和LPTSTR什么区别? 为什么我们需要将string转换为LV / _ITEM结构variablespszText : LV_DISPINFO dispinfo; dispinfo.item.pszText = LPTSTR((LPCTSTR)string);

为什么stdfax.h应该是第一个包含在MFC应用程序中的?

我想知道为什么这行在每个MFC应用程序存在(这迫使stdafx.h每个文件中包含第一个标题): #ifndef __AFXWIN_H__ #error "include 'stdafx.h' before including this file for PCH" #endif 这种行为背后的原因是什么?

学习MFC编程的先决条件

我知道一些C ++和C,我现在正在使用的项目是一大堆MFC编程。 有人可以告诉我学习MFC的先决条件吗? 另外,什么是最好的学习来源? 任何特定的书籍或video系列? 我知道这个问题太笼统了,但答案可能会帮助我(或任何正在挖掘MFC的人)很多 谢谢!

禁止创build临时对象

在multithreading应用程序中debugging崩溃时,我终于在这个语句中find了问题: CSingleLock(&m_criticalSection, TRUE); 请注意,它正在创buildCSingleLock类的未命名对象,因此临界区对象在此语句后立即解锁。 这显然不是编码员想要的。 这个错误是由一个简单的input错误造成的。 我的问题是,有没有办法,我可以防止在编译时创build一个类的临时对象,即上述types的代码应该会产生一个编译器错误。 总的来说,我认为每当一个class级试图做某种资源获取,那么这个class级的临时对象就不应该被允许。 有没有办法强制执行?