问题标签 [atlcom]

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 回答
2426 浏览

visual-studio-2008 - 在 VS 2008 中构建代理/存根 dll

我有一个从 VC6 迁移到 VS 2008 的 ATL COM 项目。如何在 VS2008 上构建 PS DLL?

VS 2008 中的新 ATL 项目有一个单独的 PS 项目,用于构建 PS DLL。但是从 VC6 迁移并没有创建这个项目。

我试图在 PS mk 文件上调用 nmake,但是对于存在于我们的源文件和自动包含的 windows 头文件中的枚举类型,这给出了重新定义错误。在解决方案中,我们通过定义WIN32_LEAN_AND_MEAN排除不必要的头文件的预处理器来解决这个问题。我可以在使用 nmake 时做同样的事情吗?

有没有其他方法可以创建 PS DLL?

0 投票
3 回答
1143 浏览

interface - COM 对象到 COM 接口的 dynamic_cast 不会增加引用计数,是吗?

如果我有一个 C++ 类 X,它实现了 COM 接口 IY 和 IZ,并且我有一个指向 X 类型对象的 IY 接口的指针 y,我这样做:

这不会影响对象的引用计数,是吗?我不必做一个 Release() 来解释它,对吧?

如果重要的话,我正在使用 ATL/COM。

我猜答案是“不,它不会增加引用计数,不,你不必 Release()”,但我想确定一下。

提前致谢。

0 投票
2 回答
384 浏览

interface - ATL/COM:定义一个在 DLL 之外不可用的 COM 接口?

我有一个使用 VC++ 6.0 制作的基于 ATL/COM 的 DLL。它用于使用 VB6 构建的各种可执行文件。

我想添加一些无法通过 VB6 访问的 COM 接口,仅供 DLL 内部使用。我希望它们是 COM 接口而不仅仅是 C++ 接口,因为我将在我只有 COM 接口引用的对象上使用它们(在使用时)。

也就是说,我不知道(在使用时)这个指针指向一个 CFoo;我只知道它指向一个 IFoo,其中 IFoo 是一个 COM 接口,发布以便 VB6 知道它。从这个 IFoo 指针,我想得到一个 IFooInternal 指针,每个实现 IFoo 的类(不仅仅是 CFoo)都将实现它。此外,我不希望 IFooInternal 可以在 DLL 本身之外访问;例如,我不希望 VB6 可以访问 IFooInternal。

对此的任何帮助将不胜感激。对于实现相同总体目标的替代方法的建议也是如此。提前致谢。

0 投票
1 回答
123 浏览

windows-mobile - Support of ATL WebBrowser controls in Windows mobile 7.0

Just being curious, we would like to know the support for ATL webbrowser control (IWebBrowser2) is available on next windows mobile 7.0 version.

Can anybody confirm the same.

Thanks, Ramanand

0 投票
1 回答
1851 浏览

c++ - ATLComTime.h 是什么可再发行组件的一部分?

我向其他人编写的代码库添加了功能,而在 VS2005 中设置了“不使用 ATL”标志时,我看到#include <ATLComTime.h>其中一个文件中有。我只发送了可再发行的 C-Runtime 库(请参见此处)。客户端无法获取代码以在他们的机器上工作。他们收到“找不到 DLL 入口点”错误。我觉得这是目标机器上某种缺失的 DLL 或库,因为我们已经能够在我们所有的测试机器上安装它。

他们希望我确保不会向客户发送“伪造的”可再分发文件。由于我似乎无法最终找到此标头与哪个可再发行文件相关,所以我在这里询问。我不知所措。可以帮忙?

0 投票
2 回答
163 浏览

visual-studio - 我可以使用较新版本的 Visual Studio 来做“旧”的事情吗?

我有几个基于 ATL/COM 的 DLL,我一直在使用 Visual C++ 6.0。我需要从生成的 DLL 中提取一些“旧”的东西:

(1) 它们必须与使用 Visual Basic 6.0(旧的 VB6,强调不是 VB.Net)开发的项目兼容。

(2) 它们必须与旧操作系统兼容 - 最低为 Windows 98 SE。需要明确的是,我的意思是它们必须在这样的操作系统上运行,而不是我必须能够在运行这样的操作系统的机器上开发它们。

