cxiはvcの呼び出し可能なcomコンポーネントを作成する方法を共有します。
VSL 2008命令の提示符(へへへ、これはどこで見つけられますか?)
本論文ではあらゆるVSシリーズツールを適用します。
C〓〓を使ってCOMを創建する時、必ず以下の何時を覚えておきます。
1:エクスポートするクラスは公有でなければなりません。
2:すべての属性、方法も公有でなければならない。
3:エクスポートする属性、方法はインターフェース方式でなければなりません。インターフェースで宣言していないと、この方法(属性)が公有であっても、COMに正常にエクスポートできません。しかし、彼らは他のNETプログラムに使用されます。
4:すべてのイベントもインターフェース方式でなければなりません。
これから本題を始めます。
一、Visual C钻工程を新設しました。
種類の「クラス」を選択します。私の名前はMyConです。
二、エクスポートインターフェースを作成する。
皆さんが分かりやすいように、足し算だけを例に挙げます。以下のとおりです
[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]
public interface MyCom_Interface
{
[DispId(1)]
int Add(int a, int b);
Gidはグローバル一意のマークです。VSL 2008のコマンドプロンプトで入力できます。gudgenはそのウィンドウから出てきます。いくつかのチェックボックスで最後のRegistry Formatを選択して、New Guidをクリックして、COPYでいいです。[DispId(1)]は関数の識別です。複数の関数があれば、対応する関数の前に[DispId(2)]、[DispId(3)]を追加することができます。
三、イベントインターフェースを作成する。
[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface MyCom_Events
{
}
Gidは同じです。多くは言いません。InterfaceType表はCOMに公開する方式を求めています。ここではスケジュール方式でCOMに公開するように選択します。
四、具体的なクラスを作成する:
[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(MyCom_Events))]
public class Class1 : MyCom_Interface
{
public int Add(int a, int b)
{
return a + b;
}
}
これでコードが終了しました。簡単でしょう。急がないでください。後からよく無視されるステップがあります。まず全体コードを下に置いてください。
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace MyCom
{
[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]
public interface MyCom_Interface
{
[DispId(1)]
int Add(int a, int b);
}
[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface MyCom_Events
{
}
[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(MyCom_Events))]
public class Class1 : MyCom_Interface
{
public int Add(int a, int b)
{
return a + b;
}
}
}
五、みんなはCOMが登録する必要があることを知っています。登録するときは鍵ファイル.SNKを追加します。この部分はSNKファイルを生成することです。VSL 2008コマンドプロンプトに入ります。コマンド:sn Ck MyComp.snkで車に戻ります。私のはE:\vs 2008\vcの下で一つのファイルを作成しました。あなた達は自分の命令によって提出した書類のカタログを探しに行ってもいいです。それから、COPYをあなたのプロジェクトのルートディレクトリに送ります。
六、AsemblyInfo.csを開く。
中に[asembly:AsssembllyKeyFile]]を入れます。
七、(1)プロジェクトのプロパティ->アプリケーション->プログラムセット情報->「プログラムセットCOMを表示させる」を選択します。2)項目のプロパティ->生成->「COM相互操作登録」を選択します。
八、生成。もしDebugの下にMyComp.tlbがあったら、成功しました。このtlbファイルはVC 6.0の中でテストするためです。
九、VCの中にMFCダイアログプログラムを作ります。完成したら、作りたてのMyComp.tlbをルートディレクトリの下に拷問します。
十、コードに「MyComp.tlb」を入れてコアテストコードを作成します。
void CTestDlg::OnButton1()
{
CoInitialize(NULL);//
MyCom::MyCom_InterfacePtr p(__uuidof(MyCom::Class1));//
MyCom::MyCom_Interface *s = p;
int a = 3;
int b = 6;
int c = s->Add(a,b);
CString str;
str.Format("%d",c);
MessageBox(str);
}
つの9を弾いたら、もう成功したということです。