11

tlbファイルを介してCOMに公開した.NETアセンブリと、tlbを登録するインストーラーがあります。インストーラーが正しく機能し、COMクライアントがライブラリにアクセスできることを手動で確認しました。ここまでは順調ですね...

ただし、インストーラーが正しく機能していることを確認する自動システムテストをまとめようとしています。その一環として、VMへのインストールを自動化しました。次に、インストールされたCOMライブラリを呼び出して、正しく機能していることを確認します。私はもともとVB6でいくつかのテストを書くことを考えていましたが、.NETアセンブリを参照するC#で書かれたテストの大規模なスイートをすでに持っています。.tlbを参照するようにこれらを変更できることを期待していましたが、VS2008内でこれを試してみると、エラーが発生します。

ActiveXタイプライブラリ'blah.tlb'は.NETアセンブリからエクスポートされたため、参照として追加できません。

おそらくtlbファイルを編集することによって、VS2008をだましてこの参照を追加できるようにする方法はありますか?

グーグルは解決策を考え出していません。私が見つけたのは、これが「設計による」と述べているMicrosoft Connectの記事だけです:http ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 120882

4

3 に答える 3

12

私が解決策に最も近いのは、次のようなものです。

using System;
class ComClass
{
    public bool CallFunction(arg1, arg2)
    {
        Type ComType;
        object ComObject;

        ComType = Type.GetTypeFromProgID("Registered.ComClass");
        // Create an instance of your COM Registered Object.
        ComObject = Activator.CreateInstance(ComType);

        object[] args = new object[2];
        args[0] = arg1;
        args[1] = arg2;

        // Call the Method and cast return to whatever it should be.
        return (bool)ComType.InvokeMember("MethodToCall", BindingFlags.InvokeMethod, null, ComObject, args))
    }
}

あまりきれいではありませんが、要点はわかると思います。もちろん、ComObject のインスタンス化をコンストラクターに入れ、残りの呼び出しをオブジェクトにラップすることもできますが、おそらくテスト コードには必要ありません。

于 2011-04-18T18:52:30.083 に答える
0

TLBImp を使用して、インストールした COM コンポーネントのラッパー クラスを作成し、それに対してテストを実行できるはずです。基本的に、.Net アセンブリを作成し、それを COM にインストールしてから、ラッパー クラスに対してテストを行います。これにより、COM コンポーネントによって呼び出されたかのようにテストがルーティングされます。

于 2008-12-15T11:00:39.497 に答える
-1

tlbimp.exeを使用すると、.NET コードで使用できる COM コンポーネントからアセンブリを生成できます。

于 2008-12-15T10:59:12.323 に答える