相互運用機能

.NET アプリケーションは、COM ライブラリ、ActiveX コントロール、およびネイティブ (Win32) DLL などのアンマネージ コードとどのように接続するのでしょうか。このセクションには、使用する必要のあるアンマネージ コンポーネントに .NET コードから接続するときに参考となるリソースへのリンクがあります。相互運用機能クラスには、次のようなクラスがあります。

名前空間

説明

System.Runtime.InteropServices

COM 相互運用機能およびプラットフォーム呼び出しサービスをサポートする広幅なメンバを提供します。

System.Runtime.InteropServices.CustomMarshalers

.NET インフラストラクチャをサポートします。コードから直接的に使用されることは意図されていません。

System.Runtime.InteropServices.Expando

メンバの追加あるいは除去によって、オブジェクトを変更することを可能にする IExpando インターフェイスを含みます。

    

重要な要素

An Overview of Managed/Unmanaged Code Interoperability (英語)

この記事では、マネージ コードとアンマネージ コードの相互運用に関する基本的事項を説明します。また、マネージ コードからアンマネージ API をアクセスおよびラップする場合や、マネージ API をアンマネージである呼び出し元に公開する場合のガイドラインと一般的な方法が示されています。さらに、セキュリティと信頼性の考慮事項、パフォーマンス データ、および開発プロセスの一般的な方法にも注目しています。  

P/Invoke Signature and Structure Samples (英語)

このプラットフォーム呼び出しのサンプルは、アンマネージ ライブラリからエクスポートされた関数を呼び出す方法を説明します。たとえば、さまざまな型の宣言方法、使用可能な属性を使用して既定動作を変更する方法、必要な場合には Marshal クラスのメソッドを使用する方法、およびガベージ コレクションやスレッド化が結果に影響する状況などが示されています。   

P/Invoke Signature and Structure Library for Win32 (英語)

Win32 API が .NET Framework によって公開されていない場合は、その API にアクセスする相互運用ラッパーを手動で作成する必要があります。このようなラッパーの作成は、難しく、間違いが起こりやすい作業でもあります。このサンプルには、多くの一般的な Win32API に対する C# での定義、および関連のデータ構造が含まれています。すべての Win32 API が含まれているわけではありません。また、#define 定数はすべて省略されています。これは、やや複雑な半自動プロセスで作成されています。これらの定義は、すべてアンセーフ C# であるため、定義を使用する前にその影響を理解しておく必要があります。メソッドは、動作が保障されている最小の共通型で定義されているため、シグネチャを検査しただけでは、その API がどのデータ型を要求しているかを正確には把握できません。これらの API の呼び出しの詳細については、Win32 API を参照してください。   

プラットフォーム呼び出しチュートリアル

このチュートリアルでは、C# からアンマネージ DLL 関数を呼び出すために必要となる作業を説明します。このチュートリアルで説明されている属性により、このような関数を呼び出し、データ型を正確にマーシャルすることができます。  

Microsoft Win32 と Microsoft .NET Framework API との対応

この記事では、Microsoft Win32 関数と同様の機能性を提供する Microsoft .NET Framework バージョン 1.0、あるいは 1.1 API を特定しています。リストされた各 Win32 関数には、1 つあるいは複数の該当する .NET Framework API が示されています。この記事は、Microsoft .NET Framework に基づくアプリケーション、あるいはライブラリを作成する熟練した Win32 開発者を対象読者としていますが、Win32 関数に相当するマネージ関数を探す場合にも役立ちます。   

値型に対する既定のマーシャリング
整数や浮動小数点数などの多くの値型は blittable 型であるため、マーシャリングの必要はありません。他の非 blittable 型の場合は、マネージ メモリ内とアンマネージ メモリ内でその表現が異なるため、マーシャリングが必要です。さらに他の型については、相互運用の境界を越える明示的な書式指定が必要です。

ここでは、書式指定された値型に関する次の情報が提供されます。


構造体の受け渡し

