Visual Studio .NET による Office マネージ COM アドインの作成
Paul Cornell
Microsoft Corporation
June 6, 2002
今月は、Visual Studio .NET を使用して Office マネージ COM アドインを作成する方法を説明します。
COM アドインが開発される前は、Office アプリケーション固有のアドイン (Microsoft Outlook® と Microsoft FrontPage® は除く) のみが作成可能でした。アプリケーション固有のアドインには、.mda、.pwz、.wll、.xla などのファイル拡張子があります。Office アプリケーション固有のアドインとしては、Analysis ToolPak および Solver Add-In for Microsoft Excel などがあります。Microsoft Office 2000 からは COM アドインによって、複数の Office アプリケーションにまたがるアドインを作成できるようになりました。多くのアプリケーションで使用できるコードを記述し、また同時に COM アドインをホストする各アプリケーションに固有のコードを記述できます。
COM アドインは、カスタム コードだけでなく特殊なレジストリ エントリも含んだダイナミックリンク ライブラリ (DLL) です。このレジストリ エントリは、実行時の COM アドインの動作を決定するため、Microsoft Office アプリケーションによって使用されます。
その名前が示すように COM アドインは、コンポーネント オブジェクト モデル (COM) テクノロジを使用します。マネージ (.NET) コードは使用しません Visual Studio .NET を使用して、マネージ COM アドインを作成することはできます。ただしそれはファイル拡張子が .dll の .NET アセンブリであり、本当の意味で COM DLL ではありません。しかし、十分な情報が Visual Studio .NET によって与えられているので、マネージ COM アドイン を Office アプリケーションで読み込むと、実行時に COM アドイン同等の動作が得られます。今月のこのコラムで Visual Studio .NET を使用してマネージ COM アドインを作成する方法を説明するにあたり、"マネージ COM アドイン" と "共有アドイン プロジェクト" という 2 つの用語を相互に置き換え可能なものとして使用します。
Microsoft Visual Studio .NET を使用してマネージ COM アドインを作成する
Microsoft Visual Studio .NET を使用してマネージ COM アドインを作成するには、以下の手順で Visual Studio .NET 共有アドイン プロジェクトを作成します。
[スタート] をクリックして [プログラム]、[Microsoft Visual Studio .NET] をポイントし、[Microsoft Visual Studio .NET] をクリックします。
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] ペインで [その他のプロジェクト] フォルダをダブルクリックし、[機能拡張プロジェクト] をクリックします。
[テンプレート] ペインで、[共有アドイン] をクリックします。
[プロジェクト名] ボックスに "共有アドイン" プロジェクトの名前を入力します。
[場所] ボックスにフォルダ パスを入力するか、[参照] をクリックしてフォルダ パスを選択し、[OK] をクリックします。機能拡張ウィザードが表示されます。
ウィザードの [次へ] ボタンをクリックします。[プログラミング言語の選択] ページが表示されます。
[Visual Basic を使用してアドインを作成] をクリックし、[次へ] をクリックします。[アプリケーション ホストの選択] ページが表示されます。
マネージ COM アドインをホストする各アプリケーションの横のチェック ボックスをオンにします。
ウィザードの [次へ] ボタンをクリックします。[名前および説明の入力] ページが表示されます。
[アドインの名前] ボックスにマネージ COM アドインの名前を入力します。
[アドインの説明] ボックスにマネージ COM アドインの説明を入力します。
ウィザードの [次へ] ボタンをクリックします。[アドイン オプションを選択します。] ページが表示されます。
[ホスト アプリケーションの読み込み時にアドインを読み込む] と [アドインがインストールされているコンピュータのすべてのユーザーがこのアドインを使用できるようにする] チェック ボックスをオンにします。
注 : これらのチェック ボックスをオンにすると、コンピュータのすべてのユーザーがマネージ COM アドインを使用できるようになりますが、[COM アドイン] ダイアログ ボックスにはマネージ COM アドインは表示されません。詳細については、「PRB: Visual Studio .NET Shared Add-in Is Not Displayed in Office COM Add-ins Dialog Box (Q316723)」を参照してください。
ウィザードの [次へ] ボタンをクリックします。[概要] ページが表示されます。
[完了] をクリックして、共有アドイン プロジェクトが作成されるのを待ちます。
共有アドイン プロジェクトを検証する
Visual Studio .NET ソリューション エクスプローラの内容を見ると (ソリューション エクスプローラが表示されていない場合は、[表示] メニューの [ソリューション エクスプローラ] をクリックします)、実際には 2 つのプロジェクトが作成されていることがわかります。マネージ COM アドイン機能を含む共有アドイン プロジェクトと、他のコンピュータにマネージ COM アドインを再配信するセットアップ プロジェクトです。
共有アドイン プロジェクトには、Extensibility.dll .NET アセンブリ (C:\Program Files\Microsoft Visual Studio .NET\Common7\IDE\PublicAssemblies\Extensibility.dll) と Office.dll .NET アセンブリ (C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\Office.dll) への参照が含まれています。これらのアセンブリは、共有アドインが実装する必要のある IDTExtensibility2 インターフェイスを参照する際、およびアプリケーションでマネージ COM アドインのユーザー用主要インターフェイスに使用するコマンド バーとコマンド バー コントロールを作成する際に必要となります。
共有アドイン プロジェクトには、マネージ COM アドインのアセンブリ メタデータを格納した AssemblyInfo.vb ファイルと、マネージ COM アドインのカスタム機能を含むことになる Connect.vb ファイルも含まれます。
セットアップ プロジェクトには、COM アドインを他のコンピュータにインストールして登録するために必要なファイルが含まれています。既定では、.NET Framework (dotnetfxredist_x86_enu.msm)、Office.dll .NET アセンブリ、および stdole.dll .NET アセンブリはセットアップ ファイルに含まれていませんが、マネージ COM アドインを機能させるためにユーザーのコンピュータに必要です。
注 : .NET Framework 再配布可能ファイルがインストールされていないコンピュータについては、Microsoft .NET Framework 再配布可能ファイルをダウンロードしてインストールする必要があります。これは、「Microsoft .NET Framework ダウンロード」 ページからダウンロードできます。.NET Framework 再配布可能ファイルがインストールされていないコンピュータでマネージ COM アドインを実行すると、インストールが必要であることを示すメッセージが表示されます。
共有アドイン プロジェクトのコードを検証する
Visual Studio .NET は、以下の開始コードを Connect.vb ファイルに作成します (Visual Basic® .NET を使用することと想定しています)。サンプル プログラム ファイルにある実際のコメント行は英語で書かれていますが、この記事の中では説明のために日本語で書かれています。
Imports Microsoft.Office.Core
Imports Extensibility
Imports System.Runtime.InteropServices
#Region " アドインのインストールとセットアップ情報について、この説明をお読みください。 "
' 実行時に、アドイン ウィザードによってアドインのレジストリが作成されます。
' 後で、以下の理由によりアドインを使用できなくなることがあります。
' 1) このプロジェクトを、最初に作成したコンピュータとは別のコンピュータに
' 移動した。
' 2) アドインを削除するかどうかをたずねるメッセージに対して [はい] を
' 選択した。
' 3) レジストリの破損。
' この場合は、共有アドイン プロジェクトを作成して、アドインを再登録する必要があります。
' これを実行するには、ソリューション エクスプローラでプロジェクトを右クリックし、
' [インストール] を選択します。
#End Region
<GuidAttribute("AC563A00-9E13-465F-B1A9-D51EA76C7110"), _
ProgIdAttribute("SharedAddInProject.Connect")> _
Public Class Connect
Implements Extensibility.IDTExtensibility2
Dim applicationObject As Object
Dim addInInstance As Object
Public Sub OnBeginShutdown(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnBeginShutdown
End Sub
Public Sub OnAddInsUpdate(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
End Sub
Public Sub OnStartupComplete(ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnStartupComplete
End Sub
Public Sub OnDisconnection(ByVal RemoveMode As _
Extensibility.ext_DisconnectMode, _
ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnDisconnection
End Sub
Public Sub OnConnection(ByVal application As Object, _
ByVal connectMode As Extensibility.ext_ConnectMode, _
ByVal addInInst As Object, _
ByRef custom As System.Array)
Implements Extensibility.IDTExtensibility2.OnConnection
applicationObject = application
addInInstance = addInInst
End Sub
End Class
このコードについて説明します。
- Imports ステートメントは、コード記述時のキーストローク量を最小限に抑えるために宣言します。たとえばクラス内で、
Microsoft.Office.Core.CommandBar
のようなコードを入力することもできますが、CommandBar
と入力する方がはるかに早くて簡単です。どの参照先アセンブリでも、別のオブジェクトが CommandBar タイプで宣言されることはまずないため、コードに不整合が発生することはありません。Imports ステートメントおよび名前空間の詳細については、「Understanding and Using Assemblies and Namespaces in .NET」を参照してください。
#Region…#End Region キーワードは、カスタムの縮小可能コード ブロックの位置を示す際に使用します。Visual Studio .NET 統合開発環境では、#Region キーワードの横のセレクタをクリックすることによって、コードを展開したり折りたたんで表示することができます。
- GuidAttribute 属性は、クラス ID (CLSID) を示す明示的な GUID (Globally Unique Identifier) を提供します。これはすべてのマネージ COM アドインに必要です。CLSID は Visual Studio .NET によって自動生成されます。
- ProgId 属性は、マネージ COM アドインを識別するための CLSID を人間が判読できるようにしたものです。すべてのマネージ COM アドインに必要です。このプログラム ID (ProgID) は、Visual Studio .NET によって共有アドイン プロジェクト名に基づいて生成されます。
- マネージ COM アドインは、Class…End Class キーワードの中で実装されます。
- コード
Implements Extensibility.IDTExtensibility2
は、Connect
クラスが、(Extensibility.dll アセンブリの) Extensibility 名前空間で設定されたとおりに、IDTExtensibility2 インターフェイスを実装することを示します。これは実質的に、Connect
クラスではすべての IDTExtensibility2 インターフェイス メソッドを実装する必要があることを意味します。このメソッドとは、OnBeginShutdown、OnAddInsUpdate、OnStartupComplete、OnDisconnection、および OnConnection です。 - applicationObject オブジェクト変数はホスト アプリケーションを表します。
- OnBeginShutdown メソッドは、環境終了時に呼び出されます。custom パラメータは、必要に応じて OnBeginShutdown メソッドに追加データを提供するために使用できる配列です。
- OnAddInsUpdate メソッドは、アドインのロード (読み込み) やアンロードなどで [COM アドイン] ダイアログ ボックスのアドイン一覧に変更があった場合に呼び出されます。custom パラメータは、必要に応じて OnAddInsUpdate メソッドに追加データを提供するために使用できる配列です。
- OnStartupComplete メソッドは、環境の起動が完了したときに呼び出されます。custom パラメータは、必要に応じて OnStartupComplete メソッドに追加データを提供するために使用できる配列です。
- OnDisconnection メソッドは、ユーザーがホスト アプリケーションを終了した場合など、マネージ COM アドインがアンロードされたときに呼び出されます。custom パラメータは、必要に応じて OnDisconnection メソッドに追加データを提供するために使用できる配列です。RemoveMode パラメータは、マネージ COM アドインがアンロードされた方法を示す ext_dm 定数です。ext_dm 定数は以下のいずれかの値になります。
- ext_dm_HostShutdown: マネージ COM アドインは、ホスト アプリケーションの終了によって接続解除された。
- ext_dm_UserClosed: マネージ COM アドインは、ユーザーまたは Automation コントローラによって接続解除された。
- OnConnection メソッドは、アドインが環境に読み込まれたときに呼び出されます。addInInst パラメータは、マネージ COM アドインのインスタンスを表すオブジェクトです。custom パラメータは、必要に応じて OnConnection メソッドに追加データを提供するために使用できる配列です。application パラメータはホスト アプリケーションを表します。connectMode パラメータは、マネージ COM アドインが読み込まれた方法を示す ext_cm 定数です。ext_cm 定数は以下のいずれかの値になります。
- ext_cm_CommandLine: マネージ COM アドインは、コマンド行から接続された。
- ext_cm_External: マネージ COM アドインは、外部アプリケーションによって Automation で接続された。
- ext_cm_Startup: マネージ COM アドインは、アプリケーション起動時にホスト アプリケーションによって開始された。この動作は、レジストリの設定で制御します。
- OnConnection メソッドでは、applicationObject オブジェクト変数がホスト アプリケーションに初期化され、addInInstance オブジェクト変数がマネージ COM アドインのインスタンスに初期化されます。
IDTExtensibility2 インターフェイスのさまざまなメンバと設定については、「Working with the IDTExtensibility2 Event Procedures」参照してください。
セットアップ プロジェクトの設定の検証
共有アドイン プロジェクトのコードを検証したので、次はセットアップ プロジェクトの設定を調べます。当面関係するものは、セットアップ プロジェクトのレジストリ設定のみです。レジストリ設定を表示するには以下の手順を実行します。
ソリューション エクスプローラでセットアップ プロジェクトのルート ノードを右クリックし、[表示] をポイントして [レジストリ] をクリックします。
左側のペインで [KEY_LOCAL_MACHINE]、[Software]、[Microsoft] の順にダブルクリックします。
Microsoft Visio® のレジストリ エントリを表示するには、[Visio]、[Addins] の順にダブルクリックし、共有アドイン プロジェクトの ProgID に該当する名前をクリックします。
- 他の Office アプリケーションのレジストリ エントリを表示するには、[Office] をダブルクリックし、[Access]、[Excel]、[FrontPage]、[MS Project]、[Outlook]、[PowerPoint]、[Word] のいずれかをダブルクリックします。該当する [Addins] フォルダをダブルクリックし、共有アドイン プロジェクトの ProgID に該当する名前をクリックします。
共有アドイン プロジェクトの ProgID 名に該当する各フォルダには、以下の 3 つのプロパティがあります。
- Description プロパティ: このプロパティは、マネージ COM アドインの説明を含む String 値です。
- FriendlyName プロパティ: このプロパティは、マネージ COM アドインの表示名を含む String 値です。
- LoadBehavior プロパティ: このプロパティは、マネージ COM アドインの読み込み方法を示す DWORD 値です。値は、0、1、2、8、および 16 を組み合わせたもの (ビット単位の組合せ) となります。
- 0 (Disconnected): マネージ COM アドインは接続されていない。
- 1 (Connected): マネージ COM アドインは接続されている。
- 2 (BootLoad): マネージ COM アドインは、ホスト アプリケーション起動時に読み込まれて接続される。
- 8 (DemandLoad): マネージ COM アドインは、ホスト アプリケーションが必要とするときに読み込まれて接続される (ユーザーが、マネージ COM アドインの機能を使用するボタンをクリックした場合など)。
- 16 (ConnectFirstTime): マネージ COM アドインは、アドインを登録後にユーザーが初めてホスト アプリケーションを実行したときに、読み込まれて接続される。
- Visual Studio .NET では、1 (マネージ COM アドイン接続) と 2 (マネージ COM アドインは、ホスト アプリケーション起動時に読み込まれて接続) の組合せである 3 が LoadBehavior プロパティの既定値となります。
これらのプロパティを変更するには、目的のプロパティを右クリックし、[プロパティ ウィンドウ] をクリックして [プロパティ] ウィンドウでボックス内の値を変更します。
共有アドインのコンパイルと配布
共有アドイン プロジェクトを作成したコンピュータ上でのテスト目的でマネージ COM アドインをコンパイルするには、ソリューション エクスプローラで、共有アドイン プロジェクトのルート ノードを右クリックして [ビルド] をクリックします。プロジェクトのビルドにエラーがなければ、対応する Office アプリケーションを起動してマネージ COM アドインを使用できます。ただし、Connect.vb ファイルのコードをカスタマイズしてあることが前提になります。
注 : マクロのセキュリティ レベルが [高] ([ツール] メニューの [マクロ] をポイントし、[セキュリティ] をクリックして [セキュリティ レベル] タブをクリック) に設定されている場合、共有マネージ COM はデジタル署名されていても正しく機能しません。マネージ COM アドインが正しく機能しない場合は、テスト コンピュータのマクロ セキュリティ レベルを [中] にして、やり直してください。
共有アドイン プロジェクトを作成したものとは別のコンピュータで使用するために、マネージ COM アドインをコンパイルするには、追加の手順を実行してコードを保護する必要があります。ユーザーに不必要にセキュリティ設定を [高] から [中] に下げさせてはいけません。コンピュータのセキュリティが低下し、ユーザーの組織のセキュリティ ポリシーが崩れることになります。共有アドイン プロジェクトを他のコンピュータで使用するための安全対策については、Siew-Moi Khor 氏による以下の 2 つの記事を参照してください。
- 「Deployment of Managed COM Add-Ins in Office XP」
- 「Using the COM Add-in Shim Solution to Deploy Managed COM Add-ins in Office XP」
注 : .NET Framework またはセットアップ プロジェクトの他の必須アセンブリがユーザーのコンピュータにインストールされていないと、.msi ファイルが正しくインストールされない場合があります。また、.msi ファイルのみを配布してインストールすることはできません。Visual Studio .NET によって生成された .msi ファイルと同じフォルダにある他のサポート ファイルも同時に配布する必要があります。
例: Microsoft PowerPoint アドインを作成する
Visual Studio .NET によって生成される既定コードの全般を説明したので、次はコードをカスタマイズして Office マネージ COM アドインを作成します。このマネージ COM アドインは Microsoft PowerPoint® 2002 用に作成されたもので、新しいプレゼンテーションを作成し、ユーザーが選択したグラフィック ファイル (BMP、GIF、または JPEG ファイル) ごとのプレゼンテーションに 1 つのスライドを追加します。各スライドには、ユーザーが選択したグラフィック ファイルが 1 つが含まれます。
マネージ COM アドインを作成するには、「Microsoft Visual Studio .NET を使用してマネージ COM アドインを作成する」のセクションで説明した手順に従って以下の手順を実行します。
手順 5 で 「PowerPointAddIn」 と入力します。
手順 9 で [Microsoft PowerPoint] チェック ボックスをオンにし、他のチェック ボックスをすべてオフにします。
手順 11 で 「グラフィック ファイルからスライドを作成」 と入力します。
手順 12 で 「グラフィック ファイルから一連のスライドを作成します」 と入力します。
マネージ COM アドイン プロジェクトを作成したら、[プロジェクト] メニューで [参照の追加] をクリックします。[参照の追加] ダイアログ ボックスが表示されます。
[COM] タブで [Microsoft PowerPoint 10.0 Object Library] をダブルクリックし、[OK] をクリックします。
開始コードを次のように変更します。以下のコードでは、
*** ここからカスタム コード ***
と*** ここまでカスタム コード ***
というコメントを追加してあるので、どのコードが新しいものがすぐにわかるようになっています。Imports Microsoft.Office.Core Imports Extensibility Imports System.Runtime.InteropServices ' *** ここからカスタム コード *** Imports Microsoft.Office.Core.MsoControlType Imports Microsoft.Office.Core.MsoButtonStyle Imports Microsoft.Office.Core.MsoFileDialogType Imports Microsoft.Office.Core.MsoFileDialogView Imports PowerPoint.PpSlideLayout Imports Microsoft.Office.Core.MsoTriState ' *** ここまでカスタム コード *** ' アドインのインストールと設定情報に関する説明をここに挿入します。 <GuidAttribute("B200F445-A957-4AAC-8F4D-D51F5B14CBA1"), _ ProgIdAttribute("PowerPointAddIn.Connect")> _ Public Class Connect Implements Extensibility.IDTExtensibility2 Dim applicationObject As Object Dim addInInstance As Object ' *** ここからカスタム コード *** Dim WithEvents objCommandBarButton As CommandBarButton ' *** ここまでカスタム コード *** Public Sub OnBeginShutdown(ByRef custom As System.Array) _ Implements Extensibility.IDTExtensibility2.OnBeginShutdown ' *** ここからカスタム コード *** objCommandBarButton.Delete() ' *** ここまでカスタム コード *** End Sub Public Sub OnAddInsUpdate(ByRef custom As System.Array) _ Implements Extensibility.IDTExtensibility2.OnAddInsUpdate ' *** ここからカスタム コード *** ' このメソッドで必要なコードはありません。 ' *** ここまでカスタム コード *** End Sub Public Sub OnStartupComplete(ByRef custom As System.Array) _ Implements Extensibility.IDTExtensibility2.OnStartupComplete ' *** ここからカスタム コード *** Dim objCommandBars As CommandBars Dim objCommandBar As CommandBar Dim objCommandBarControl As CommandBarControl ' [ツール] メニューにメニュー コマンドを作成します。 objCommandBars = applicationObject.CommandBars objCommandBar = objCommandBars.Item("Tools") ' メニュー コマンドがまだ存在していないことを確認します。 For Each objCommandBarControl In objCommandBar.Controls If objCommandBarControl.Caption = "グラフィックからスライドを作成..." Then objCommandBar.Controls.Item("グラフィックからスライドを作成...").Delete() End If Next objCommandBarControl objCommandBarButton = objCommandBar.Controls.Add(msoControlButton) With objCommandBarButton .Caption = "グラフィックからスライドを新規に作成..." .Style = msoButtonCaption .Tag = "グラフィックからスライドを作成..." .OnAction = "!<PowerPointAddIn.Connect>" .Visible = True End With ' *** ここまでカスタム コード *** End Sub Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, _ ByRef custom As System.Array) _ Implements Extensibility.IDTExtensibility2.OnDisconnection ' *** ここからカスタム コード *** On Error Resume Next ' ホスト アプリケーションの終了方法にかかわらず、 ' 共有アドインを切断します。 If RemoveMode <> Extensibility.ext_DisconnectMode.ext_dm_HostShutdown Then _ Call OnBeginShutdown(custom) applicationObject = Nothing ' *** ここまでカスタム コード *** End Sub Public Sub OnConnection(ByVal application As Object, _ ByVal connectMode As Extensibility.ext_ConnectMode, _ ByVal addInInst As Object, ByRef custom As System.Array) _ Implements Extensibility.IDTExtensibility2.OnConnection applicationObject = application addInInstance = addInInst ' *** ここからカスタム コード *** ' ホスト アプリケーションの起動方法にかかわらず、共有アドインを接続します。 If (connectMode <> Extensibility.ext_ConnectMode.ext_cm_Startup) Then _ Call OnStartupComplete(custom) ' *** ここまでカスタム コード *** End Sub ' *** ここからカスタム コード *** Private Sub objCommandBarButton_Click(ByVal Ctrl As CommandBarButton, _ ByRef CancelDefault As Boolean) Handles objCommandBarButton.Click ' ファイルを開くダイアログ ボックスを作成し、 ' ユーザーが選択したファイルを転送します。 Dim objOpenFileDialog As FileDialog = _ applicationObject.FileDialog(msoFileDialogOpen) Dim objSelectedItem As Object Dim objPresentation As PowerPoint.Presentation With objOpenFileDialog .AllowMultiSelect = True .Title = "グラフィック ファイルの選択" ' 以前のフィルタをクリアします。ビットマップ、GIF、および JPEG ' ファイルのみを選択できるようにします。 .Filters.Clear() .Filters.Add("選択したグラフィック ファイル", _ "*.bmp;*.gif;*.jpg") .InitialView = msoFileDialogViewThumbnail ' "-1" は、ユーザーが [開く] ボタンをクリックしたことを意味します。 If .Show = -1 Then objPresentation = applicationObject.Presentations.Add For Each objSelectedItem In .SelectedItems ' 選択されたグラフィック ファイルごとにスライドを 1 つ追加します。 objPresentation.Slides.Add(1, ppLayoutBlank). _ Shapes.AddPicture(objSelectedItem, msoFalse, msoTrue, 0, 0) Next objSelectedItem End If End With End Sub ' *** ここまでカスタム コード *** End Class
[ビルド] メニューの [ソリューションのビルド] をクリックします。
Microsoft PowerPoint 2002 を起動します。[ツール] メニューの [グラフィックからスライドを新規に作成] をクリックし、グラフィック ファイルを 1 つ以上選択して [開く] をクリックします。
PowerPoint プレゼンテーションが新しく作成され、選択したグラフィック ファイルごとにスライドが 1 つプレゼンテーションに追加されます。各スライドには、選択したグラフィック ファイルが 1 つ含まれます。
詳細情報
- 「[HOW TO] Visual Basic .NET を使用して Office COM アドインを作成する方法」
- 「[HOW TO] Visual C# .NET を使用して Office COM アドインを作成する方法」
Paul Cornell は、MSDNR Online Office Developer Center および Office 開発者向けドキュメント チームに所属しています。Paul は、Office Assistance Center のコラム「Office Power User Corner」も担当しています。プライベートは、妻と 2 人の娘と共に過ごしています。