2011-04-05 81 views
2

我有这些文件:如何再出口CLR C++静态库

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

“foo”在其导出目录中定义了函数。

我也有一个Visual Studio 2010中C++项目,该项目将建立一个管理的“bar.dll”

我想“栏中的”静态链接到“foo”和再出口的所有功能,从“富” 。

最后我想酒吧FOOFOO定义了一些额外的代码导出功能。

使用下面的代码,因为它引用,而不是合并酒吧FOO不起作用。

#pragma comment(linker, "/include:[email protected]") 

我该怎么做?

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

CFF Explorer以验证导出目录: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 Files\Microsoft Visual Studio 10.0\VC\bin\link.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 
+0

我不知道它可以将foo合并到栏中。尽管如此,可以将栏中的导出符号转发回foo。就像kernel32为ntdll中的某些函数所做的那样。如果你只想检查导出库,你也可以在VS命令提示符下使用[depends](http://www.dependencywalker.com)或'dumpbin/exports bar.dll'。 – Rup 2011-04-05 13:36:24

回答

0

我已经想通了。

而是这些文件将被要求:

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

的C++/CLI编译器cl.exe时就能编译栏,引用未管理和管理的世界。

在稍后的步骤接头将用于OBJ文件合并成含有一个混合模式组件:

  • 从富非托管出口由棒
  • 非托管出口
  • 管理IL类型由棒

用于链接obj文件的命令:

call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe" /DLL /LTCG /CLRIMAGETYPE:IJW  /OUT:bar.dll *.obj 

额外:一个可以重命名导出的函数名后cpp obj汇编在导出目录中,以他们喜欢:)