草庐IT

c++ - 在模块之间传递 STL 和/或 MFC 对象

我有一个相当大的代码库,它是高度模块化的(很多很多插件),并且经常需要在模块之间传递字符串等。作为引用,代码:仅在MSVC/VisualStudio中编译,很明显不支持也不会支持其他编译器。支持他们不是问题。仅在Windows上运行,很明显不会也不会支持其他操作系统。同上。所有模块都是某种形式的WindowsPE;假设位数相同,并且它们是为同一平台构建的。有几个地方MFC更容易使用,有几个地方STL更容易使用。很有可能两者都将在每个模块中使用。问题仅关于在模块之间传递对象。现在,我的印象是,如果库或编译器版本发生变化,在模块之间传递STL对象确实会中断。特别是当涉及到dtor和销毁它们

c++ - 如何在 MFC View 上显示 OpenCV Mat

我认为在MFCView上显示OpenCV2Mat很简单,但事实并非如此。ThisisonlyrelevantmaterialIfoundongoogle.请原谅我的无知,但我找不到任何其他Material来展示如何将SetDIBitsToDevice与一维数组“数据”成员返回一起使用。更具体地说,我需要知道如何为函数指定BITMAPINFO。我要回到旧的C风格的OpenCV来使用MFC吗?更新:我找到了anexampleofSetDIBitsToDevice这实际上适用于旧的C风格的OpenCV。但是将它转换为OpenCV2很简单。为了让它发挥作用,我需要提及一些事情:Bpp方法效果不

c++ - ID2D1HwndRenderTarget 总是有黑色背景而不是透明

我正在尝试创建一个简单的透明窗口,我可以在其中使用Direct2D进行绘图。到目前为止我做了什么:创建窗口将样式设置为WS_EX_LAYERED设置alpha颜色键为#FFF使用WindowsGraphics绘制一个白色矩形现在窗口是透明的,每像素alpha然后在窗口外制作一个目标并使用Direct2D绘制制定ALPHA_PREMULIPLIED目标使用0.0falpha清除#FFF窗口现在是黑色的我只是不知道如何使窗口透明。如果您能指出我的错误,我将不胜感激 最佳答案 这里是如何使用DirectCompositionAPI实现的俄

c++ - 如何在 C++ 中使用 fprintf 编写 UTF-8 文件

我正在(只是偶尔)使用VisualStudio和MFC使用C++进行编程。我用fopen和fprintf写了一个文件。该文件应以UTF8编码。有没有可能这样做?无论我尝试什么,文件都是双字节unicode或ISO-8859-2(latin2)编码。格兰布里奇 最佳答案 如果您只想使用fprintf,则无需设置语言环境或对文件设置任何特殊模式。您只需使用UTF-8编码的字符串即可。#include#includeintmain(){std::wstring_convert,wchar_t>convert;std::stringutf8

c++ - 如何优雅地从 COM 错误中恢复?

我有一个第三方COM组件及其在VC++中的c++接口(interface)。我在下面的调用中崩溃了,这使我的应用程序崩溃了。我如何从这个实际上不属于我的应用程序的功能中正常恢复?inline_RecordsetPtrIGLibMgr::GetLibInfo(_bstr_tLibPath){struct_Recordset*_result=0;HRESULT_hr=raw_GetLibInfo(LibPath,&_result);if(FAILED(_hr))_com_issue_errorex(_hr,this,__uuidof(this));return_RecordsetPtr(_

c++ - 为什么 CFileDialog::GetNextPathName 在文件路径很长时不起作用?

使用CFileDialog类,我选择了放置在一个长路径目录中的多个文件。当我只选择一个或两个文件时就可以了;但是当我同时选择三个文件时,它只返回第三个文件路径的一部分。(看起来可能限制为512个字符)我该如何解决这个问题? 最佳答案 MFC使用大小为_MAX_PATH的默认缓冲区,这就是您看到该行为的原因。查看dlgfile.cpp以了解CFileDialog::CFileDialog的实现,您将看到m_ofn.lpstrFile和m_ofn.nMaxFile正在设置。如果需要,您可以指定更大的缓冲区。在调用DoModal之前,您可

c++ - 如何只替换 CString 中第一次出现的字符?

我有一个CStringst=$/Abc/cda/($/dba/abc)/。我只想用c:\替换第一次出现的$。我尝试替换为st.Replace("$","c:\");但它取代了所有出现的$。你能给我建议任何只替换第一次出现的字符的逻辑吗。 最佳答案 由于您要用三个字符替换单个字符,因此可以使用CString::Find(),然后使用CString::Delete()和CString::Insert(),比如intnInx=st.Find('$');if(nInx>=0){st.Delete(nInx,1);st.Insert(nInx

javascript - 从 C++ 调用 JavaScript 函数

我有一个CDHTMLDialog,我有2个HTML页面和一个带有一些相当简单功能的.js文件。我希望能够从我的程序中调用一个JS函数,并传递一个简单的数据类型。例如我的函数(整数)。什么都不需要退回。我将不胜感激关于我如何去做的任何指导,谢谢。编辑:感谢CR的回答,以及其他提交想法的人。最后有点像这样的东西起作用了(为了清楚起见,去掉了一些错误处理):voidcallJavaScriptFunc(intFruit){HRESULThRes;CStringFuncStr;CStringLangStr="javascript";VARIANTvEmpty={0};CComPtrHTML2D

c++ - 应用程序与一个应用程序之间通信的最佳方式

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我正在使用C++MFC。我想知道在X应用程序与一个行为类似于“应用程序管理器”的应用程序之间进行通信的最佳方式是什么我正在考虑使用SendMessge(Win32Api),但不知道是否有更好的方法(比如套接字)我想得到一些关于这个问题的建议。优缺点欢迎!谢谢

c++ - CString 运算符 "+="和 "+"之间的不同行为

在将应用程序从VisualStudio2005迁移到VisualStudio2015时,我们发现在某些代码中存在不同的行为,当该代码是使用VS2015构建时连接CString实例。因此,我创建了一个简单的Win32控制台应用程序来演示该问题。控制台应用程序(使用MFC作为共享dll和Unicode字符集)执行这个简单的功能:voidf(){CStringx('\0');CStringr('a');r+=x;CStringrr('a');rr=rr+x;intrSize=r.GetLength();intrrSize=rr.GetLength();assert(rSize==rrSize