저는 C#으로 DLL을 만들었습니다. 이제 R Environment을 사용하여 해당 DLL의 함수를 호출하고 싶습니다. R 환경에서는 관리되지 않는 C/C++ DLL을 호출 할 수 있지만 .NET DLL에는 호출 할 수 없습니다. 그래서 내 질문은, C에서 C# DLL 함수를 호출 할 수 있습니다/C++ DLL에서? 그렇다면이 작업을 수행하는 방법에 대한 정보에 대한 링크가 있습니까?C DLL에서 C# DLL을 호출 할 수 있습니까?
답변
가장 간단한 방법은 COM 개체로 C# DLL의 C# 클래스 중 하나를 노출 한 다음 C/C++ DLL에서 해당 인스턴스를 만드는 것입니다. 이것이 허용 가능한 옵션이 아니면 혼합 모드 C++ DLL (관리 코드와 비 관리 코드 모두 포함)를 만들어야합니다. C/C++ DLL은 혼합 모드 DLL에서 내 보낸 함수를 호출 할 수 있습니다.이 DLL은 호출을 C# 클래스로 전달할 수 있습니다.
이 문서가 당신을 도울 수 있습니다
업데이트 :는 mergebin라는 도구가 있다는 함께 제공 .NET SQLite wrapper 당신이 혼합 모드 네이티브/관리 DLL을 만드는 데 사용할 수 있습니다. 에서 소스 코드를 잡아 :
SQLite for ADO.NET 2.0 (SourceForge)
당신은 bin\tools
폴더에 EXE를 찾을 수 있습니다.
Kev
링크 Kev에 감사드립니다 - 재미있는 독서. – Guy
실제로는 꽤 쉽습니다. NuGet을 사용하여 .Net 프로젝트에 "UnmanagedExports"패키지를 추가하기 만하면됩니다. 자세한 내용은 https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports을 참조하십시오.
그런 다음 COM 계층을 수행하지 않고 직접 내보낼 수 있습니다. 다음은 샘플 C# 코드입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using RGiesecke.DllExport;
class Test
{
[DllExport("add", CallingConvention = CallingConvention.Cdecl)]
public static int TestExport(int left, int right)
{
return left + right;
}
}
R은 일반 C DLL과 마찬가지로 TextExport를로드 할 수 있어야합니다.
- 1. C# .net dll에서 vb.net dll을 호출 할 수 있습니까?
- 2. 브라우저 응용 프로그램에서 silverlight로 C++ dll을 호출 할 수 있습니까?
- 3. DLL을 통해 C++ 컴파일러 인라인 메서드를 호출 할 수 있습니까?
- 4. 관리되지 않는 C++에서 관리되는 DLL을 호출 할 수 있습니까?
- 5. 터보 C/C++ 컴파일러를 사용하여 DLL을 생성 할 수 있습니까?
- 6. 어떻게하면 DLL을 통해 호출 할 수 있습니까?
- 7. DLL에서 호출 할 수있는 C#으로 API를 생성하십시오.
- 8. C# dll을 사용하여 C++ DLL을 호출해야합니까?
- 9. 어떻게 C# DLL을 Win32 C++ 프로젝트에서 사용할 수 있습니까?
- 10. C# 2.0 dll에서 C# 4.0 Dll을 사용하는 방법?
- 11. 다른 DLL에서 DLL 호출
- 12. DLL이 .NET DLL을 호출 할 수 있습니까?
- 13. C#에서 C++ DLL을 호출 할 때 C# 및 C++ 런타임 오류가 발생했습니다.
- 14. C++ DLL에서 WMI를 사용할 수 있습니다.
- 15. VB.net 코드에서 C DLL을 호출 할 수 있습니다.
- 16. DLL에서 C# 프로젝트를 빌드
- 17. C# DLL에서 C# DLL의 C# DLL을 C# 프로그램으로 반환 -> RtlFreeHeap에 지정된 잘못된 주소
- 18. php에서 C 코드를 호출 할 수 있습니까
- 19. MFC 확장 DLL에서 C++/CLI
- 20. C#에서 win32 DLL을 사용할 수 있습니까?
- 21. C 함수에서 Objective-C 메서드를 호출 할 수 있습니까?
- 22. C#에서 C++ 코드를 호출 할 수 있습니까?
- 23. C#에서 C++ 함수를 어떻게 호출 할 수 있습니까?
- 24. 라이선스가있는 dll에서 dll을 병합
- 25. LabView 6.1 VI에서 .NET DLL을 어떻게 호출 할 수 있습니까?
- 26. 하나의 dll에서 관리되는 C++/MFC가 혼합 될 수 있습니까?
- 27. 종속성이없는 DLL을 C++로 빌드 할 수 있습니까?
- 28. C#에서 C++ DLL을 호출 할 때 std :: exception 오류 설명을 얻는 방법
- 29. C# 프로젝트가 C++ .dll을 찾을 수 없습니까?
- 30. C# DLL을 호출 문자열 인코딩 문제
그 혼합 모드 C++ DLL은 트릭을하는 것처럼 들리지만 VS2008을 사용하는 혼합 모드 DLL 프로젝트를 만들 때 사용할 수있는 템플릿을 살펴 보았지만 하나도 보지 못했습니다. 혼합 모드 DLL을 시작하는 방법에 대해 어떻게 생각하십니까? – Guy
새 C++ 클래스 라이브러리를 만드는 경우 C++ .NET DLL 프로젝트가 만들어집니다. "공용 언어 런타임 지원"설정이 "공용 언어 런타임 지원 (/ clr)"으로 설정되어있는 한 프로젝트에서 관리 코드와 관리되지 않는 코드를 자유롭게 사용할 수 있습니다. – Andy