2011-12-19 3 views
2

vb.net 클래스 라이브러리를 만들었습니다. 저장 장치 용 인터페이스입니다. 장치에 데이터를 읽고 쓰려면 몇 가지 개체와 메서드를 제공합니다.vb.net 클래스 라이브러리를 vb6 프로젝트로 가져 오기

문제는 고객이 장치를 조작하기 위해 클래스 라이브러리의 기능을 추가하려는 vb6 응용 프로그램이 있다는 것입니다. 나는 클래스를 com 클래스로 변경하고, com interopt 체크 박스를 체크하고 .net 프레임 워크 2.0 regasm.exe로 라이브러리를 등록했다.

빈 vb6 프로젝트에 대한 참조로 라이브러리를 추가하고 개체를 만들었습니다. 내가 추가 할 때

dim t as comlib.obj 

목적은 '아무것도'

동일했다 :

t = new comlib.obj 

또는

t = createobject("comlib.obj") 

을 나는 다음과 같은 오류 있어요 :

run-time error '2147024894 (80070002)': Automation

내가 뭘 잘못하고있는거야?

+0

게시물 서식을 설정하고 다음에 적용하는 방법에 대한 도움말을 읽어보십시오. '
'태그를 사용할 필요가 전혀 없습니다. –

+0

일반적인 Windows 오류 인 "File not found"입니다. Regasm.exe를 사용할 때/codebase 옵션을 사용하는 것을 잊었 기 때문에 생성 된 확률이 높습니다. 어떤 파일이 누락되었는지 모르는 경우 SysInternals의 Procmon 유틸리티를 사용할 수 있습니다. –

+0

또 다른 가능성은 COM 래퍼가 x86 또는 x64를 염두에두고 작성되거나 등록되지 않았을 수 있다는 것입니다. 나는 과거의 고전적인 ASP 애플리케이션으로 그 문제에 봉착했다. x86 모드에서 실행 되었기 때문에 x86을 사용하여 래퍼를 만들고 regasm.exe의 x86 버전을 사용하여 등록해야했습니다. 그 이후로 저는 x86 및 x64 용 설치 프로그램/빌드를 제공하는 습관을 갖고 있으며 소비자는 더 적절한 것을 선택할 수 있습니다. – killthrush

답변

1

변수를 디밍하는 것만으로 값 (.NET private TypeName variableName;과 동일)을 할당하지 않으면 먼저 Set T = New Comlib.Obj을 사용하여 변수를 만들어야합니다.

오류가 발생하면 표준 디버깅 기법을 사용하여 범위를 좁히거나 전체 오류 메시지를 게시해야합니다. 누군가가 조언 할 수 있습니다.

0

내가 @Deanna는 솔루션을 가지고 말을하지만 그 다음에 실패하면

난 당신이 .NET 어셈블리에 생성자보고이 런타임 오류의 어떤 종류를 던지고 있지 않은지 확인해야한다고 제안 .

새 하위에 오류 처리기가있는 경우에도 VB6 응용 프로그램이 실행되지 않습니다.

필자는 .NET 생성자를 최소한으로 유지하고 추가 메서드 인 생성 코드 (예 : LoadData)를 사용하는 규칙을 따랐습니다. 이렇게하면 적절한 오류 처리기를 가질 수 있습니다. 그런 다음 오류가 발생하면 VB6으로 올바르게 전달됩니다.

관련 문제