COM(CS)

COMとしてDLLを作成

--------------------------------------
・C#でクラスライブラリ作成

・プロジェクトのプロパティ
 1.アプリケーションタブ→アセンブリ情報ボタン→アセンブリをCOM参照可能にする→ON
 2.ビルドタブ→COM相互運用機能の登録→ON

・公開するインターフェイスを宣言

    /// <summary>
    /// COMインターフェース
    /// </summary>
    [ComVisible(true)]// COM
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]// IDispatch
    public interface ITest
    {
        [DispId(1)]
        int TestMethod1(string str);
        [DispId(2)]
        int TestMethod2(string str);
    }

・インターフェイスを実装する

    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("TestA.TestAA")]
    public class TestImpl : ITest
    {
        public int TestMethod1(string str)
        {
            return 0;
        }
        public int TestMethod2(string str)
        {
            return 0;
        }
    }

--------------------------------------
・C++で使用

・作ったCOMのレジストリ登録(普通のやり方では登録できないため、下記のようにする)
 1.コマンドライン
 2.cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
 3.regasm /regfile C:\project\Release\TestCom.dll
 4.TestCom.regを実行

・C++プロジェクトにヘッダを追加
 1.ClassWizard→クラスの追加ボタン→タイプライブラリから→TestCom.tlb

 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
 ※※※引数にlong型が含まれていると不正な関数として扱われ、使用できない。
 ※※※(原因不明)C#のlong型に相当するものがC++に存在しないから??

・サンプルコード

// 変数宣言

::CoInitialize(NULL);

ITestCom m_test_com;

// オブジェクト作成
BOOL b = m_test_com.CreateDispatch(_T("TestA.TestAA"));
if( b == FALSE ) ::AfxMessageBox("Dispatchインターフェース生成失敗", MB_OK);

// メソッドを使用
m_test_com.TestMethod();

// 解放
m_test_com.ReleaseDispatch();

::CoUninitialize();
最終更新:2009年04月15日 12:31
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。