代码之家  ›  专栏  ›  技术社区  ›  coanor

在C/C++中,如何在MVStudio中链接GC/C++编译的动态链接库?

gcc
  •  0
  • coanor  · 技术社区  · 16 年前

    MS VS2005是否识别在windows上使用mingw编译的dll?我还有什么需要做的吗?例如,在include文件中添加声明导出api的内容?

    条件是,与VS2005一样,如果要导出某些API,可以显示一个*.def文件来告诉nmake要导出哪个API,然后可以创建一个(或一些)*.h文件来声明有关这些API的某些内容(添加一些) 调用约定 类似的前缀作为一个调用协议)和一些数据类型定义。但是使用GCC/G++,你不需要做这些无聊的事情,只要使用[ar],你就可以得到这些api,所以我的*.h文件不添加调用协议和*.def,就像普通函数声明一样。生成*.dll后,将*.h文件和[mv]生成的*.dll添加到VS2005项目目录中,然后在项目设置中设置链接*.dll。这些步骤产生了我的问题吗?

    顺便说一句,我发现并测试了VC6编译的dll可以链接到WindowsXP中的mingw,但反过来不行。

    不管怎样,原谅我的英语不好,谢谢你的关心。

    1 回复  |  直到 16 年前
        1
  •  1
  •   harper    16 年前

    VS2005不能识别任何DLL来编译任何东西,我怀疑mingw能识别。

    当应用程序使用DLL时,需要告诉VS2005 DLL提供了哪些函数。

    入口点在DLL的导出目录中定义。在编译DLL时,可以使用DEF文件定义导出目录的内容。这些导出也可以使用 #pragma __declspec(dllexport)

    导出函数的签名必须由函数原型提供,通常在*.h文件中。

    动态绑定

    您可以省略导入库并使用 LoadLibrayy 在适当的时候。您需要自己定义指向DLL入口点的指针,并且在调用之前必须初始化这些指针 GetProcAddress 实际功能。