2011-01-07 2 views
4

現在、.NET 2.0フレームワークを使用してC#で記述されたCOM相互運用機能ライブラリを使用するVB6のアプリケーションで作業しています。COM Interopを使用するVB6アプリケーションは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

[OK]を暗闇の中で撮影します。しようとするもの:

明示的にSessionオブジェクトまで新しい(だけでなく、ライセンスと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で実行されている理由はまだ分かりません。しかし、私は将来の変更のために上記のあなたの点を指摘しました。ありがとう! –

関連する問題