问题标签 [afx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 来自另一个 DLL 的静态数据成员的外部未解析
考虑以下From.dll
定义From
类的库源:
标题:
执行:
该库静态成员staticMember
必须从以下To
类中使用,该类还必须产生 DLL ( To.dll
):
标题:
执行:
但是我LNK2001: unresolved external symbol "public: static char const * const From::staticMember" (?staticMember@From@@2QBDB)
在链接时不断得到这个To.dll
,无论它是直接在 Visual Studio 上还是它是由 cmake 生成的 nmake:
第一个DLL被编译和链接好了。以下是我的 CMakeLists.txt 的相关部分:
导出这个静态数据成员我做错了什么?
c++ - CoCreateInstance 返回 E_INVALIDARG
我在这里尝试做的只是创建一个接口的实例。真的应该这么简单。一直在关注任何在线材料,阅读我能找到但无法终生解决这个问题的材料。
它归结为从 CoCreateInstance 返回的 HRESULT 是 E_INVALIDARG。我已经尽可能多地更改了参数以尝试使其工作,但仍然无法获得它。所以请看一眼,希望有人能指出我正在寻找的一些简单的东西。
(由于法律责任,本代码中未显示实际名称)
c++ - MS Visual C++ 多线程访问分配的变量会导致访问冲突
我在使用 MSVC 2013 构建基于 MFC 对话框的应用程序时遇到问题。为了在更复杂的功能期间也可以访问主对话框,我使用了多线程。单击对话框中的按钮会调用由另一个线程制定的“工作函数”。
这是该课程的摘录:
单击一个按钮调用StartSweepAndImageThread
它本身调用SweepAndImageThreadProc
,最后调用DoSweepAndImage
. 在函数DoSweepAndImage
中,访问(读取和写入)类的变量。其中,有imgs_name
. 用法是:
whileimgs_name
被初始化为
在OnInitDialog
函数中。
问题是当按下提及按钮时我收到
正好在imgs_name[i] = str;
。当使用静态数组而不是CString *imgs_name;
I defineCString imgs_name[4];
时,一切正常。但是,我非常希望该CString
变量是动态变量。在此先感谢您的帮助!
PS:当我以串行方式对此进行评估时,即DoSweepAndImage
在主线程中运行该函数时,一切顺利。这就是为什么我认为访问冲突是由于多线程造成的。
@Wimmel:循环i
是DoSweepAndImage
multithreading - AfxBeginThread() PostMessage 更改控制
我有一个带有 AfxBeginThread() 的程序,它需要将 postmessage 发送到主对话框以更改 listcontrol 数据。
我如何实现这一点,因为我需要传递我想要更改的文本和元素更改文本?我该怎么做?
c++ - “AfxIsValidAddress”函数的等效标准函数是什么?
我正在使用一个 MFC 项目,该项目应在独立于平台的环境中进行保护,使用标准函数而不是 MFC/AFX。
例如:将使用 std::string 代替 CString,使用 std::mutex 代替 CMutex。
MFC 函数“AfxIsValidAddress”的独立于平台的 C++11 std::-等价物是什么?
c++ - 取消的准确睡眠
我需要实现一个准确一致的延迟或睡眠功能,并且必须能够被取消。
这是我的代码:
上述函数在工作线程中运行。主线程能够更改“cancel_flag”的值以中止(取消)睡眠。
在我的商店,当持续时间为 10 秒(10000 毫秒)时,我们会得到不同的结果。一些电脑显示 10 秒的睡眠持续时间,其他电脑显示 16 秒。
关于 Sleep() 函数的文章说它绑定到窗口中断,并且当持续时间过去时,线程被重新调度(可能不会立即运行)。由于重新调度和中断延迟,上述函数可能会遇到时间错误传播。
Windows 时间戳项目描述了另一种等待计时器对象的技术。我的理解是,这种技术不提供取消的方法(通过另一个主线程)。
问题:
1.如何改进线程延迟或睡眠的实现,可以被另一个任务取消,并且更一致?
可以终止休眠的 AFX 线程吗?
(当主线程终止休眠的 AFX 线程时会发生什么?)当主线程终止调用 WaitForSingleObject 的线程时会发生什么?
精度应该在 10ms 左右,如 10 秒 + 10ms。
结果应该在各种 PC(所有运行 Windows 7 或 10)之间保持一致。
具有正确计时的后台
PC 运行 Windows 7,频率为 2.9 GHz。
计时不正确的 PC 运行的是 3.1 GHz 的 Windows 7,同时运行的任务和应用程序较少。
应用程序是使用 Visual Studio 2017 和 MFC 框架(使用 AFX 进行线程创建)开发的。
visual-studio - 在 Visual Studio 中编写 MFC/STL 程序需要做什么?
我已经在我的私人 PC 上安装了 Visual Studio,版本是“Microsoft Visual Studio Community 2019”,版本 16.1.6。
为了准备工作面试,我想做一些基本的 MFC/AFX 编程,从Microsoft 网站上CMapStringToString
的基本示例开始。但是,这似乎不起作用,因为我无权访问提到的文件。确实:没有文件,在我的 PC 上调用。afxcoll.h
afx*.h
这是我免费下载的 Visual Studio 安装的限制,还是我可以安装任何加载项、加载项、扩展或任何东西来处理CMapStringToString
对象?
提前致谢
c++ - 嵌入式 IE 控件(CHtmlView)在拖动时不传递 WM_SIZE
我注意到使用嵌入式 IE 控件 (CHtmlView),任何通过拖动父窗口的边框来调整大小的尝试都不会调整 IE 控件的内部工作。我启动了 Spy++ 并将嵌入式控件与 IE 浏览器进行了比较,我很确定这是“Shell Embedding”窗口,它阻止了任何大小调整事件传播到 Internet Explorer_Server 控件。
我可以看到 WM_SIZE、WM_WINDOWPOSCHANGED 等点击了 Shell Embedding 控件,但 Shell DocObject View 什么也得不到。但是,它会通过最大化/恢复向下接收这些消息并适当地调整内部 IE_Server 的大小。
查看 IE 本身:
我确实看到了大小调整、位置更改等事件击中了 Shell DocObject 视图,并且显然 IE 在拖动边框时调整了页面大小。唯一有意义的是,Shell Embedding 窗口不会通过拖动来调整大小。
这是否准确,如果是这样,除了手动将 WM_SIZE 事件发送到 Shell Embedding 子项以强制它调整大小的一些技巧之外,是否有一种解决方法来调整它的大小?
debugging - 为什么在 MFC 应用程序中设置 DEBUG_NEW 会导致编译器错误
这里说您可以在 MFC 应用程序中将 DEBUG_NEW 代替 new。当我这样做时,编译器会说 DEBUG_NEW 没有定义。它是 VS 2017。定义了 _DEBUG。有什么问题?
[编辑] 首先我应该注意我把它作为整个项目的全局定义。有成千上万的错误(这是一个大项目)。然后我只改变了一次。一个在我的代码中。它不工作。包含但不直接
c++ - 等待线程完成而不冻结 MFC 中的 UI
我正在尝试使用AfxBeginThread
并等待它完成来启动一个工作线程。但是我遇到了一个问题,我可以在没有线程控制的情况下更新 UI(显示进度),或者等待线程但 UI 冻结。我发现了几种获得完成的方法,但它们都使用WaitForSingleObject
. 有没有其他解决方案?这是我的示例代码: