에서 C++ 클래스 DLL을 사용하여 나는 그것의 인터페이스로 관리되지 않는 C 단지 하나의 클래스 수출 ++ DLL (안 COM을 ... 그것은 그냥 간단한 C++ 클래스)를 가지고있다. C#에서이 클래스를 사용하려고하지만 C#으로 가져올 수 없다는 말을 듣고 있습니다.C# 응용 프로그램
내 C# 응용 프로그램에서이 클래스를 사용하는 올바른 방법은 무엇입니까?
에서 C++ 클래스 DLL을 사용하여 나는 그것의 인터페이스로 관리되지 않는 C 단지 하나의 클래스 수출 ++ DLL (안 COM을 ... 그것은 그냥 간단한 C++ 클래스)를 가지고있다. C#에서이 클래스를 사용하려고하지만 C#으로 가져올 수 없다는 말을 듣고 있습니다.C# 응용 프로그램
내 C# 응용 프로그램에서이 클래스를 사용하는 올바른 방법은 무엇입니까?
간단한 방법으로 가정 클래스 푸 :
당신은 일반적으로 충분합니다 당신의 C# 코드가 FooWrapper 프로젝트/DLL에 의존하고 관리되지 않는 LL이 제대로 그 수행하는 방법, 그것으로 배치 관리되지 않는 DLL에 있지만 같은 디렉토리에 달려 있는지 확인하기 .
기능이 클래스의 인스턴스에 의존하지 않는 경우에도 간단 P/
OP가 문자열이나 예외를 다루는 경우 (5) 선택적으로 호출하지 않습니다. –
C++ DLL 레이어를 없애고 DLL 및 래퍼 모두에 C++/CLI 프로젝트를 만들려면 어떻게해야합니까? 더 구체적으로 말하자면, 현재의 C++ DLL은 여러 개의 정적 라이브러리를 멋진 인터페이스로 연결합니다. C++/CLI 프로젝트에서이 모든 작업을 수행 할 수 있습니까? – cjserio
예이 C++/CLI에서 모두 수행 할 수 있습니다. – ShuggyCoUk
당신은 관리/관리되지 않는 경계를 해소하기 위해 프록시 (GoF의 패턴) 중간 필요 호출합니다.
두 가지 옵션 :
더 많은 직접적인 될 것입니다 전, 그리고 후자는 두 단계 순수 C++이있다.
이 대답은 하나의 클래스 라이브러리에 대한 과잉 될 수도 있지만 꿀꺽 꿀꺽 다른 언어에서 사용하기에 "포장"C/C++ 클래스에 대한 좋은 솔루션입니다. 그것은 C#에서 잘 작동합니다.
http://www.swig.org/을 참조하십시오.
같이 DllImport는 당신의 최선의 방법이다. 약간의 데이터 유형 마사지가 있습니다. 특히 구조체를 전달하는 경우에는 특히 그렇지만 거의 모든 작업을 수행 할 수 있습니다.
경우에, 당신의 자신의 C 인터페이스를 제공하는 것이 더 쉽습니다. SWIG은 설치하기가 쉽지 않습니다. 나는 C + + 및 C + +/CLI를 사용하여 관리하고 그들은 괜찮습니다. 가장 쉬운 방법은 C 래퍼를 사용하는 것뿐이었고 (대부분 C 함수를 호출하는 방법이 있으므로 다른 언어로도 사용할 수 있습니다).
COM 클래스입니까? –
미안하지만 더 구체적이어야했습니다. 이것은 COM 클래스가 아닙니다. 그것은 단순한 오래된 C++ 클래스입니다. – cjserio