programing

C에서 C# 호출

topblog 2023. 10. 30. 20:26
반응형

C에서 C# 호출

C 모듈에서 C# 모듈을 호출하는 작업을 한 사람이 있습니까?인터넷으로 검색해 보았지만 좋은 예시를 찾지 못했습니다.비록 많은 사이트들이 COM interop을 사용하는 것과 같은 것을 말하고 있지만, 그것을 설명하는 적절한 예나 기사를 찾을 수 없었습니다.

누군가 이 일을 도와준다면 정말 좋을 것 같습니다.

고마워, 스베랩

C 또는 C++에서 관리 코드를 호출하려면 COM interop만이 아닙니다.다음과 같은 덜 알려진 방법도 있습니다(MSDN FAQ에서 가져온).

a는 어떻게 부르죠?네이티브 Visual C++의 NET 어셈블리?

전화하는 방법은 기본적으로 네 가지가 있습니다.네이티브 VC++ 코드의 NET 어셈블리:

  1. CLR Hosting API: 네이티브 VC++ 모듈이 CLR Hosting API를 Hosting CLR로 호출하고 로드 후 호출합니다.NET 어셈블리(샘플 코드: CppHostCLR).

  2. COM Interop:만약에.NET 어셈블리는 COM 구성 요소로 노출될 수 있으며, 기본 VC++ 모듈은 에 호출할 수 있습니다.NET 어셈블리 ~.NET – COM interop(샘플 코드: CppCOM Client).

  3. 역방향 PIN 호출:관리 코드는 네이티브 코드가 다시 호출할 수 있는 위임자(샘플 코드: CSPInvokeDll)를 전달하여 네이티브 코드를 호출합니다.

  4. C++/CLI: 네이티브 VC++ 코드가 포함된 모듈이 CLR을 활성화하도록 허용된 경우 네이티브 VC++ 코드가 호출할 수 있습니다.NET 어셈블리 직접(샘플 코드:C++/CLI를 사용하여 C# 라이브러리를 네이티브 C 또는 C++에서 사용)

여기 해결책이 있습니다.이 솔루션을 사용하면 [DllExport] 특성(P/Invoke DllImport와는 반대)으로 함수를 장식하여 C에서 C# 함수를 호출할 수 있습니다.

https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

C#코드

class Test
{
     [DllExport("add", CallingConvention = CallingConvention.StdCall)]
     public static int Add(int left, int right)
     {
         return left + right;
     } 
}

C코드

 int main()
 {
      int z = add(5,10);
      printf("The solution is found!!! Z is %i",z);
      return 0;
 }

@iceflow19는 다음과 같이 언급했습니다.

링크의 작성자는 컴파일 중에 추가된 단계로 CLRL 전처리기를 제공합니다.어셈블리는 창에서 동일한 DLL(이진 컨테이너 형식)을 사용하므로 수동으로 를 추가합니다.IL의 순 함수가 vtable(dll의 내보내기 목록)로 오프셋됩니다. Windows는 C에서 호출할 때 CLR을 호출하여 해당 코드를 실행할 수 있을 정도로 똑똑합니다.하지만 오버헤드가 있습니다.광고되지 않은 기능입니다.C++/CLI의 혼합 관리 라이브러리는 이렇게 작동합니다.사용하시려면 Nuget을 통해 추가하시면 됩니다.MSBuild 프로젝트 파일에 추가된 추가 대상은 IL preprocessing 단계를 제공합니다.

C# 모듈을 COM으로 노출할 수 있습니다.

http://www.codeproject.com/KB/cs/ManagedCOM.aspx

관리되지 않는 C++에서 관리 코드(c#)를 호출하는 최상의 방법

http://www.codeproject.com/KB/COM/cominterop.aspx

Core를 사용하여 C# 코드에서 네이티브 라이브러리를 구축하는 옵션도 있습니다.RT하고 C에서 전화해요.여기 가 있습니다.

편집: CoreRT가 runtime lab 기능 Native로 이동했습니다.AOT. 링크 업데이트.

언급URL : https://stackoverflow.com/questions/4428267/calling-c-sharp-from-c

반응형