【问题标题】:Use COM in C++ Builder在 C++ Builder 中使用 COM
【发布时间】:2012-11-19 15:14:35
【问题描述】:

我是 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

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

【问题讨论】:

  • 如果 COM 对象已正确注册,您只需将新组件拖放到您的窗口中并开始调用方法。
  • 1.然后,通过包含 .HPP 文件将新的包装单元添加到项目中,并使用 .hpp 文件中以 Co 开头的类之一在代码中创建 COM 对象的实例。
  • @GregorBrandt & KenWhite 您能否将完整的解决方案发布为答案?我做了你说的一些事情,但我不知道一步一步的整个解决方案......谢谢!

标签: c++ dll com c++builder c++builder-xe2


【解决方案1】:

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

  • 组件 > 导入组件... > 导入类型库 > 选择库
  • 单元目录名称 = 并取消选中“生成组件包装器”
  • “将单元添加到 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.* 单位。有什么办法可以避免吗?

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2012-07-25
    • 1970-01-01
    • 2014-08-20
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多