2011-04-05 2 views
2

나는이 파일이 있습니다재수출하는 방법 CLR C++ 정적 라이브러리

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

"foo"는 내보내기 디렉토리에서 함수를 정의합니다.

는 또한 비주얼 스튜디오 정적 모든 기능이 "foo는"에서 "foo는"과 재수출에 "줄"을 연결하는 내가 원하는 관리 "bar.dll"

을 만듭니다 2010 C++ 프로젝트가 . 결국

나는 foo는foo는에서 정의 된 일부 추가 코드에서 함수를 내보낼 를 원한다. 이 foo는을 병합하는 대신 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를 bar에 병합 할 수 있는지 잘 모르겠습니다. 내 보낸 심볼을 bar에서 foo로 전달할 수 있습니다. kernel32는 ntdll의 일부 기능을 수행합니다. 내보내기 라이브러리를 확인하고 싶다면 VS 명령 프롬프트에서 [depends] (http://www.dependencywalker.com) 또는'dumpbin/exports bar.dll '을 사용할 수도 있습니다. – Rup

답변

0

.

는 대신 해당 파일이 필요합니다 :

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

는 C++/CLI 컴파일러 CL.EXE은 수있을 것입니다 컴파일 바, 비 관리 및 관리 세계 참조.이후 단계 링커

함유 한 혼합 모드 어셈블리로 OBJ 파일을 병합하는 데 사용한다 : 바 로부터 foo를 행

  • 단독 수출 바에서
  • 단독 수출
  • 관리 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로 컴파일 한 후 내 보낸 함수 이름의 이름을 원하는대로 바꿀 수 있습니다.