【问题标题】:VC++ #import directive for GCC/G++用于 GCC/G++ 的 VC++ #import 指令
【发布时间】:2009-06-26 19:31:41
【问题描述】:

我正在尝试测试一个提供 VC++ 示例的库;但是,我的所有项目都使用 gcc/g++。

嗯,VC++ 示例访问库的方式是它使用 #import 指令,传递库 DLL 的位置,然后执行 using namespace LIBRARYNAME,然后它能够​​创建一些未定义的类型(我假设它是在 DLL 中定义的)并使用 __uuidof 创建它的新实例。从那时起,要调用其中一个库函数,该示例只需执行 createdObj->foo() 即可。

嗯...g++ 的 #import 与 VC++ 的 import 不同(参见 here),所以这个例子对我不起作用。

有什么方法可以将其转换为在 g++ 下编译,还是在库开发人员为我提供可以试用的静态库之前我是 SOL?

【问题讨论】:

    标签: visual-c++ gcc import g++ uuid


    【解决方案1】:

    如果您使用的是 cygwin,则此页面:http://www.cygwin.com/cygwin-ug-net/dll.html 将为您提供所需的所有帮助。

    如果您使用 mingw,您可以完成同样的事情,但您可能没有 grep 和 sed,因此您必须使用其他一些方法进行过滤以获取您的 .def 文件。

    【讨论】:

    • 谢谢;不幸的是,这不起作用,因为他们在该网站上给出的命令为我返回“无符号”。那么,让我想知道 VC++ 是如何从中提取符号的?也许是因为库的函数是 stdcall 函数,而不是 cdecl 函数?
    【解决方案2】:

    如果您在 VC++ 中使用 #import,则意味着 DLL 不是常规 DLL,而是 COM DLL。

    由于 gcc 不支持 COM,您只需要等待库作者编写非 COM 版本即可。

    【讨论】:

    • COM 有据可查。您可以使用 C 编译器与它进行互操作
    • 好吧,我并不是说这是不可能的,但是您必须手动创建接口以匹配 VC++ vtable 布局。你最好为这个项目找到一个非 COM 库或切换到 VC++ Express。
    【解决方案3】:

    也许它可以帮助您使用 OLEViewer 和“查看类型信息”来提取 IDL 的基础知识。或者,也许您可​​以只使用 VC++ 生成的 .tlh 和 .tli 文件并将它们导入您的 G++ 项目。

    我想这个答案太晚了,但现在我自己也遇到了类似的问题,所以我才进入这个线程。希望您能及时找到解决方案。

    问候。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多