C#ATL COMを呼び出す
5695 ワード
作者:朱金燦
ソース:http://blog.csdn.net/clever101
C#プログラムがATLで作成したCOMコンポーネントを呼び出す方法について簡単に説明します.
まずATLプロジェクトを新設します.具体的には以下の通りです.
1.工事名称と経路を以下の図に記入する.
2.次の図に示すように、プロジェクトのサーバタイプをダイナミックリンクライブラリとして選択します.
3.次の図に示すATL単純オブジェクトを追加します.
4.次の図にクラス名を記入します.
5.クラスのスレッドモデルおよびその他の属性を以下の図のように選択します.
6.インタフェースクラスにメソッドを追加します.次の図です.
7.方法名及び入出力パラメータを以下の図に記入する.
8.IDLインタフェースのプロパティを設定します.ここではデフォルト設定を採用すればいいです.以下の図です.
先ほど作成したAddメソッドにコードを追加します.具体的には、次のとおりです.
その後、プロジェクトをコンパイルし、dll形式のCOMを生成します.
第2歩C#コンソールテストプロジェクトを新規作成します.具体的には以下の通りです.
1.コンソール工事の名称と経路を以下の図に記入する.
2.次の図に示すように、新しいライブラリ参照を追加します.
3.先ほど新しく生成したCOM-MathCom 1.0タイプライブラリを選択し、以下の図に示す.
4.Program.csには、次のコードが追加されます.
効果図は以下の通りです.
質問:
1.C#はCOMインタフェースを呼び出します.パラメータタイプではlongタイプではなくC#のintタイプでなければなりません.なぜですか.
ソース:http://blog.csdn.net/clever101
C#プログラムがATLで作成したCOMコンポーネントを呼び出す方法について簡単に説明します.
まずATLプロジェクトを新設します.具体的には以下の通りです.
1.工事名称と経路を以下の図に記入する.
2.次の図に示すように、プロジェクトのサーバタイプをダイナミックリンクライブラリとして選択します.
3.次の図に示すATL単純オブジェクトを追加します.
4.次の図にクラス名を記入します.
5.クラスのスレッドモデルおよびその他の属性を以下の図のように選択します.
6.インタフェースクラスにメソッドを追加します.次の図です.
7.方法名及び入出力パラメータを以下の図に記入する.
8.IDLインタフェースのプロパティを設定します.ここではデフォルト設定を採用すればいいです.以下の図です.
先ほど作成したAddメソッドにコードを追加します.具体的には、次のとおりです.
STDMETHODIMP CMathCalc::Add(LONG Num1, LONG Num2, LONG* Ret)
{
// TODO:
assert(NULL!=Ret);
*Ret = Num1+Num2;
return S_OK;
}
その後、プロジェクトをコンパイルし、dll形式のCOMを生成します.
第2歩C#コンソールテストプロジェクトを新規作成します.具体的には以下の通りです.
1.コンソール工事の名称と経路を以下の図に記入する.
2.次の図に示すように、新しいライブラリ参照を追加します.
3.先ほど新しく生成したCOM-MathCom 1.0タイプライブラリを選択し、以下の図に示す.
4.Program.csには、次のコードが追加されます.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MathComLib; //
namespace TestMathCom
{
class Program
{
static void Main(string[] args)
{
int a = 2;
int b = 3;
int lRetVal = 0;
MathCalc MyMathCalc = new MathCalc();
MyMathCalc.Add(a, b,out lRetVal); // out
System.Console.Write(lRetVal.ToString());
System.Console.WriteLine("
Press Enter to continue.");
System.Console.ReadLine();
}
}
}
効果図は以下の通りです.
質問:
1.C#はCOMインタフェースを呼び出します.パラメータタイプではlongタイプではなくC#のintタイプでなければなりません.なぜですか.