2011-01-07 3 views
4

현재 .NET Framework를 사용하는 C#으로 작성된 COM Interop 라이브러리를 사용하는 VB6의 응용 프로그램에서 작업하고 있습니다.COM Interop을 사용하는 VB6 App은 IDE에서 제대로 작동하지만 컴파일 된 EXE 충돌이 발생합니다.

나는 regasm.exe를 사용하여/codebase 스위치를 사용하여 .NET DLL에서 tlb 파일을 등록했습니다. 그때 성공적으로 VB6 IDE에서 응용 프로그램을 빌드하고 실행할 수있었습니다. .NET 코드는 구성 파일을 사용하므로 VB6 디렉터리에 추가하고 구성에서 올바르게 읽습니다.

그러나 저는 프로젝트에서 EXE 파일을 컴파일하여 IDE가 실행되는 것과 동일한 컴퓨터에서 실행했습니다. 나는 VB6.EXE로 디버깅을 한 것처럼 설정 파일과 EXE를 결합했지만, 응용 프로그램이 .NET 클래스 중 하나에서 메서드에 대한 첫 번째 호출을 실행하면 런타임 오류가 발생하여 " 자동화 오류 ".

내 선언문에서 .NET 클래스에서 다음 개체를 인스턴스화하면 정상적으로 작동합니다. 첫 번째 줄이 실행될 때

Private objSession As New Session 
Private curFolder As Folder 
Private colFolderTemplates As New FolderTemplateCollection 
Private objLicense As New License 

그러나, 자동화 오류 런타임에 온다 :

Call objSession.Configuration.Configure(connectionString) 

내가 같은 릴리스 EXE와 같은 디렉토리 및 재 등록에 .NET DLL을 추가하는 시도 tlb 파일,하지만 도움이되지 않았다. 내가 확인할 수있는 것에 대한 제안?

답변

0

어둠 속에서 촬영하십시오. 상황이 시도 :

세션 개체 (물론 라이센스 및 FolderTemplateCollection)를 명시 적으로 새로운 :

Private objSession as Session 
Set objSession = new Session 

자동화 오류가 .NET 어셈블리에서 GUID를가 지속되지 않도록 표시합니다. - 그렇게하려면 C# 코드에서이 작업을 수행이 모든 인터페이스/클래스/가상 테이블에 상관없이 당신이 당신의 C# 코드를 컴파일 횟수, 지속 없다는 것을 보장 :

내가 발견 한
[Guid("9AC71CA7-6F82-44A3-9ABE-75354B514A46")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface IManager 
{ 
    [DispId(1)] 
    void Display(ADODB.Recordset recordSet); 
    [DispId(2)] 
    void Close(); 
    [DispId(3)] 
    string UserName { get; set; } 
    [DispId(4)] 
    string Password { get; set; } 
    [DispId(5)] 
    string Database { get; set; } 
    [DispId(6)] 
    string Server { get; set; } 
    [DispId(7)] 
    ICriteria Criteria { get; set; } 
} 

[Guid("B9BB5B84-8FBD-4095-B846-EC072163ECD3")] 
[ClassInterface(ClassInterfaceType.None)]  
[ProgId("MyApp.Manager")] 
public class Manager : IManager 
{ 
    void Display(ADODB.Recordset recordSet) 
    { 
    } 
    ... 
} 
+0

것은 내 공개한다는 것입니다 형식이 ComVisible로 정규화되었지만 내 어셈블리가 적합하지 않습니다. 어셈블리를 ComVisible로 표시하고 GUID를 지정하면 상황을 해칠까요? –

+0

GUID를 추가해도 아무 것도 아프지 않습니다. – AngryHacker

+0

이 문제는 .NET 코드에서 사용하는 구성 파일에 실제로 뿌리를두고있는 것으로 보입니다. 동일한 구성을 사용하여 IDE에서 실행되는 이유는 아직 확실하지 않습니다. 그러나 나는 당신의 요지를 미래의 변화에 ​​대해 상기시켰다. 감사! –

관련 문제