问题标签 [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 回答
1324 浏览

com - 如何防止在 ATL 类型库中公开 coclass 实现

我正在构建一个具有类工厂类型的 ATL 类型库。有点像这样:

然后,用户可以INumber通过NumberFactory.

这很好用,但我不知道如何定义和实例化通过该NumberFactory.GetNumber()方法返回的 ATL 对象。如果我这样定义 IDL 中的数字:

Onecoclass 可以由用户实例化。但我想限制它,所以获得Onecoclass 实例的唯一方法是调用NumberFactory.GetNumber("One").

所以我的问题是:应该如何编写 IDL 以便用户无法实例化One,但仍然能够OneNumberFactorycoclass 内部实例化并将INumber接口返回One给用户?

此外,为了使其工作,在 ATL 方面是否必须做任何特别的事情?

0 投票
1 回答
555 浏览

visual-c++ - 在 Vista 上托管 ActiveX 的问题(在 Visual Studio 6 C++ 应用程序中)II

(自从我现在注册为用户后,我正在重新发布此消息)

我刚刚在 Vista Enterprise 机器上安装了 Visual Studio 6 (SP5)。有一些问题,但我认为它设置得很好。

问题是我的 VC++ 6 应用程序在尝试托管 ActiveX 时失败。我能够编译它,但从 Vista 收到关于 rc.exe 的警告消息(“该程序存在已知的兼容性问题”)。

当我调试它时,我看到派生自 CAxDialogImpl 的类在其 Create() 方法上失败。相同的应用程序在 XP 上运行良好!

那里有已知的兼容性问题吗?

一些技术信息:我看到 CAxDialogImpl::Create()(我在这里传递 NULL)调用 AtlAxCreateDialogA,后者又调用 CreateDialogIndirectParama,它会引发一般异常。

非常感谢,埃里克

PS - 1. 我是我机器上的管理员。操作系统是 32 位的。2. 我知道Vista不支持VS6,但我别无选择,因为我在尝试将它迁移到VS 2008时遇到了麻烦。

0 投票
1 回答
232 浏览

atl - 使用 COM 接口作为参数的问题

我有以下问题:

我必须项目Project1Project2。在Project1中,我有一个接口IMyInterface。在Project2中,我有一个接口IMyInterface2,其方法接收指向IMyInterface1的指针。

当我使用import "Project1.idl"时;在我的Project2.idl中,#include "Project1.h"出现在Project2___i.h中。但是这个文件甚至不存在!将定义到其他库中的接口导入 idl 文件的正确方法是什么?

我试图用#include "Project1_i.h"#include "Project1_i.c" 替换 #include "Project1.h" 但它给了我很多错误。

我还尝试使用importlib("Project1.tlb")并在库定义中定义我的接口IMyInterface2 。但是当我编译 Project2PS 项目时,会引发一个错误(如果没有定义接口,则不会生成类似dlldata.c的东西)。

我试图创建一个虚拟Project1.h。但是在编译Project2___i.h时,编译器找不到MyInterface1。如果我包含Project1___i.h,我会再次遇到很多错误!

显然,这是一个简单的问题,但我不知道如何解决它。我坚持这一点!

顺便说一句,我使用的是 VS2008 SP1。

提前致谢。

0 投票
1 回答
297 浏览

.net - MS09-035 漏洞和对应用程序开发的影响

有谁知道这些补丁http://www.microsoft.com/technet/security/bulletin/ms09-035.mspxhttp://www.microsoft.com/technet/security/bulletin/ms09-034.mspx是否会适用于使用“纯”(即非托管 C++).NET 语言之一构建的软件?

我相信答案是它们不受影响,因为这似乎是一个纯粹的 ATL 漏洞,但对 CLR 中 ATL 的底层用法没有足够的了解。

0 投票
3 回答
532 浏览

c++ - ATL 安全更新破坏了 DLL 的兼容性,具体取决于旧版本

最近的ATL 安全更新将 C++ 运行时更新到版本 8.0.50727.4053。不幸的是,此更新破坏了我们动态链接到运行时的 DLL 之一,因为我们在目标机器上只有 8.0.50727.762 可供我们使用(我们甚至不使用 ATL)。

有没有办法让 Visual Studio 动态链接到旧的 DLL?如果可能的话,我想避免静态链接。

0 投票
2 回答
434 浏览

security - Delphi 和 Microsoft ATL 安全问题

我的印象是标准的 Delphi 使用 Win32 API。

最近微软一直在传达一个关于 ATL 的问题,即要求应用程序开发人员在他们的机器上安装更新后重建使用 ATL 的应用程序。这种做法是否也适用于 Delphi 开发人员,或者除了使用第三方 ATL COM 对象的 Delphi 代码之外,他们是否清楚?

资料来源:

0 投票
1 回答
245 浏览

c++ - 我在哪里放置 ATL dll 以便它们可以工作

一位同事开发了一个 IE 插件,我需要使用 ATL 运行它来完成一项工作。我有所有的源代码和编译的 dll 以及一个注册表编辑器。

我已经运行了 reg 编辑并将 dll 移到了我认为它应该驻留的 C:\Windows\System32 目录,但这似乎没有用。

我应该把 dll 放在哪里才能正常运行?

还有一种简单的方法可以判断插件是否已正确安装?

谢谢

0 投票
3 回答
1405 浏览

c++ - 即使选择了指向 ATL 的静态链接,Atl71.dll 依赖仍然存在

我已经花了一整天的时间来解决这个问题,但还没有运气。在我的项目中,我在通用属性页上将使用 ATL 属性设置静态链接到 ATL,并在代码生成属性 C/C++ 文件夹)上将运行时库属性设置为多线程 (/MT )。但是 DependencyWalker 仍然显示 Atl71.dll 依赖项。

