2010-02-12 6 views
5

VB6 프로그램에서 VB.NET DLL을 사용할 때 문제가 있습니다. 이미 GuidAttribute로 DLL을 만들었고 RegAsm을 사용하여 tlb를 만들고이를 VB6 프로그램의 참조에 추가했습니다. 문제는 CreateObject 함수를 사용하여 개체를 만들려고하면 "ActiveX 구성 요소가 개체를 만들 수 없습니다."라는 오류가 나타나는 것입니다.VB6 프로그램에서 VB.NET DLL을 사용하고 싶습니다. 가능한가?

VB.NET에서 DLL로 선언을 놓치고 있는지 또는 CreateObject 함수를 제대로 사용하지 않고 있는지 알 수 없습니다.

+0

내 추가 : 나는 "눈에 보이는 COM을 확인"다음 VB6에서 DLL을 사용 설정 한 경우입니다 그게 가능해? –

답변

0

구성 요소가 com interop에 제대로 등록되어 있는지 확인해야합니다. 프로젝트 속성 탭에는이를 활성화하는 확인란 옵션이 있습니다. 올바른 경로에 참조 할 수있는 유형 라이브러리를 만들면됩니다. vb6, 당신은 다른 COM compenent처럼 그것에 대한 참조를 간단하게 추가 할 수 있습니다. 그러나 실제로 tlb 파일을 만드는 대신 등록하십시오.

Regasm.exe는 COM에서 사용할 어셈블리를 등록하면 로컬 컴퓨터의 레지스트리에 항목을 추가합니다. 보다 구체적으로는 동일한 어셈블리의 여러 버전을 컴퓨터에서 나란히 실행할 수있는 버전 종속 레지스트리 키를 만듭니다. 어셈블리가 처음 등록되면 어셈블리에 대해 하나의 최상위 키가 만들어지며 특정 버전에 대해 고유 한 하위 키가 만들어집니다. 새 버전의 어셈블리를 등록 할 때마다 Regasm.exe는 새 버전의 하위 키를 만듭니다.

Regasm.exe를 사용하여 어셈블리를 등록한 후에는 모든 COM 클라이언트에서 활성화 할 수 있도록 전역 어셈블리 캐시에 어셈블리를 설치할 수 있습니다. 어셈블리가 단일 응용 프로그램에서만 활성화 될 경우 해당 응용 프로그램의 디렉터리에 배치 할 수 있습니다.

이 도구는 당신이 제공 한 정보와 말을 /regfile:myTest.reg

.DLL 하드
0

RegAsm을 {어셈블리 경로}를 사용하여 레지스트리에 대해 생성 무엇에 관심이 있다면 ,하지만 어셈블리를 찾을 수 없게 만든 것처럼 들립니다. MSDN에서 : HKCR \ CLSID에서

{0000 ... 0000} 키, 기본 값은 클래스의 ProgID를 로 설정하고, 두 개의 새로운 이름 값, 클래스 및 조립이 추가됩니다. 런타임은 레지스트리에서 어셈블리 값 을 읽고 런타임 어셈블리 해결자인 에이 값을 전달합니다. 어셈블리 확인 프로그램은 이름이 이고 버전 번호가 인 어셈블리를 기반으로 어셈블리를 에 배치하려고 시도합니다. (A 강력한 이름의 어셈블리를해야합니다)

전역 어셈블리 캐시 : 어셈블리 해결이 어셈블리를 찾을 경우, 어셈블리는 다음 위치 중 하나에 있어야한다.

응용 프로그램 디렉터리에 있습니다. 응용 프로그램에서로드 된 어셈블리는 응용 프로그램에서만 액세스 할 수 있습니다.

Regasm.exe의 /codebase 옵션으로 지정된 파일 경로를 따릅니다.

관련 문제