例えば、C#で記述されたCOMコンポーネントは、PBを呼び出します
はじめに:C#のDLLは直接だけ書かれたCOMコンポーネントにのみ呼び出すことができ、PBを呼び出すことはできません書くので、注意を払うためにC#でdllを書きます。
C#のは、新しいライブラリを作成します
図書館AddCom名前付きの型の一般的なクラスライブラリプロジェクト
1、設定:「アプリケーション」を選択し、「プロパティ」を選択し、AddComのソリューションエクスプローラ上で右クリック - >「アセンブリ情報は、」その後、「生成」をクリックし、「可視組立COM」をチェックし、選択「COM相互運用機能に登録」
2、オープンAssemblyInfo.csファイル、設定[アセンブリ:のComVisible(真)]、変更することなく、他のプログラムから呼び出すことができません
図3に示すように、書き込みCOMコンポーネントは、GUID(グローバルに一意のID)が使用され、コンポーネントは、COMを書き込むために使用されなければなりません。C#はAssemblyInfo.cs上のデフォルトを生成します、ノー世代なども次世代のオンラインソフトウェアのGUID可能GUIDジェネレータで生成することができます
次のように4、C#ソースコードは
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.Textのを。 使用してSystem.Runtime.InteropServicesを。 名前空間AddCom { [のGUID(" 298D881C-E2A3-4638-B872-73EADE25511C " )] パブリック インターフェイスAddComInterface { [DISPID(1 )] INT IADD(INT A、INTのB)。 } [のGUID(" 2C5B7580-4038-4d90-BABD-8B83FCE5A467 " )] [ClassInterface(ClassInterfaceType.None)] 公衆 クラスAddComService:AddComInterface { パブリックAddComService() { } 公共 のint IADD(int型、int型B) { int型 C = 0 。 C = A + B。 リターンC; } } }
これまでのC#についてのDLLが行われている、の登録を始めましょう
登録DLL
登録するには2つの方法があります。
1、C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ V2.0.50727 \ RegAsm.exeをE:\テスト\ MYLIB.DLL / TLB:E:\テスト\ MyLib.tlb
アンチ登録:C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727の\ RegAsm.exeを/ U E:E:テスト\ MyLib.tlb \テスト\ MYLIB.DLL / TLB \
図成功した登録次得られる(このアドレスは、それらの異なる修飾されたPCによれば、設置フレームワークの物理アドレスです)。
2、ラン( "します。regasm MYLIB.DLL / TLB:MyLib.tlb"!、最小化)
Regasm.exeによって前提は、現在のプロジェクトにファイルをコピーすることです
PB DLLを呼び出します
COMコンポーネントを呼び出すには、OLEコールの使用中のPb
OLEObjectのOLEObject ロングli_status int型li_reg int型li_cel 文字列A = " AA " 文字列B = " BB " // オブジェクトの作成のOLEObject のOLEObject = のOLEObjectを作成します // 接続を作成 li_status = OLEObject.ConnectToNewObject(" RakbLibrary.Class1を" ) のIF li_status <> 0 その後、 // 接続は、最初のコンポーネントの登録を解除し、成功していないし、次に再登録アセンブリは li_cel = RUN(「ます。regasm / U RakbLibrary.dll /tlb:RakbLibrary.tlb 」、最小化を!) のIFli_cel <> 1 その後、 メッセージボックス( 'プロンプト'、 '抗登録に失敗しました!') を返す それ以外の メッセージボックスを( 'プロンプト' '抗登録が成功した!') li_reg = RUN(" ます。regasm RakbLibrary.dll /tlb:RakbLibrary.tlb "、最小化!) のIF li_reg <> 1 その後、 メッセージボックス(「プロンプト」、「コンポーネントの登録に失敗しました!」) を返す それ以外の 、「プロンプト」(メッセージボックスを「コンポーネントの登録が成功した!」) エンド IF エンド IF 他には // 呼び出し元のクラス内のパブリック関数 = OLEObject.getForm li_res(A、B) 終了 のIF // 解放資源 のOLEObject。DisConnectObject()
戻り値が-3である場合、オブジェクトはうまくexeファイルの実行可能ファイルを生成するために作成することができませんでした
注:接続状態が0説明接続DLLが成功しているli_status、それは登録DLLが正常に行われない可能性があり、それはへの再登録(登録は、それを登録解除するための最良の時間です)必要があります
登録が成功命令としてli_cel登録状況
OLEObject.DisConnectObject()関数は、DLLのクラスライブラリを置くためにリソースを解放するために呼び出された後、それ以外の場合は、関数の戻り値を受け取ることはありません
すべてのファイル(C#のDLLファイルとTLBファイル、Regasm.exeによっては)プロジェクトのルートディレクトリに配置する必要があり、そしてこれらのファイルが同じディレクトリに配置する必要があります