我用谷歌搜索,发现这个页面http://www.eggheadcafe.com/forumarchives/vcatl/Mar2006/post26077463.asp有一个在atlbase.h之后添加atlwin.h的解决方案。该解决方案确实有助于减少对 atl71.dll 的依赖。但是它引入了一个新问题,即 CreateWindow 无法正常工作。

hwnd 为 NULL。

所以不能使用添加atlwin.h的解决方案,不知道有没有人遇到过类似的静态链接问题?如何解决?

环境:VS 2003 .Net

谢谢!

0 投票
2 回答
1813 浏览

regex - CAtlRegExp 用于匹配最多 4 个字符的正则表达式

简洁版本:

如何使用CAtlRegExp获得匹配 a@a.aaaa 但不匹配 a@a.aaaaa 的正则表达式?


长版:

我正在使用 CAtlRegExp http://msdn.microsoft.com/en-us/library/k3zs4axe(VS.80).aspx来尝试匹配电子邮件地址。我想使用正则表达式

这里提取。但是 CAtlRegExp 接受的语法不同于那里使用的语法。此正则表达式返回错误 REPARSE_ERROR_BRACKET_EXPECTED,您可以使用此应用程序自行检查:http: //www.codeproject.com/KB/string/mfcregex.aspx

使用所述应用程序,我创建了这个正则表达式:

但问题是这匹配 a@a.aaaaa 为有效,我需要它来匹配操作级域的最多 4 个字符。

那么,如何获得匹配 a@a.aaaa 但不匹配 a@a.aaaaa 的正则表达式?

0 投票
3 回答
4691 浏览

c# - 使用 COM 互操作将 BSTR 从 C++ 编组到 C#

我有一个用 C++ 编写的进程外 COM 服务器,它由一些 C# 客户端代码调用。服务器接口之一上的方法向客户端返回一个大的 BSTR,我怀疑这会导致内存泄漏。该代码有效,但我正在寻求有关编组 BSTR 的帮助。

稍微简化一下,服务器方法的 IDL 是

并且实现看起来像:

A2BSTR 使用 SysAllocStringLen() 在内部分配 BSTR。

在 C# 客户端中,我只需执行以下操作:

这是可行的,因为请求字符串被发送到 COM 服务器,并且正确的响应字符串被返回给 C# 客户端。但是每次到服务器的往返都会泄漏服务器进程中的内存。crt 泄漏检测支持显示 crt 堆上没有明显的泄漏,所以我怀疑泄漏是用 IMalloc 分配的。

我在这里做错什么了吗?我发现了一些模糊的评论,即“必须使用 CoTaskMemAlloc 分配所有参数,否则互操作编组器不会释放它们”,但没有详细信息。

安迪