我厌倦了 Visual Studio 6.0。转换为 Dot Net(或任何其他类似的重大更改)目前是不可能的,所以我必须继续使用 VB6。但是我可以用最少的努力(即如果需要重新编码的话)切换到较新的 Visual Studio 的 C++ 吗?

如果是这样,是否有任何我应该注意的“陷阱”?

谢谢。

0 投票
2 回答
1314 浏览

c++ - 有哪些简单的方法可以用 COM 接口包装基于 c++ 的对象模型

我有一个预先存在的 c++ 对象模型,它代表应用程序的业务层。我希望能够将对象模型暴露给用其他语言编写的应用程序,即 vbscript、VB、javascript 等。我相信这样做的最佳方法是用 COM 层包装业务对象。

有什么快速有效的方法可以做到这一点。任何建议,实用的“如何”文档的链接将不胜感激。

因为我正在为此开始赏金,所以这里有一些针对潜在赏金猎人的额外指南:- 1)我已经决定采用 ATL 方法 2)我现在专门寻找非常好的“如何快速”的链接有关包装预先存在的 c++ 对象模型以使其可被 javascript 之类的脚本语言使用的文档 3) 带有小型工作示例的东西向我展示了需要将哪些代码添加到哪些文件中,例如进入 cpp 、 idl 和 hpp/ 的内容h 等。它必须包含一个示例,我可以编译测试和更改以获得更好的理解。

附录.....进一步的上下文。对我来说,这是大约 10 年后再次访问 COM。在 2000 年之前的 3 年里,我做了 MFC 和 ATL COM。我了解 COM 是什么,在 C++ 中用于实现它的原理、线程模型等。任何“如何快速”的文档都不会让我盲目地沉迷重要的原则,更多的是指导性的重新学习体验。

如果我有更多时间,我会深入研究 Troelsen 的“COM 和 ATL 3.0 开发人员研讨会”,这是一本非常好的书,但它是一个非常缓慢的启动(重新)启动。

评论后的进一步上下文............

使其尽可能简单,单线程单元模型和进程内 dll。

0 投票
1 回答
2107 浏览

com - 如何将结构数组(包含 std:string 或 BSTR)从 ATL 传递到 C#。安全阵列?变种?

我有一个从 C# 使用的 ATL COM 对象。目前界面如下:

也就是说,它是一个非常简单的界面。我也有一些事件要发回。现在,我想在界面中添加一些内容。在 ATL 中,我有一些结果,它们当前是结构,看起来像 struct REPORT_LINE { string creationDate; 字符串标识;字符串摘要;}; 结构的所有成员都是st​​d::string。我有一个数组,我需要回到 C#。最好的方法是什么?

我怀疑有人会说,“嘿,你不能像那样通过 COM 发送 std::string。如果是这样,很好,但是修改结构的最佳方法是什么?将 std::string 更改为 BSTR?然后我该怎么做,1)设置 IDL 以传递结构数组(带有 BSTR 或 std::string 的结构) 2)如果我必须使用 SAFEARRAYS,我如何用结构填充 SAFEARRAYS。

除了使用简单类型外,我不熟悉 COM。

0 投票
2 回答
177 浏览

visual-c++ - MFC 应用程序如何提交虚拟内存?

我正在开发一个 MFC 应用程序,它似乎会自动提交 ~160MB 的虚拟内存。该应用程序通常以 10-14MB 的内存使用量运行,因此此级别的已提交内存似乎过多。此外,在代码中没有调用 VirtualAlloc 的地方...... COM 和 ATL 也被使用。

在可以到达 __tmainCRTStartup 中的断点之前,内存显示进程启动的实例已提交。

如何保留/提交此内存?

提前致谢!

0 投票
1 回答
1185 浏览

c# - C# 中 ATL dll 文件的访问方法

我一直在尝试链接一些 c++ 代码并将其包装在 COM 对象中以通过 C# 访问。我创建了一个 atl 项目并添加了一个简单的方法,例如 Add(double a, double b)。以下是我的 atl.h 文件中的代码:

以下来自atl.cpp文件

在我的 c# 文件中,我正在调用 dll ......在我引用它之后......它看到了 dll,但没有看到分配的方法。这是我的问题。这是来自 program.cs 的代码

在 Add(2, 3) 处调试中断;显示“无法在 DLL 'com.dll' 中找到名为 'Add' 的入口点。” 有任何想法吗?