2013-03-12 2 views
5

지금 몇 시간 동안이 문제가 발생했습니다. 나는 누군가가 이와 비슷한 문제를 겪기를 희망한다..Net (C#) dll을 호출하는 VB6 프로젝트 디버그

우리는 VS2010을 사용하는 .NET (C#) dll 프로토 타입을 개발했으며이 DLL을 C# 응용 프로그램과 VB6 응용 프로그램 모두에서 호출 할 수 있기를 원합니다.

내 질문은 :

는 닷넷 DLL을 호출하는 VB6 응용 프로그램을 디버깅 할 수 있습니까? 내가 오류 메시지가 "자동화 오류 파일을 찾을 수 없습니다가 지정"

오류 메시지는 닷넷 DLL을 찾을 수 내 VB6 응용 프로그램 누락 뭔가가 있음을 시사한다. 우리가 할 수 있다는 것이 중요하지만 한 .exe

를 사용하는 경우

내가 VB6 응용 프로그램이 컴파일 된 경우, 그리고 .EXE이 생성 된 것을 알고는 VB6 성공적으로 닷넷 DLL 기능을 호출합니다 VB6 응용 프로그램을 통해 디버깅하십시오. 불행히도 디버깅을 사용하면 .Net DLL의 클래스 개체를 인스턴스화하는 코드 줄을 단계적으로 넘길 수 없습니다. 나는 이것을 할 수 없다.

참고 : 포럼과 MSDN 설명서를 둘러 보았고 대부분 .NET에서 VB6 dll을 호출하는 솔루션을 찾았습니다. 불행히도 우리가해야 할 일의 반대입니다.

참고 : 이미 컴파일 된 .Net (C#) 어셈블리를 등록하고 VB6 프로젝트에서 참조했습니다.

그러나이 두 페이지는 우리가 필요로하는 것처럼 보이지만 VS2005를 사용하여 생성 된 .NET (C#) dll을 호출하는 솔루션입니다. 이 doesnt는 .NET (C#) dll이 VS2010을 사용하여 생성되었을 때 작동하는 것처럼 보입니다. site2

사람이 어떤 제안을하거나 내가 하나를 얻을 수있는 곳 저를 직접 할 수 있다면

site1

, 잘 될 것이라고.

감사

솔루션 @HansPassant에 덕분에, 나는 해결책을 발견했다. C# .NET 어셈블리가 포함 된 VB6 프로젝트를 디버깅하려면 "regasm"및 "gacutil"을 통해 .NET DLL을 등록한 다음 디버깅을 시작하기 전에 VB6 응용 프로그램을 닫았다가 다시 열어야합니다 .

+2

질문을 올바르게 이해하면 VB 6 IDE (즉, VB 6 IDE)에서 디버깅을 원하십니까? 가능한 것은 아닙니다. VB 6 디버거는 VB 6 코드에서만 작동합니다. 그것은 네이티브 코드를 전혀 처리 할 수 ​​없으며 VB 6이 출시되었을 때 아직 개발되지 않았기 때문에 확실히 MSIL (.NET) 코드를 처리 할 수 ​​없습니다. –

+0

나는 그것이 당신이 그것을 컴파일하는 데 사용하는 .Net 프레임 워크에 달려 있다고 생각한다. 시각적 인 스튜디오 버전이 하위 호환성을 유지하려고 시도했기 때문에 당신이 발견 한 예제는 반대입니다. – luchosrock

+0

와우 포인트 @CodyGray. 나는 그것을 알아 내지 못했습니다. 당신이 맞습니다. – luchosrock

답변

0

VB6 코드에서 C# 코드로 쉽게 디버깅 및 디버깅 할 수는 없습니다. 그러나 각각을 개별적으로 디버깅 할 수 있습니다.

VB6 코드 디버깅은 C# DLL을 컴파일하고 VB6 프로젝트에 대한 참조로 추가 한 후 IDE에서 수행 할 수 있습니다.

Visual Studio에서 VB6 호스트를 사용하여 DLL을 디버깅하는 것은 VB6 프로젝트를 컴파일하고 프로젝트 속성에서 실행 파일로 사용하여 디버깅 할 수 있습니다.

불행히도, 적어도 각 작업의 프레임 워크가 있어야합니다.

+0

다음과 같이 말하면 : "IDE에서 VB6 코드를 디버깅하려면 C# DLL을 컴파일하고 참조한 후에 IDE에서 디버깅을 수행 할 수 있습니다." 실행 파일을 만드는 것을 의미합니까? – Knoxxios

+0

@Knoxxios 아니요, DLL 컴파일. 디버깅하거나 테스트하려면 다른 컴파일해야합니다. 따라서 기본 프레임 워크가 먼저 필요합니다. 좀 더 명확히하기 위해 대답을 업데이트했습니다. – Deanna

+0

이런 경우에 나는 이미 그것을 시도했다. C# 어셈블리를 컴파일하고 VB6 프로젝트에서 참조했습니다. 나는 당신의 제안을 사용하여 C# dll을 디버깅 할 수 있지만 VB6 프로젝트는 디버깅 할 수 없다. – Knoxxios

9

이것은 문제가되지 않지만 VB6은 C# 코드 용 관리 도구를 포함하여 다른 디버거를 방해하지 않는 자체 디버거를 사용합니다.

C# 클래스 라이브러리 프로젝트에서 시작 프로젝트가 시작 프로젝트로 선택되어 있는지 확인하십시오. 프로젝트 + 속성, 디버그 탭. "외부 프로그램 시작"옵션을 선택하고 VB6 IDE의 경로를 입력하십시오. 일반적으로 c : \ program files \ microsoft visual 스튜디오 \ vb98 \ vb6.exe. 디버깅 할 메서드에 중단 점을 설정하십시오.

F5 키를 누르면 VB6 ide가 실행되기 시작합니다. 로드하거나 vb6 프로젝트를 만듭니다. 이전 단계에서 .vbp 프로젝트에 경로를 추가하여 프로젝트를 자동으로로드하는 방법에 유의하십시오.

평소와 같이 vb6 프로젝트를 디버깅을 시작하십시오. [ComVisible] C# 클래스를 사용하자마자 C# 어셈블리가로드됩니다. 그리고 vb6 코드가 메서드를 호출 할 때 중단 점에 도달합니다. 필요에 따라 앞뒤로 전환하십시오. 참고로 vb6에서 C# 코드까지 단일 단계로 진행할 수는 없으므로 중단 점을 설정하여 디버거가 중지되도록해야합니다.

+0

한스, 방금 해답을 찾으 셨습니다. "자동화 오류 시스템에서 지정한 파일을 찾을 수 없습니다"오류가 발생했습니다. 참고 : .net dll [COMVisible (true)] 클래스 및 메서드가 포함되어 있습니다. vb6 프로젝트와 동일한 디렉터리에 C# 어셈블리 및 .tlb 복사본이 있습니다. 마지막으로 .Net 어셈블리는 VS2010을 사용하여 컴파일되었습니다. VB6에서 C# 어셈블리를로드하는 구체적인 방법은 무엇입니까? – Knoxxios

+0

그건 완전히 다른 질문입니다. 물어보십시오. 간단히 말해 CLR은 vb6 프로젝트 디렉토리를 살펴볼 이유가 전혀 없으며 그것에 대해 아무 것도 모릅니다. regasm.exe/codebase 디렉터리와 [ComVisible] 어셈블리의 GAC 및 vb98 디렉터리와 종속 어셈블리의 GAC를 찾습니다. 그것을 보려면 Fuslogvw.exe를 사용하십시오. –

+0

니스, 가능하다고 생각했지만 시도하지 않았기 때문에 그들이 어떻게 상호 작용하는지 알지 못했습니다. 따라서 "쉽게"는 아닙니다. :) – Deanna

3

아, VB6에서 .NET을 디버깅 방식으로 사용하는 경이.

  • 는 VB6 프로젝트 (프로젝트 만들기 대화 창에서 옵션 버튼을 사용하여 도달) 컴파일 옵션을 네이티브 코드, 없음 최적화에 컴파일을 선택하고 는 심볼 디버그 정보 옵션을 만듭니다. 그런 다음 VB6 프로젝트를 컴파일하십시오. 이러한 옵션을 사용하면 적절한 VB6 바이너리 - 소스 매핑이 가능합니다.
  • 솔루션의 구성 속성 ... 디버깅 속성 페이지로 이동하여 동작 시작을 변경하여 VB6 실행 파일을 시작하십시오.
  • VS 솔루션 탐색기에서 파일 ... 기존 항목 추가로 이동하여 디버깅 할 VB6 소스 코드가있는 폴더로 이동하십시오. 디버깅 할 VB6 소스 코드 파일을 두 번 클릭하면 VB6 소스 코드에서 중단 점을 설정할 수있는 소스 창이 VS에서 열립니다.
  • .NET 라이브러리에 공용 기본 생성자가 있는지 확인하십시오. 이것은 필수적입니다.
  • 이제는 필요한 C# 중단 점도 설정하십시오. 이 아니라 단계로 .NET 코드가 실행됩니다. 작동하지 않습니다.
  • VS로 디버깅을 시작하면 VB6 및 C# 중단 점을 정상적으로 맞춰야합니다.
+0

이것은 불행히도 .Net dll의 디버깅 만 허용합니다. – Knoxxios

+0

@Knoxxios, 나는 디버그하는 방법을 설명하는 추가 글 머리 기호를 추가했습니다. VB6 소스 코드. – RoadWarrior

+0

당신의 단계를 따르는 곳에서 소스 창을 열지 못하고 있습니다. VS2010에서 VB6 코드를 열 수 없다는 뜻이 아니길 바랍니다. – Knoxxios

관련 문제