多くのアンマネージ関数では、パラメータとして、構造体のメンバ (Visual Basic ではユーザー定義型) またはマネージ コードで定義されたクラスのメンバが渡されることを期待しています。プラットフォーム呼び出しを使用して構造体、あるいはクラスをアンマネージ コードに渡す場合は、元のレイアウトや配置を保持するための追加情報を提供する必要があります。このトピックでは、書式指定された型を定義するために使用する StructLayoutAttribute 属性について説明します。マネージ構造体やマネージ クラスの場合は、LayoutKind 列挙体によって提供される想定されたレイアウト動作から選択できます。   

プラットフォーム呼び出しによるデータのマーシャリング

このセクションでは、アンマネージ ライブラリによってエクスポートされた関数に引数を渡したり、その関数から戻り値を受け取ったりするマネージ関数プロトタイプの作成方法をサンプルで紹介します。このサンプルでは、さらに、いつ -->MarshalAsAttribute属性と Marshal クラスを使用して、明示的にデータをマーシャリングする必要があるかについても説明します。  

Calling Win32 DLLs in C# with P/Invoke (英語)

このコラムでは、Windows API 関数を呼び出すための P/Invoke の実用的な使用方法、およびそのアプリケーションについて説明します。  

Beyond (COM) Add Reference: Has Anyone Seen the Bridge? (英語)
COM 相互運用機能と Microsoft .NET Framework 間のブリッジが必要となる理由、およびその実装方法を説明します。  

Using the .NET Framework SDK Interoperability Tools (英語)

.NET Framework SDK 相互運用機能ツールを活用する方法を説明します。TLBIMP、SN、TLBEXP、および REGASM などの高度な使用方法も説明されています。COM の参照を追加するウィザード以上の機能が必要である場合は、これらのツールを理解する必要があります。  


Compact Framework

Microsoft .NET Compact Framework の P/Invoke とマーシャリング入門

.NET Compact Framework のプラットフォーム呼び出し (P/Invoke) 機能の使用方法を説明します。  

Microsoft .NET Compact Framework での高度な P/Invoke

.NET Compact Framework での高度な相互運用機能について説明します。複合型のマーシャリング、および構造体内の文字列のマーシャリングなどが含まれます。  

Marshalling Types During Platform Invoke (P/Invoke) on the Microsoft .NET Compact Framework (英語)

.NET Compact Framework を使用して、マネージ コードとアンマネージ コードの間でデータをマーシャリングする方法を説明します。  

Creating a P/Invoke Library (英語)

このサンプルは、P/Invoke のコレクションの提供、およびそれらのアプリケーションを試すテスト プロシージャの提供を目的としています。このサンプルでは、一般的に必要とされるいくつかの P/Invoke 関数、および列挙とさまざまなテスト プロシージャの呼び出しを処理するクラスが提供されます。このクラスを Form で使用することにより、ユーザーが選択リストからテストを選択して実行できるようになります。   

P/Invoke Serial APIs in the Compact Framework (英語)

この記事は、.NET Compact Framework でマネージ コードからシリアル通信を制御する場合に課題となる具体的な点について説明します。設計原則、移植可能コード、および P/Invoke の実装が説明されています。   

Asynchronous Callbacks from Native Win32 Code (英語)

.NET Compact Framework ニュースグループで、ネイティブ Win32 DLL にデリゲートを渡し、アンマネージ関数がその呼び出し元に報告を戻そうとした後に、P/Invoke からマネージ コードに戻る非同期コールバックとして使用することに関する質問がありました。しかし、アンマネージ コードにデリゲートを渡すことは、.NET Compact Framework ではサポートされていません。代替手段として、.NET Compact Framework には、MessageWindow クラスが含まれています。このクラスを使用すれば、Windows メッセージをアンマネージ コードからマネージ コードに渡すことができます。MessageWindow の機能性は、Windows メッセージをマネージ コードに渡す必要がある場合にとても役立ちます。しかし、特定のソリューションでは、MessageWindow クラスの使用が機能せず、これが、本当の意味でのデリゲートの代替とならないことがあります。多少のコーディング作業は必要ですが、イベント ハンドラ メカニズムを設定し、それを、アンマネージ コードからマネージ コードにコールバックする本当のデリゲートが存在する場合と同じように、マネージ アプリケーション開発者に公開することが可能です。この記事では、このメカニズムの詳細が説明されています。  

