2014-12-24 18 views
1

C# DLL에서 코드를 수정하고 C++ 응용 프로그램 내에서 사용해야했습니다. 나는 C++에 정통한 사람이 아닙니다. 그래서 뭔가 명확하지 않으면 알려주세요.COM 코드베이스 위치 - 사용할 버전을 선택하는 방법?

내가 사용하는 C#을 어셈블리 등록했습니다

CLSID clsid; 
CLSIDFromProgID(L"MyApp.MyClass", &clsid); 

HRESULT hr = CoCreateInstance(clsid,NULL, CLSCTX_INPROC_SERVER ,IID_MyClass, reinterpret_cast<void**>(&myclass));

hr 수익률 : 그러나

regasm file.dll /tlb:file.dll /codebase

을, 나는 C에서 이것을 사용하는 ++ 응용 프로그램을 시도 할 때 0x8013151a: access to this member is denied

레지스트리에서 여러 버전의 C# dll (Codebase이 다른 dll 위치를 가리키고 있음)을 발견했습니다.

올바른 DLL을 사용하고 있지 않기 때문에 문제가 있다고 생각합니다. (나는 완전히 틀릴 수 있었다).

제 질문은 이것입니다.로드하려는 DLL의 버전을 어떻게 알 수 있습니까?

미리 감사드립니다.

답변

4

이것은 DLL Hell 문제 일 가능성이 거의 없습니다. 디버거의 Debug + Windows + Modules 창을 사용하여 DLL의 경로를 다시 확인할 수 있습니다. MSBuild에서 구성 요소, Project + Properties, Build 탭, "COM interop에 등록"옵션을 등록하게하여 레지스트리를 깨끗하게 유지하십시오. VS가 상승해야합니다.

이것은 MethodAccessException이며 항상 코딩 버그입니다. 심령 디버깅은 코드를 보지 않아도 필요하지만 가장 간단한 설명은 C# 클래스의 기본 생성자가 공개되지 않는다는 것입니다.

+0

와우, 괜찮 았어. 그게 바로 문제였습니다. 정말 고맙습니다! – Puzzled