【问题标题】:Using COM dll with unmanaged c++将 COM dll 与非托管 c++ 一起使用
【发布时间】:2012-02-29 05:45:06
【问题描述】:

我对 Windows 编程还是有点陌生​​,有时我会发现文档和教程让我感到困惑,有时甚至是矛盾的,但我希望我能理解并纠正我误解的任何点。 我正在使用一个 API,其中包含的文档很差。它由许多 DLL 组成,他们设想添加这些 DLL 作为对 VB 项目的引用(大多数用户是生物学家/化学家,对其他语言不太熟悉,因此他们推荐 VB)。起初我以为它们是 .NET dll,但它们无法使用 regasm 注册,并且无法使用它生成 tlb,但可以使用 regsvr32 注册,所以我想这意味着它们是 COM dll……如果我错了,请纠正我.

我的理解是,由于这会暴露 COM 对象,因此我应该能够将其与 .NET 语言和未管理的 c++ 一起使用。我在 C# 中使用过它,但我也想在 unmanged c++ 中使用它。我看过这样的教程: http://cppkid.wordpress.com/2009/01/...nmanaged-code/ 导入类型库但我没有这个,它没有随 API 提供。但是使用 OLE 查看器我可以看到它们可用(嵌入在 dll 中?)。我想知道是否有人知道我如何从这个到实际使用 c++ 中的 dll。

干杯,感谢您的帮助。

【问题讨论】:

    标签: c++ visual-c++ com


    【解决方案1】:

    我想最简单的方法是使用#import 指令:

    #import <mygreatlib.dll>

    还有其他方法,例如使用 #import 和 dll 的入口点类的 ProgID,或使用 MFC type library wizard

    【讨论】:

    • 谢谢。我会试试的。我不确定如何在执行此操作后调用 API 中的方法。希望我能在某个地方找到关于它的教程。
    • @Shashwat 除了codeproject的链接,你发的其他网址都不适用于这个场景
    • 当我尝试导入 dll 时,我收到了一些形式的错误:c:\testuserida\debug\exploredataobjects.tlh(109):错误 C3149:'ExploreDataObjects::_DataEvents':无法使用这种类型在这里没有顶级'^' 这是否意味着它实际上是一个.NET dll?我现在很困惑...
    • 也许您正在将您的 c++ 项目编译为 clr/pure?尝试在项目属性中删除 clr 支持。获得 *.tlh 文件的事实意味着您实际上正在处理 COM dll。
    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多