2011-04-05 24 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彙編在導出目錄中,以他們喜歡:)