visual studio 2010 -如何重新导出CLR c++静态库

visual studio 2010 - How to reexport CLR c++ static library

本文关键字:CLR c++ 静态 何重新 studio 2010 visual      更新时间:2023-10-16

我有这些文件:

  • foo.dll
  • foo.lib
  • foo.exp
  • bar.il
  • bar.netmodule

"foo"在其导出目录中定义函数。

我也有一个Visual Studio 2010 c++项目,它将创建一个托管的"bar.dll"

我想"bar"静态链接到"foo"和重新导出从"foo"的所有函数。

最后,我希望bar导出foo中的函数和foo中定义的一些附加代码。

使用下面的代码不起作用,因为它引用了foo而不是将barfoo合并。

#pragma comment(linker, "/include:_foomethod@12")

我该怎么做?

参见:http://msdn.microsoft.com/en-us/library/f0z8kac4(v=VS.100).aspx

CFF浏览器验证导出目录:http://www.ntcore.com/exsuite.php

参见:http://msdn.microsoft.com/en-us/library/k669k83h.aspx

参见:http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx

call "C:Program FilesMicrosoft Visual Studio 10.0VCbinlink.exe" /DLL /LTCG /CLRIMAGETYPE:IJW   /ASSEMBLYMODULE:bar.netmodule   /OUT:bar.dll foo.lib bar.netmodule
foo.netmodule : fatal error LNK1302: only support linking safe .netmodules; unable to link ijw/native .netmodule

我明白了。

相反,这些文件是必需的:

  • foo。obj
  • bar.cpp
  • bar.obj

c++/CLI编译器cl.exe将能够编译bar,参考非托管和托管世界。

在后面的步骤中,将使用链接器将obj文件合并到一个混合模式程序集中,其中包含:

  • 来自foo的非托管导出
  • 栏的非托管导出
  • 从栏
  • 管理IL类型

链接obj文件的命令:

call "C:Program FilesMicrosoft Visual Studio 10.0VCbinlink.exe" /DLL /LTCG /CLRIMAGETYPE:IJW     /OUT:bar.dll *.obj

额外:您可以根据自己的喜好将导出的函数名重命名为cpp后的obj编译目录:)