- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个 C++ COM 库以在 VB6 应用程序中使用它。 .IDL 文件定义了一些接口(interface)和一个类库,其中包含一些实现这些接口(interface)的组件类:
[
local,
object,
uuid(....),
version(1.0)
]
interface ICOMCvPixelBuffer : IUnknown
{
....
};
[
local,
object,
uuid(....),
version(1.0)
]
interface ICOMCvBitmap : IUnknown
{
....
HRESULT GetPixelBuffer([retval][out] ICOMCvPixelBuffer** pBuffer);
HRESULT SetPixelBuffer([in] ICOMCvPixelBuffer* pBuffer);
....
};
[
uuid(....),
version(1.0)
]
library COMCvLibrary
{
importlib("stdole32.tlb");
interface ICOMCvBitmap;
interface ICOMCvPixelBuffer;
[
uuid(....),
version(1.0)
]
coclass CCOMCvPixelBuffer
{
[default] interface ICOMCvPixelBuffer;
};
[
uuid(....),
version(1.0)
]
coclass CCOMCvBitmap
{
[default] interface ICOMCvBitmap;
};
};
VB6 中的对象浏览器将 CCOMCvBitmap
类的 SetPixelBuffer
方法定义为 Sub SetPixelBuffer(pBuffer As CCOMCvPixelBuffer)
。
为什么它不是在 .IDL 中声明的 Sub SetPixelBuffer(pBuffer As ICOMCvPixelBuffer)
?
最佳答案
我终于找到了问题的答案。
正如我从书中了解到的".NET and COM: The Complete Interoperability Guide" , 如果 coclass 的默认接口(interface)定义在与 coclass 相同的类库中,则 VB6 的类型库导入器将默认接口(interface)类型的所有参数和字段替换为 coclass 类型。
此外,可以找到有关支持 VB6 的机制的有用信息 here :
Visual Basic uses the class module name as an alias for the default interface; that is, the Visual Basic compiler maps the class name to the default interface reference silently for you.
其中一个可行的解决方案是提供 IUnknown
作为 CCOMCvPixelBuffer
coclass 的默认接口(interface):
[
uuid(....),
version(1.0)
]
coclass CCOMCvPixelBuffer
{
[default] interface IUnknown;
interface ICOMCvPixelBuffer;
};
关于c++ - 为什么在 VB6 中 COM 接口(interface)名称被 coclass 名称替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548390/
我在 COM 中相对较新,所以如果这是一个愚蠢的问题,我很抱歉。我将一堆 COM 接口(interface)编译到类型库 A 中。这个类型库是我的解决方案中的一个 DLL (a.dll) 中的资源。在
我在我们使用的第 3 方库中发现了类似于以下内容的代码。 [CoClass(typeof(BlahClass))] public interface Blah : IBlah { } 这到底在做什么?
当我从另一个 Proxy Server 项目中定义的接口(interface)派生所述接口(interface)时,为什么我不能在 idl 文件中定义一个接口(interface),然后让 CoCla
我正在编写一个 C++/CLI 应用程序,该应用程序使用提供多个类的 COM dll。它们中的大多数实现了一些接口(interface)。我想知道如何访问每个不同接口(interface)的方法。例如
我是 COM 的新手,我在互联网上四处寻找如何用 C++ 创建 COM 类(供 C# 使用)。我已经在 .idl 文件中看到,我必须放置如下内容: [ object, uuid(a93164ee-e6
我目前正在 COM 上阅读这篇文章: http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465 我了解 COM 类,也称为“CoClasses
如何迭代/访问 COM coclass 的 vtable,它将实现其公开接口(interface)的方法? 我需要访问存储其接口(interface)公开方法的所有地址的 vtable 部分。 例如M
我正在构建一个具有类工厂类型的 ATL 类型库。有点像这样: [ object, uuid(...), ... ] interface INumber : IDispatch { [propg
我使用 ATL 创建了一个 COM 对象。我想创建一个可以从方法返回并作为参数传入的新对象。我已经创建了 coclass,但我不知道如何添加一个方法来接受它作为参数。 我得到的错误是 MIDL2025
假设您有一个 COM 接口(interface) ICOMInterface,它由组件类 Coclass1 和 Coclass2 实现。这些组件类都没有自己的接口(interface)(为了简单起见并
有什么方法可以确定通过实例化 COM 组件类启动的进程的 PID? 例如: MyApp.ApplicationClass anApp = new MyApp.ApplicationClass(); 将
使用tlbimp.exe 工具导入基本类型库总是会为每个coclass 创建一个接口(interface)。例如这个 IDL 描述 interface IFoo : IUnknown { HR
我有一个 C# 客户端,它使用来自 native C++ COM 服务器 dll 的接口(interface)。 DLL 实现了 4 个接口(interface)。这4个接口(interface)由D
我有一个 IDL 文件,它定义了几个接口(interface),后面跟着一个组件类。我可以让这个类导入这个类中没有定义的接口(interface)吗? 最佳答案 是的。您需要使用import 指令加载
具有指向由某些具体组件类对象实现的 COM 接口(interface)的指针是否有可能获得实现此接口(interface) (CLSID) 的底层对象的 GUID? 更新 1 更一般地说,我有一个像
我正在开发一个 C++ COM 库以在 VB6 应用程序中使用它。 .IDL 文件定义了一些接口(interface)和一个类库,其中包含一些实现这些接口(interface)的组件类: [
我是一名优秀的程序员,十分优秀!