문제

고 싶을 내는 관리되지 않는 C++라이브러리에서 내 C#코드입니다.어떤 잠재적인 함정 및 예방 조치를 취할 필요가 있는?당신의 시간을 주셔서 감사 합니다.

도움이 되었습니까?

해결책

이 질문은 너무 광범위합니다.유일한 합리적인 답은 P/Invoke,하지만 그와 같은 종류의 말하기를 원하는 경우 프로그램를 위한 윈도우를 알아야 합 Win32API 를 사용합니다.

꽤 많은 전체성에 대한 P/Invoke(http://www.amazon.com/NET-COM-Complete-Interoperability-Guide/dp/067232170X),그리고 물론 전체 웹사이트되었습니다: http://www.pinvoke.net/.

다른 팁

거기에 몇 가지로 당신이 할 수 있으로 이동-한 업데이트할 수 있습니다 당신의 관리되지 않는 C++라이브러리를 managed C++확장 래퍼들고 있 C#활용 클래스에 직접.이것은 약간의 시간이 소요됩니다,하지만 그것은 다리를 기존 관리되지 않는 코드입니다.하지만 알고 있어야 managed C++확장은 때로는 조금 힘들을 탐색으로 자신의 구문은 유사한 관리되지 않는 C++,하지만 충분히 가까이 매우 숙련 된 눈을 볼 수 있는 차이점이 있습니다.

다른 경로를 당신의 umnanaged C++구현 COM 클래스고 있 C#활용을 통해 자동으로 생성된 interop 어셈블리입니다.이 방법은 쉽게 당신이 주위에 당신의 방법을 알고 COM 도 충분합니다.

이게 도움이 되었으면 좋겠습니다.

당신을 설명하는 P/Invoke.즉 당신의 C++라이브러리가 필요한 노출 자체를 통해 DLL 인터페이스와 인터페이스가 필요할 충분한 간단한 설명 P/호출을 통해 호출 속성이 있습니다.면 관리 코드가 호출되는 관리되지 않는 세계를 매개 변수가 있을 배열된,그래서 그것은 보인이 될 수 있다는 약간의 성능,하지만 당신은 몇 가지 테스트를 참조하는 경우 마샬링은 중요하거나지 않습니다.

을 시작하는 가장 쉬운 방법을 모두 충족되는지 확인 C++기능에 노출되는'C'스타일능합니다.는지 확인을 선언하는 기능으로 _stdcall.

extern"C"__declspec(dllexport)int_stdcall Foo(int a)

을 얻을 수 있는지 확인 오른쪽 정렬,특히 같은 것들을 점&wchar_t*.당신이 그것을 잘못 이해하는 경우,그것은 어려울 수 있습니다.

디버그 양쪽에서만 발생하지 않도록 주의하십시오.디버깅할 때는 혼합 native 및 관리,디버거를 얻을 수 있습니다.디버깅 1 측면에서 시간이 소요되는 시간이 크게 절약됩니다.

점점 더 많은 특정 필요로 하는 특정 질문입니다.

호출할 수도 있습으로 관리되지 않는을 통해 코드 P/Invoke.이 쉽게 될 수 있다면 코드의하지 않는 현재 사용하 COM.나는 당신이해야 할 몇 가지 특정 수출에 포인트를 당신의 코드를 사용하여"C"인 경우에는 이를 날고있다.

아마 가장 큰 것을 조심해야에 대한 내 경험에는의 부족을 결정적인 쓰레기 수집는 것을 의미의 소멸자 실행되지 않습니다면 생각 할 수도 있습니다 그들은 이해합니다.이것을 계속 해야 하는 마음에서 사용 IDisposable 또는 다른 방법을 확인하는 귀하의 관리된 코드를 청소할 수 있습니다.

의 코스가 항상있다 물론 이와 관련된 밖에도한 경우 패키지 코드로 Dll 외장 진입점.없음 옵션은 고통을 무료입니다.에 따라 그들은 하나)에서 당신의 기술을 쓰 COM 또는 Managed C 래퍼 b)chancing 팔서 를.

나는 살펴보 , 우리는 이것을 사용하기에 좋은 효과 우리의 프로젝트를 노출하는 우리의 C++API 다른 언어 플랫폼입니다.

그것은 잘 유지하는 프로젝트를 효과적으로 구축 얇은 래퍼 C++라이브러리를 허용할 수 있는 언어와 같은 C#과 직접 소통하고 당신의 기본 코드를 절감할 수 있는 데 문제 구현(디버그)접착제 코드입니다.

하려면 좋은 물론 이와 관련된 예는 당신이 볼 수 있습니다 PInvoke.net.그것은 예의를 호출하는 방법을 가장 승 api functions.

또한 사용할 수 있는 도구에서 이 문서 Clr Inside Out:물론 이와 관련된 는 번역됩니다.h 파일을 c#래퍼.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top