많은 새로운 비즈니스 및 통신과 결합하여 신제품에 사용하려는 UI를 제공하는 포괄적 인 관리되지 않는 Windows CE 5 C++ 코드가 있습니다. Windows CE 6 및 Compact Framework에서 관리되는 C#으로 작성된 논리HOWTO : 관리되는 C# 인터페이스를 관리되지 않는 C++에서 WindowsCE Compact Framework에서 호출
UI는 비즈니스 로직을 알고 있을지 모르지만 비즈니스 로직을 UI에 대해 모르는 상태에서 나중에 관리되는 버전 또는 프런트 엔드로 선택한 다른 UI로 바꿀 수 있기를 바랍니다.
Windows에서 COM을 브리지로 사용하는 방법을 설명하는 기사가 있지만 WinCE에서 .NET CF에 적용하는 데 어려움이 있습니다. 과거에는 형식 라이브러리를 가져오고 다른 Windows 플랫폼의 인터페이스에 대한 포인터를 얻기 위해 COM 호출 (CoInitialize(), CoCreateInstance())을 사용했습니다. 그 순간 제가 추구하는 전략은 다음과 같습니다. 동일한 관리 기능이 WinCE에서 제공된다고 가정 할 때 관리되지 않는 C++ 라이브러리가 관리되는 라이브러리의 C# 인터페이스에 액세스합니다.
여기 내 문제가 있습니다. typelib입니다. 이전에 '#import "SomeCPPLibrary.dll"문을 통해 사용한 적이 있으므로 관리되는 C# 라이브러리에서는 사용할 수 없습니다. 저는 그것이 .dll 어셈블리에 묻혀 있고 과거와 다른 방식으로 저장되어 있기 때문에 라이브러리 자체의 # import를 통해 직접 사용할 수 없습니다. 내 생각 엔 형식 라이브러리를 # import 할 수는 있지만 관리되는 .dll에서 typelib을 추출 할 수있는 방법을 찾지 못하고 인터페이스 정의 파일 (.idl)을 해킹하고 플랫폼의 midl.exe를 사용할 수는 있습니다. 그것으로부터 .tlb를 생성하기 위해, 내 .idl이 결과적으로 .tlb라는 결과가 내 C# .dll과 실제로 일치한다는 보장은 없습니다. 플랫폼 midl.exe가이 방식으로 작동하는지는 모르지만 그것이 있다고 가정합니다.
나는 잘못된 나무를 짖고 있습니까? 관리되는 C# 인터페이스를 관리되지 않는 C++에서 해당 COM 인터페이스를 통해 사용할 수 있습니까?
AssemblyInfo.cs 파일의 [assembly : ComVisible (true)] 특성을 설정하면 관리되는 어셈블리의 모든 인터페이스가 AssemblyInfo.cs가 정의하는 GUID를 통해 관리되지 않는 세계의 COM을 통해 사용할 수 있습니까? 더 많은 것을하기 위해?
관리되지 않는 C++ 라이브러리가 # import 할 수 있도록 관리되는 .dll에서 typelib을 가져 오는 방법은 무엇입니까?
내 관리 C# 라이브러리 프로젝트를 관리되지 않는 C++ 라이브러리 프로젝트의 참조로 추가하려고 시도했지만 도움이되지 않았습니다. 이런 상황에서 그러한 참조는 전혀 관련이 없습니까?
관리되지 않는 C++ 코드에서 관리되는 C# 코드를 호출 할 때의 기본적인 문제를 해결할 수있는 더 나은 방법이 있습니까? 여기서 방금 읽은 내용은 관리되지 않는/관리되는 갭을 메우기 위해 관리되는 변환 계층이있는 혼합 모드 라이브러리입니다. 통화 응답 속도가 중요한 요소 인만큼 좋은 전략인지는 잘 모르겠지만 어느 시점에서 UI를 관리 C#으로 다시 작성하려고 계획 할 때 장기적으로 더 나을지도 모릅니다. 따라서 모든 노력을 더 영구적 인 비즈니스/통신 로직을 사용하기보다는 UI를 버려야합니까? 이 질문에 대한 답변에 관계없이 호기심이 아닌 다른 이유로 COM을 사용하는 문제를 해결하고 싶습니다.
+1 멋진 글 –