暗号化

Extend .NET Cryptography with CAPICOM and P/Invoke (英語)

Microsoft .NET Framework バージョン 1.1 に付属の暗号化機能の補完として、COM 相互運用機能および CryptoAPI ネイティブ ライブラリへの P/Invoke を使用する方法を説明します。  

その他の記事

API 呼び出しを .NET Framework クラスに切り替える

Microsoft .NET Framework において、既存の Win32 API を置き換え、Visual Basic 6.0 では 1 つあるいは複数の呼び出しが必要となる場合もあった同じ処理を実現できるようにします。   

Excel, Exchange, and C# (英語)

Eric Gunnerson が、Outlook、Excel、および C# を使用して、短期あるいは長期いずれのプロジェクトにも使用できる、読みやすいレイアウトのオリジナル カレンダーを作成する方法を説明します。  

Migrating Native Code to the .NET Common Language Runtime (英語)

Microsoft .NET ランタイムによって、ネイティブ Win32 ベース、C、C++、Visual Basic 6.0 ベース、あるいは COM コード ベースを、.NET 対応言語で作成されたマネージ コンポーネントと共存させる方法を説明します。  

Get Ready for Microsoft .NET by Using Wrappers to Interact with COM-based Applications (英語)

ラッパーの役割を明らかにし、さらに .NET コンポーネントが COM+ トランザクションに参加する他の方法も説明します。COM と .NET の相互運用に関するチュートリアルとして、この記事では、ActiveX コンテナで .NET コントロールをホストする方法、および .NET コンテナで ActiveX コントロールをホストする方法も説明されています。   

Windows Hooks in the .NET Framework (英語)

Dino Esposito が、.NET アプリケーションの観点から Windows フックを説明します。また、そのための .NET Framework ラッパー クラスの作成方法についても説明されています。   

プライマリ相互運用アセンブリ (PIA)

既存の COM 型のセットを記述するメタデータ作成し、Microsoft .NET Framework 共通言語ランタイムで相互運用するプロセスを説明します。  

.NET からの COM コンポーネントの呼び出し

Visual Basic から Visual Basic .NET に開発の移行を始めるときに、移行方針の重要な部分として役立つ具体的な技法を説明します。.NET ベース コードから COM コンポーネントを呼び出す機能が重点的に説明されています。   

Calling a .NET Component from a COM Component (英語)

Microsoft Windows 2003 サーバーを COM クライアントから呼び出す際に必要となる技法を説明し、複合的なアプリケーションを COM から .NET の 1 つのコンポーネントに 1 回で移行する方法を示します。  

.NET における Enterprise Services (COM+) について

Microsoft .NET と COM+ サービスの統合の背後にある技術的な詳細を示し、マネージ コードから利用できるサービスについて解説します。    

.NET で COM+ サービスを使用する

新しい .NET ベース コンポーネントを既存の COM および COM+ アプリケーションに追加し、アプリケーション内でそれらのコンポーネントが共に機能できるようにします。この技術は、トランザクションに参加する、ロール ベースのセキュリティを利用する、あるいはキューと対話するなどの機能を持つ .NET アプリケーションを開発する際に役立ちます。   

Microsoft .NET および Windows XP COM+ と SOAP との統合

Microsoft Windows XP および .NET Framework を使用して、既存の COM+ アプリケーションを SOAP 経由で公開する方法を説明します。この資料に付属するダウンロード可能なアプリケーションを使用し、この資料の説明に従って、自身のコンピュータで同じ操作を実行できます。  

System.Management Lets You Take Advantage of WMI APIs within Managed Code (英語)

.NET Framework および Visual Studio .NET の環境で利用可能な WMI 関連の新機能を紹介し、Visual Studio.NET のサーバー エクスプローラの管理拡張機能について詳しく解説します。   

Page view tracker