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