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

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

  • 组件 > 导入组件 > 它生成一个新的包装单元...然后呢?
  • 使用绝对路径导入DLL(为什么?它在系统中注册)
    #import "C:\Path\to\the\LIB1.dll" rename_namespace ("LIB1")
    

    ... 然后什么?
  • 使用 CoCreateInstance ...具体如何?没有导入/包含?

  • 在 Visual C# 中,我只是添加一个引用和一个 using 来处理它!

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

    最佳答案

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

  • 组件 > 导入组件... > 导入类型库 > 选择库
  • Unit Dir Name = 并取消选中“Generate Component Wrappers”
  • "将单元添加到 MyProject.cbproj 项目"> 完成
  • 在客户端类 > 文件 > 使用单元... > 选择创建的单元
  • 客户端类中的
  • 编写此代码以使用 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 公开,我想说明它。

    Introduction to COM - What It Is and How to Use It. 对我帮助很大。

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

    关于c++ - 在 C++ Builder 中使用 COM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13456628/

    10-17 02:03