4

我是 COM 库的新手,我一直坚持在我的 C++ Builder (XE2) 应用程序中使用 COM DLL。DLL 已注册。哪些步骤允许我创建属于此类 DLL 的对象并调用它们的方法?我的意思是静态的。

我找不到教程,但我看到了不同的方法:

  1. 组件 > 导入组件 > 它产生一个新的包装单元......然后呢?
  2. 使用绝对路径导入 DLL(为什么?它已在系统中注册)

    #import "C:\Path\to\the\LIB1.dll" rename_namespace ("LIB1")
    

    ... 然后什么?

  3. 使用CoCreateInstance...究竟如何?没有导入/包含?

在 Visual C# 中,我只需添加一个引用和一个using!

我很困惑!任何帮助表示赞赏。

4

1 回答 1

1

我找到了一种方法(但告诉我是否有更好的方法):

  • 组件 > 导入组件... > 导入类型库 > 选择库
  • Unit Dir Name = 并取消选中“生成组件包装器”
  • “将单元添加到 MyProject.cbproj 项目”> 完成
  • 在客户端类 > File > Use Unit... > 选择创建的单元
  • 在客户端类中编写此代码以使用 COM DLL:

    CoInitialize(NULL); //Init COM library DLLs  
    
    ICompany *company;        
    
    HRESULT hr = CoCreateInstance ( CLSID_Company,  
                                    NULL,  
                                    CLSCTX_INPROC_SERVER,  
                                    IID_ICompany,  
                                    (void**) &company );  
    if (SUCCEEDED (hr)) {  
         //TODO here you can use your company object!
         //and finally release such resource
         company->Release();  
    }  
    
    CoUninitialize();
    

Company我想实例化的由 DLL 公开的原始类在哪里。

COM 简介 - 它是什么以及如何使用它。帮了我很多。

请注意,这需要创建 *_TLB.* 和 *_OCX.* 单位。有没有办法避免它?

于 2012-11-20T10:59:05.997 回答