C에서 C# 호출
C 모듈에서 C# 모듈을 호출하는 작업을 한 사람이 있습니까?인터넷으로 검색해 보았지만 좋은 예시를 찾지 못했습니다.비록 많은 사이트들이 COM interop을 사용하는 것과 같은 것을 말하고 있지만, 그것을 설명하는 적절한 예나 기사를 찾을 수 없었습니다.
누군가 이 일을 도와준다면 정말 좋을 것 같습니다.
고마워, 스베랩
C 또는 C++에서 관리 코드를 호출하려면 COM interop만이 아닙니다.다음과 같은 덜 알려진 방법도 있습니다(MSDN FAQ에서 가져온).
a는 어떻게 부르죠?네이티브 Visual C++의 NET 어셈블리?
전화하는 방법은 기본적으로 네 가지가 있습니다.네이티브 VC++ 코드의 NET 어셈블리:
CLR Hosting API: 네이티브 VC++ 모듈이 CLR Hosting API를 Hosting CLR로 호출하고 로드 후 호출합니다.NET 어셈블리(샘플 코드: CppHostCLR).
COM Interop:만약에.NET 어셈블리는 COM 구성 요소로 노출될 수 있으며, 기본 VC++ 모듈은 에 호출할 수 있습니다.NET 어셈블리 ~.NET – COM interop(샘플 코드: CppCOM Client).
역방향 PIN 호출:관리 코드는 네이티브 코드가 다시 호출할 수 있는 위임자(샘플 코드: CSPInvokeDll)를 전달하여 네이티브 코드를 호출합니다.
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
'programing' 카테고리의 다른 글
C++와 Java 간의 Oracle 트랜잭션 전파 (0) | 2023.10.30 |
---|---|
jQuery Draggable은 페이지를 스크롤한 후 도우미를 잘못된 위치에 표시합니다. (0) | 2023.10.30 |
이진 모드에서 stdout을 쓰기 위한 가장 간단한 방법은 무엇입니까? (0) | 2023.10.25 |
MS 파워셸 스크립트로 빌드 - 빌드가 성공했는지 어떻게 알 수 있습니까? (0) | 2023.10.25 |
자바스크립트에서 여러 조건을 가진 "querySelectorAll()" (0) | 2023.10.25 |