C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75515] Re:안녕하세요 C# dll 파일을 c++에서 사용
빌더(TWx) [builder] 3536 읽음    2019-08-12 15:52
gksqjs94 님이 쓰신 글 :
: 안녕하세요. 제목그대로 Visual studio C#에서만든 dll을 c++에서 사용할려고합니다.
: 게시글을 검색해보니까 나와있는데로
:
: implib Test.lib Test.dll
: implib _a Test.lib Test.dll
:
: 이렇게 2개를 만들어주고 빌더에
:
: #pragma comment (lib, "Test.lib")
: #pragma comment (lib, "Test2.lib")
:
: 선언해주고 lib패스까지 다 설정했어요. 그리고
:
: 상단에 extern "C" __declspec(dllexport) void __stdcall AES_Encrypt(String A,String B,String C); // AES_Encrypt 는 암호화함수이름이에요.
:
: void __fastcall TForm2::Button1Click(TObject *Sender)
: {
:         String param = L"asd";
:     AES_Encrypt(param ,param ,param );
: }
: 이렇게 사용하는거 아닌가요  ?
: 이렇게하면
: [ilink32 Error] Error: Unresolved external 'AES_Encrypt' referenced from D:\TEST\WIN32\DEBUG\UNIT2.OBJ
: [ilink32 Error] Error: Unable to perform link
:
: 이렇게 2개의 에러가 뜨네요..
: 알려주시면 감사하겠습니다.



답변:


C# 모듈은 Managed 코드로 구성된 모듈이므로... PE Export 섹션에 dllexport 엔트리를 갖고 있을리가 없죠.
native C++ 코드에서 Managed 모듈을 사용하는 방법은 몇가지가 가능한데...


1.

처음에 C# 모듈을 만들 때... COM 모듈 구조로 만들어서 사용. (일반 모듈과 COM모듈은 C# 코드구조가 다름)
레지스트리에 등록 한 후, C++에선 Type Library를 Import해서 사용.


2.

해당 API를 static 타입으로 선언한 후...
C# 컴파일러가 생성한 MSIL 중간코드를 리컨스트럭션해서 해당 API를
PE 파일의 Export 섹션에 엔트리를 생성하도록 변형해서 사용. 관련 툴이 있음.


3.

C++ native 코드에서 CLR(Common language runtime)을 Host 하는 코드를 만들어서
C++ native 코드에서 .net 코드를 직접 호출해서 사용.


4.

.net 모듈을 C#으로 만들지 말고, VC++/CLI 컴파일러 이용해서
하나의 DLL 모듈이 native 코드와 managed 코드 둘 다.. 갖고있는 형태가 되도록
바이너리를 생성해서 native C++에서 사용. (하이브리드 형태의 DLL)

VC++/CLI 컴파일러가 managed 코드와 native 코드간의 마샬링 처리해주는 코드를
DLL 바이너리 안에 자동으로 생성해 주므로.. 레지스트리에 따로 등록할 필요도 없고
투명하게 사용할 수 있음. (추천하는 방법 임)





+ -

관련 글 리스트
75514 안녕하세요 C# dll 파일을 c++에서 사용 gksqjs94 2283 2019/08/12
75515     Re:안녕하세요 C# dll 파일을 c++에서 사용 빌더(TWx) 3536 2019/08/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.