2011-05-13 3 views
13

C#으로 작성된 .NET 어셈블리가 있는데 어셈블리에서 네이티브 C 함수를 내보내려고합니다..net DLL에서 네이티브 C 함수 내보내기?

'플러그인'폴더에있는 DLL에서 'LoadLibrary()'를 수행 할 응용 프로그램이 있습니다. DLL을로드 한 후 응용 프로그램은 'Register'라는 함수를 찾는 'GetProcAddress'를 수행합니다. 응용 프로그램은이 함수가 C 호출 규칙을 따를 것으로 기대합니다.

.net 어셈블리에서 'Register'라는 함수를 어떻게 내 보내면이 응용 프로그램의 플러그인 시스템에 성공적으로 연결할 수 있습니까?

덕분에, 앤드류

답변

9

this tool을 사용하십시오.

+0

가 작동 할 것 같습니다. 감사합니다! – Andrew

+0

이 도구는 무엇입니까? 내 네트워크에서 링크가 차단되었습니다. – CathalMF

+1

@CathalMF : https://www.nuget.org/packages/UnmanagedExports – SLaks

0

은 당신이 원하는 것은 Reverse P/Invoke입니다. C# dll에 실제로 C 함수를 포함 할 수는 없습니다. 실제로 C로 구현 된 함수를 의미하지만, 링크 된 페이지에 제공된 자습서를 따르면 관리되지 않는 C/C++ 코드에서 호출 할 수있는 DLL 내보내기를 만들 수 있습니다. .

+0

그 중 아무 것도 그의 요구 사항을 해결하지 못했습니다. 그는 COM을 사용하지 않습니다. – SLaks

1

.Net 라이브러리를 Managed C++로 작성하면 "네이티브"메소드/함수를 내보낼 수 있습니다.

+0

그게 가능하지만 혼합 모드 C++ SUCKS! – dmihailescu

1

슬프게도 Microsoft는이 기능을 지원하지 않으므로 빌드 후 해당 메서드가 노출되도록 msil을 변경해야합니다. 을 codeproject 또는 here, 에 합당한 해결책을 제시 한 사람이있을 수 있지만 이후 빌드 단계가 필요하며 그 이후에는 스스로 해결할 수 있습니다. 이 해킹이 .net 4.0 이상에서 작동하는지 모르겠습니다. CLR 지원이 이미 있기 때문에 Microsoft가 C#에서이 간단한 기능을 지원하고 지원할 수 있기를 바랍니다.