2009-06-26 412 views
3

我正在尝试提供一个提供VC++示例的库;不过,我为我的所有项目使用gcc/g ++。GCC/G ++的VC++ #import指令

那么,VC++示例访问图书馆是它使用#进口指令,传递库DLL的位置的方式,那么它就是一个使用命名空间库名称,然后它能够​​创建一些未定义的类型(我假定它是在DLL中定义的),并用__uuidof创建一个新的实例。从此,为了调用其中一个库函数,该示例仅执行createdObj-> foo()就是这样。

呃... g ++的#import与VC++的导入不同(请参阅here),所以这个例子不适用于我。

有什么办法可以将它转换为g ++下编译的,还是我SOL直到库开发人员为我提供了一个静态库我可以试试?

回答

2

如果您使用的是cygwin,那么这个页面:http://www.cygwin.com/cygwin-ug-net/dll.html将为您提供所需的全部帮助。

如果您使用的是mingw,您可以完成同样的任务,但您可能不会拥有grep和sed,因此您必须使用其他一些方法来执行筛选以获得您的.def文件。

+0

谢谢;不幸的是,这不起作用,因为他们在该网站上发出的命令对我而言“没有符号”。那么,让我想知道VC++如何能够从中提取符号?也许是因为库的函数是stdcall函数,而不是cdecl函数? – beepboopbopbop 2009-06-26 19:58:34

+0

+1 thx链接... – 2011-02-10 16:06:45

1

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

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

2

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

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

问候。