2013-12-10 3 views
4

관리되지 않는 C로 작성해야하는 맞춤 플러그인을 지원하는 선반 제품이 있습니다. 관리되는 Dll을 지원하지 않으며 선호 언어는 C#입니다.관리되지 않는 C DLL에서 Managed C++ Dll을로드 하시겠습니까?

선반 제품으로 다시 전달해야하는 정보는 매우 기본적이며 문자열로 보관할 수 있습니다.

그래서 나는 다음을 수행 할 수있는 생각 :

  1. 는 C# DLL에 내 코드의 대부분을 작성합니다.
  2. 내 C# 메서드를 호출하는 C++ Managed Code에 래퍼를 작성합니다.
  3. Managed C++ Dll을 호출하는 관리되지 않는 C에서 기본 Dll을 작성합니다.

이제 Managed C++과 C# Dll 간의 통신이 쉽습니다.

하지만 관리되지 않는 C DLL에서 관리되는 C++ 함수를 호출하는 방법을 알 수 없습니다. 몇 가지 간단한 샘플 코드에 도움이 될 것입니다.

감사

편집 : 은 내가 아래 알렉스의 대답이 어떻게했는지에 코드 프로젝트 문서를 만들었습니다. http://www.codeproject.com/Tips/695387/Calling-Csharp-NET-methods-from-unmanaged-code

답변

5

거의 맞았습니다. 동일한 C++/CLI DLL에 숫자 2와 3을 넣으면됩니다. .NET 클래스를 사용하고 C++/CLI 프로젝트에서 C 함수를 내보낼 수 있습니다.

extern "C" __declspec(dllexport) void __stdcall PureExportC(
                const wchar_t* param 
) 
{ 
    CSharpAssemblyNamespace::CSharpWorker worker; 
    worker.DoWork(gcnew String(param)); 
} 
+0

영웅. 훌륭해. – CathalMF

+0

이것의 단지 빠른 ontop. C# Dll은 이제 원래 응용 프로그램의 현재 디렉토리에 있어야합니다. C++ Dll의 현재 디렉토리가 아니라. 어떤 생각을 어떻게 바꿀 수 있습니까? – CathalMF

+0

@CathalMF 당신은 C#과 C++/CLI 어셈블리를 함께 링크 할 수 있으며 단 하나의 DLL 만 얻을 수 있습니다. 나는 그것을 시도하지 않은,하지만 [이 답변] (http://stackoverflow.com/questions/2609056/how-to-link-c-sharp-and-c-assemblies-into-a-single-executable) 또는 [ILMerge] (http://www.microsoft.com/en-us/download/details.aspx?id=17630)가 작동 할 수 있습니다. – Alex

1

나는 이것을 할 수 없다고 생각합니다. 그러나 제품에 대해 C++ (관리되지 않는) 플러그인을 작성할 수 있습니다. 그런 다음 C#으로 관리되는 모든 응용 프로그램을 작성하고 플러그 인에서 시작하여 명명 된 파이프 또는 소켓을 사용하여 해당 응용 프로그램과 통신합니다.

관련 문제