저는 C++로 구현 된 꽤 큰 시스템을 가지고 있습니다. 이 시스템은 상당히 큰 API와 수많은 C++ DLL을 가지고 있습니다. 이러한 DLL은 멋진 C 스타일 API와 달리 C++ 클래스를 내 보냅니다. 그리고 새로운 C# 프로젝트에서 사용해야합니다. - 단지 C API를 C에서 API를 호출하는 방법 #
- P/호출 : 나는 .NET을 알고에서
는 기본 소프트웨어와 상호 작용의 세 가지 방법이있다
내가 이해하는대로, 그에 따라 세 가지 접근법이 있습니다 :
- C에 랩퍼 작성 W P/Invoke로 호출. 너무 많은 일이있는 것처럼 보입니다.
- COM을 사용하여 래퍼 작성. 나는 그것을하는 법을 모르며, 미친 듯이 쉽지 않은 한, 나는 죽어가는 기술이 무엇인지를 배우는 것을 꺼려합니다.
- C++/CLI에서 래퍼 작성. 그래도 여전히 가장 적은 일로 보입니다.
내 질문 :
이내가 알고 싶습니다 우선 왜 .NET 나를 단순히 "있는 그대로"C++ 클래스를 사용하는 것을 허용하지 않습니다? 나는 그것이 기억의 문제라고 가정한다. 경영. 그리고 만약 그것이라면 finalizer를 쓰는 것보다 더 많은 것이고, 그리고 IDisposable을 구현하고 있습니다. 내가 알고있는 C++ 클래스는 단지 이며, P/Invoke는 구조체를 지원하고 함수가 인데 첫 번째 매개 변수로 구조체를 사용하는 이유는 무엇입니까? 클래스를 지원하지 않으시겠습니까?
둘째, 내가 게으르다는 것과 그 지루하고 지루한 많은 것을 가정하면 이 작동합니까? 이러한 DLL을 사용하는 가장 좋은 방법은 무엇입니까? C#에서 직접 호출하는 가능성이 가장 좋습니다. 그렇지 않다면 포장재를 생산하는 자동 도구가 좋을 것입니다. 또한 DLL은 으로 변경 될 수도 있지만 약간은 그렇지만 여전히 ID가 아닌 은 수동으로 래퍼를 다시 작성해야합니다.
정말 좋은 답변
, 특히 첫 번째 부분, 또는 좋은 자동 공구에, 내가 현상금을 보상거야 ...
는
1. 나의 오래된 대답을 참조하십시오 SWIG
입니다. –
http://stackoverflow.com/questions/2120690/tool-for-creating-net-wrappers-for-a-com-dll –
나는 C++/CLI가 좋을 것이라고 생각한다. C++로이 작업을 수행 한 경험이있는 것은 아닙니다. – chris