问题标签 [atl]

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.

0 投票
2 回答
894 浏览

c++ - 修改修饰名称 - VS6.0 到 VS2005 迁移

经过几个小时的谷歌搜索,我想是时候问问专家了。我们有一个遗留模块(MS Visual C++ 6.0),我们正在尝试将其移植到 VS 2005。存在许多调用应用程序,因此我们正在尝试(如果可能)保持这些向后兼容。

在代码方面,结果非常简单,几个小时的开发消除了所有编译器错误和大多数警告。

然后我在链接步骤中遇到了一些“未解决的外部符号”错误,这似乎是装饰名称的细微差别。

事实证明,一组错误与 time_t 是 VS2005 中的 64 位结构有关——定义_USE_32BIT_TIME_T修复了这三个。

现在我遇到了两个剩余的错误:

函数定义为

int RC_STATE::my_function(UINT stateId, UINT period, UINT index, UINT paramtype, UINT dpindex, UINT managerId, UINT calctype, UINT status, double *p_val, long *p_isc, CTime *p_time)

看来,在“旧”Visual Studio 下,它对装饰名称很满意

?my_function@RC_STATE@@QAEHIIIIIIIIPANPAJPAVCTime@@@Z

但是现在,VS2005 想要为“CTime”参数包含 ATL 命名空间:

?my_function@RC_STATE@@QAEHIIIIIIIIPANPAJPAVCTime@ATL@@@Z

如果我用这个新的修饰名称更新我的 .DEF 文件,它会编译和链接......耶!除了当我用一些曾经可以工作的代码将那个 DLL 放下时,它抱怨它无法在 DLL 中找到过程入口点(即具有“旧”结构的入口点,没有命名空间)。

有什么建议么?是否有某种关键字,编译器指令可以让我告诉编译器不要将命名空间放在修饰名称中(我知道命名空间很好,但是与需要命名空间的 CTime 类型没有冲突解决冲突)。

是否有任何解决方法可以使修饰名称与旧格式匹配?

非常感谢任何建议。

0 投票
3 回答
1282 浏览

c++ - 彻底关闭 ATL 应用程序

我已经开发了一个控制台 ATL 应用程序并且想要捕获关闭?、退出?、终止?事件,以便我可以关闭日志文件并在退出时执行一般清理。

如何捕获由于某人在任务管理器中结束 .exe 而导致的“终止”事件?

编辑:

这是一个控制台应用程序,我附加了主类。你能指出我应该在哪里以及如何使用SetConsoleCtrlHandler吗?

0 投票
1 回答
1062 浏览

c++ - 如何使用 OLE-DB 访问 COM/C++ ATL 应用程序中的 dbf 文件?

如何在 COM/C++ 应用程序(通过 ATL 创建)中访问 dbf 文件中包含的数据?

0 投票
3 回答
1203 浏览

winapi - 预注册 ATL 窗口类

我在一个项目中使用了 ATL 和 WTL 的组合,并从 派生了我自己的类CWindowImpl,它看起来像这样:

这一切都很好,如果我CMyControl::Create用来创建控件的实例,那么它在后台运行良好,该CWindowImpl::Create函数将注册 Win32 类(在本例中称为MyClassName)。

然而,正是这种行为——在创建实例时注册了 Win32 类——让我很头疼。我希望能够预先注册类,以便我可以将类名与另一个 3rd 方库一起使用,该库将使用 Win32CreateWindowEx调用创建窗口,但我找不到一个简单的方法来做到这一点。目前我通过使用static作为CreateWindowEx类名来解决这个问题,然后使用CMyWindow::SubclassWindow将我的类附加到它,但这是一个杂项。

有谁知道如何在CWindowImpl不实际创建窗口的情况下注册派生类,以便我可以CreateWindowEx成功传递类名?我认为有一种标准方法可以使用 ATL 窗口来执行此操作,因为我不是第一个遇到此问题的人。

0 投票
1 回答
903 浏览

c++ - 非平凡对象的 ATL 集合

我想公开 CMainClass 对象的 ATL COM 集合,以便 C#、VB 或 C++ 客户端可以访问它。

我设置集合本身没有问题,但我不知道如何允许 COM 客户端访问 A、B 和 C 类。我是否应该使用包含的对象制作 A、B 和 C COM 对象一个 std::list<> 每个 ATL 集合本身对吗?

有没有更简单的方法来做到这一点?!?!

谢谢,保罗

0 投票
1 回答
1408 浏览

visual-studio - 在 ATL 对话框中添加变量时如何解决“需要对象”错误

我正在使用 Visual Studio .NET 2003 在非托管 Visual C++ 中开发 COM ATL 应用程序。

我创建了一个 ATL Dialag,每当我尝试为控件添加变量时,向导都会显示“需要对象”消息。

我尝试了以下替代方案:

  • 右键单击控件以从那里调用“添加变量”:这样向导不会发送消息但不会创建变量。
  • 这篇文章,但它是针对 VS2005 的。

有谁知道这个问题的任何解决方法?或者向导实际上做了什么,所以我可以手动完成?

0 投票
2 回答
1207 浏览

c++ - 如何知道 CThreadPool 的工作何时完成?

我最近发现了 ATL 的 CThreadPool 类并且对这个发现非常满意。这是一个简洁的小类,它将处理让多个工作线程处理一些任务队列的同步语义。这些任务由一些外部进程提供给 CThreadPool 对象。

虽然非常干净整洁,但似乎没有办法确定所有任务是否都已完成。最好的方法是什么?

例如,假设我需要完成 10 个繁重的计算任务,然后继续做其他事情。在我知道任务已经完成之前,我不能继续前进。

因此,我创建了一个具有 10 个线程的 CThreadPool,将任务放入队列,然后将它们转到线程。我怎么知道任务何时完成?

波阿斯

0 投票
2 回答
168 浏览

c++ - 从 CThreadPool 下的工作线程传输错误信息的最佳方法是什么?

我最近发现了 ATL 的 CThreadPool 类并且对这个发现非常满意。这是一个简洁的小类,它将处理让多个工作线程处理一些任务队列的同步语义。这些任务由一些外部进程提供给 CThreadPool 对象。

现在假设其中一个工作线程遇到错误,或者有异常。我并不是指您希望整个应用程序死掉的异常类型,但这是您想要更优雅地处理的事情。优雅地说,我的意思是应用程序可能会死掉,但我需要做一些清理工作,并在某处放置一条正确的消息,说明它为什么会死掉。

将错误信息(消息、错误代码、源等)传输到拥有 CThreadPool 对象的主线程的最佳方式是什么?

0 投票
3 回答
9049 浏览

xml - 如何在 Visual C++ 应用程序中读取 XML 文件?

如何在 Visual C++ 应用程序中读取 XML 文件?

我需要在 Visual Studio 2003 C++ COM ATL 应用程序中读取 XML 文件 - 非托管代码。我应该使用什么库:msxml、xmllite、其他?

我需要检查xml是否满足我定义的xsd然后阅读它。

欢迎使用示例代码;)

提前致谢。

0 投票
3 回答
4868 浏览

c++ - _bstr_t 到 UTF-8 可能吗?

我有一个_bstr_t包含日语文本的字符串。我想将此字符串转换为定义为char *.

我可以将_bstr_t字符串转换为char *(UTF-8) 字符串而不会丢失日文字符吗?