Dotnet interop 및 C#에 등록 무료 COM을 사용할 수 있습니까? 그렇다면 C# 프로젝트에서 COM 개체에 대한 참조를 추가하는 방법은 무엇입니까?Reg에서 무료 COM interop with C#, 가능?
나는 임베디드 매니페스트와 두 개의 테스트 클라이언트가있는 자유로운 ATL COM 서버 dll을 가지고있다. 하나는 cpp이고 다른 하나는 C#이다. CPP를 클라이언트가 제대로 링커에서 "= '1.0.0.0'을 입력 = '는 Win32'이름 = 'TestComSvr1'버전 'import 문 및 중
#pragma comment(linker, "\"/manifestdependency:type='win32' name='TestComSvr2' version='1.0.0.0'\"")
또는 설정'추가 매니페스트 종속성 '을을 사용하여 COM 객체를 참조 -> 매니페스트 파일 옵션을 사용하면 COM 구성 요소가 동일한 디렉토리에있는 한 cpp 클라이언트가 올바르게 실행됩니다.
C# 클라이언트는 게임을 전혀 거절합니다.
등록되지 않은 COM 구성 요소 DLL 또는 오류에 등록 TLB 결과 중 하나에 파일 참조를 추가하려고 : 'regtlib의 TestComSvr'로 단지 형식 라이브러리를 등록
"A reference to 'blah blah' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component".
다음 파일 또는 하나를 만드는 COM 다음 C# 프로젝트를 구축 등록 취소, 절연에 대한 참조를 설정
"Error loading type library/Dll. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))".
COM 구성 요소를 등록하고 C# 프로젝트에서 일반적으로 참조를 만드는 : 그 참조는 빌드 실패는 C# 프로젝트 결과 구성 요소 및이 예외의 C# 프로젝트 결과를 실행 :
Retrieving the COM class factory for component with CLSID {B1D0A80F-0050-4856-BACD-87D664E58CBE} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
참고 :이 궁극적으로 여전히 구성 요소의 등록을 요구하기 때문에 그것은 어쨌든 유용한 경우가 아닐 것이다 일을하더라도, 난 그냥 그것을 테스트 완전.
지금까지 COM 개체를 C#에서 참조 할 수 있었던 유일한 방법은 COM 개체 자체를 등록하는 것입니다. 물론 COM 개체 자체를 등록하는 것입니다.이 시점부터 전혀 포인트가 없어지지 만 전혀 reg-free가 아닙니다.
누구나 아이디어가 있습니까?
(이것은 VS2010 sp1이있는 WinXP에 있습니다).
Visual Studio EXE 자체에 대한 매니페스트 파일을 만들어야 할 필요가 있는지 궁금하십니까? 이 링크를 찾았지만 도움이 될지 확실하지 않은 경우 http://msdn.microsoft.com/en-us/library/ms973913.aspx – PeskyGnat
또한 tlbimp를 사용하여 interop dll을 만들고 참조하면 어떻게됩니까? 즉 'tlbimp'? –
PeskyGnat