.NET Framework ドキュメントの本セクションでは、アセンブリの読み込み、アセンブリ参照の解決、およびネイティブ イメージの生成を使用したアプリケーションのパフォーマンス向上のためのガイドラインなど、.NET Framework アプリケーションを配置するための重要な情報を提供します。 このセクションの内容 ランタイムがアセンブリを検索する方法 - 共通言語ランタイムが、アプリケーションを構成するアセンブリを検出し、バインドする方法について説明します。 アセンブリの読み込みのベスト プラクティス - InvalidCastException、MissingMethodException およびその他のエラーの原因となることがある型 ID の問題を回避する方法について説明します。 関連項目 開発ガイド
関数は .def ファイルか __declspec(dllexport) キーワードでエクスポートできます。 自分の DLL に最適な方法を判断するとき、以下の質問について検討すると役立ちます。 エクスポートする関数は後で増える予定ですか。 DLL は、再構築できるアプリケーションでのみ利用されますか、それとも、再構築できないアプリケーション、たとえば、サード パーティ製のアプリケーションで利用されますか。 .def ファイル使用の利点と欠点 .def ファイルで関数をエクスポートすると、エクスポートの順序を制御できます。 エクスポートした関数を DLL に追加するとき、エクスポートされた他の関数より上の順序値を割り当てることができます。 そのとき、暗黙的なリンクを利用するアプリケーションでは、新しい関数が含まれるインポート ライブラリを再リンクする必要がありません。 これは、さまざまなア
.DLL のレイアウトは .exe ファイルとよく似ていますが、重要な相違点が 1 つあります。DLL ファイルには、エクスポート テーブルが含まれています。 エクスポート テーブルには、DLL が別の実行形式に対してエクスポートする各関数の名前が含まれています。 これらの関数は、DLL のエントリ ポイントです。エクスポート テーブルに記述されたエクスポート関数のみが、別の実行形式にアクセスできます。 DLL 内のその他の関数は、その DLL でしか使えません。 DLL のエクスポート テーブルを表示するには、DUMPBIN ツールに /EXPORTS オプションを指定します。 DLL から関数をエクスポートする方法には、次の 2 つがあります。 モジュール定義 (.def) ファイルを作成し、DLL をビルドするときに .def ファイルを使用します。 名前ではなく序数で DLL から
モジュール定義 (.def) ファイルは、リンクするプログラムに関するエクスポート、属性、その他の情報をリンカーに提供します。 .def ファイルは、DLL をビルドするときに最も役立ちます。 モジュール定義ステートメントの代わりに使用できる MSVC リンカー オプションがあるため、通常、.def ファイルは必要ありません。 エクスポートされる関数を指定する方法として、__declspec(dllexport) を使用することもできます。 リンカー フェーズの間に、/DEF (モジュール定義ファイルの指定) リンカー オプションを使用して、.def ファイルを呼び出すことができます。 エクスポートのない .exe ファイルを作成する場合、.def ファイルを使用すると、出力ファイルのサイズが大きくなり、読み込みが遅くなります。 例については、「DEF ファイルを使った DLL からのエク
モジュール定義または DEF ファイル (*.def) は、DLL のさまざまな属性を記述する 1 つ以上のモジュール文が含まれるテキスト ファイルです。 DLL の関数をエクスポートする __declspec(dllexport) キーワードを使わない場合は、DLL に DEF ファイルが必要です。 DEF ファイルには、最低限、以下のモジュール定義文を記述する必要があります。 ファイルの先頭には、必ず LIBRARY 文を記述します。 この文は、DEF ファイルが DLL に所属していることを識別します。 LIBRARY 文の引数には、DLL の名前を指定します。 リンカーは、この名前を DLL のインポート ライブラリに配置します。 EXPORTS 文には、DLL のエクスポート関数の名前と、オプションで序数値を指定します。 序数値を関数に割り当てるには、アット マーク (@) と数
例 次の例では、マネージド String クラスの内容をアンマネージド メモリに変換し、完了したらアンマネージ メモリを破棄する方法を示します。 using namespace System; using namespace System::Runtime::InteropServices; #include <iostream> // for printf int main() { // Create a managed string. String^ managedString = "Hello unmanaged world (from the managed world)."; // Marshal the managed string to unmanaged memory. char* stringPointer = (char*) Marshal::StringToHGlob
他の .NET 言語とは異なり、Visual C++ には相互運用性サポートが備えられています。相互運用性サポートを使用すると、managed、unmanaged プラグマにより、マネージド コードとアンマネージド コードは同じアプリケーション内、また同じファイルでも共存できるようになります。 これにより、Visual C++ 開発者は、他のアプリケーションの動作を妨げることなく、既存の Visual C++ アプリケーションに .NET 機能を統合できます。 また、dllexport、dllimport を使用して、マネージド コンパイル単位からアンマネージド 関数を呼び出すこともできます。 関数パラメーターのマーシャリング方法を指定したり、DllImportAttribute を明示的に呼び出す際に指定できるその他の詳細設定を行ったりする必要がない場合は、暗黙の PInvoke を使用
このトピックでは、C++ Interop を使って ANSI 文字列を渡す方法について説明しますが、.NET Framework の String は文字列を Unicode 形式で表すため、ANSI への変換は追加手順となります。 他の文字列型との相互運用については、次のトピックを参照してください。 方法: C++ Interop を使用して Unicode 文字列をマーシャリングする 方法: C++ Interop を使用して COM 文字列をマーシャリングする managed、unmanaged #pragma ディレクティブを使用して、同じファイルにマネージド関数とアンマネージド関数を実装する方法を次のコード例に示します。これらの関数は、別々のファイルで定義されている場合でも同じ方法で相互運用されます。 アンマネージド関数のみを含むファイルは /clr (共通言語ランタイムのコンパ
String オブジェクトの文字にアクセスして、wchar_t* 文字列を受け取るアンマネージド関数に対する高パフォーマンスの呼び出しを行うことができます。 このメソッドにより、String オブジェクトの最初の文字への内部ポインターが生成されます。 このポインターは直接操作することも、固定して通常の wchar_t を必要とする関数に渡すこともできます。 例 PtrToStringChars を指定すると、内部ポインターである Char (別名 byref) が返されます。 そのため、ガベージ コレクションの対象になります。 ネイティブ関数に渡す場合を除き、このポインターを固定する必要はありません。 次のコードについて考えてみましょう。 ppchar は内部ポインターであるため固定は必要なく、そのポインターが指す文字列がガベージ コレクターによって移動されると、ppchar も更新されま
各言語のレーティングを2019年9月と比べると、C++が1.48ポイント増と全言語で最も上昇幅が大きい。TIOBE SoftwareのCEOであるポール・ジャンセン氏は、新しい「C++20」標準の登場がこのような上昇をもたらした主な原因の一つかもしれないと述べている。「includeメカニズム」に取って代わると予想される新しいモジュール機能が、レーティング上昇に特に寄与したとの見方も示している。 C++は、2003年8月に同言語として過去最高の17.53%のレーティングを獲得し、2003年の「今年のプログラミング言語」(TIOBEインデックスのレーティングの年間上昇幅が最大だった言語)となった。だが、その後はレーティングが下降し、2005年以降は10%未満となり、2017年には過去最低の4.55%にまで落ち込んでいた。 JavaやRustはどうなった? 関連記事 「Rust」はなぜ人気があ
今回、バージョン1.0として一般提供を開始したC++拡張機能を利用することで、IntelliSenseスマートコード補完、デバッグ、リファクタリング、コードナビゲーションといったC++開発者向けのさまざまな機能を、Visual Studio Code上で利用できるようになる。 これらの機能は、さまざまなプラットフォーム、アーキテクチャ、コンパイラで利用可能なので、クロスコンパイルやリモート開発にも役立つ。 編集機能としては、IntelliSenseによるコード補完、パラメーター情報、クイック情報、メンバーリスト、すべての参照を検索、定義/宣言への移動、ピーク定義/宣言に対応したコードナビゲーション、シンボルの名前変更、コードのフォーマット、セマンティックのカラー化、Doxygenコメントドキュメントに対応している。 デバッガでは、ブレークポイントの設定、監視変数の設定、プログラムのステップ
この項目では、プログラミングにおける絶対値関数について説明しています。吸光度 (absorbance)については「吸光度」を、その他の用法については「ABS」をご覧ください。 absは、多くのプログラミング言語において引数の絶対値 (absolute value) を返す関数である。言語によってabs, Abs, ABSなどと大文字小文字に揺れがあったり、多少の修飾辞を伴っていたりする場合もある。例えばFortranの場合、引数の型によってABS, IABSなど、異なる名前の関数が用意されている。
using 宣言を使用すると、using 宣言がある宣言リージョンに名前が導入されます。 構文 using [typename] nested-name-specifier unqualified-id ; using declarator-list ; パラメーター nested-name-specifier スコープ解決演算子で終わる名前空間、クラス、または列挙名およびスコープ解決演算子のシーケンス。 単一のスコープ解決演算子を使用して、グローバル名前空間から名前を導入できます。 キーワード typename は省略可能であり、基底クラスからクラス テンプレートに導入された場合に依存名を解決するために使用できます。 unqualified-id 修飾されていない id-expression。これは、識別子、オーバーロードされた演算子名、ユーザー定義のリテラル演算子または変換関数、クラス
Microsoft Foundation Classes (MFC) は Win32 上の C++ オブジェクト指向ラッパーを提供し、ネイティブ デスクトップ アプリケーションの迅速な開発を可能にします。 Active Template Library (ATL) は COM 開発を簡単にするラッパー ライブラリで、ActiveX コントロールを作成するためによく使用されます。 MFC や ATL プログラムは Visual Studio Community エディションか、それ以上のエディションで作成できます。 Express Edition は、MFC や ATL をサポートしません。 Visual Studio 2015 では、Visual C++ はオプションのコンポーネントです。また、MFC および ATL コンポーネントは Visual C++ のオプションのサブコンポーネント
Active Template Library (ATL) は、小さくて高速のコンポーネント オブジェクト モデル (COM) オブジェクトを作成できる、テンプレートに基づく C++ クラスのセットです。 ストックの実装、デュアル インターフェイス、標準 COM 列挙子インターフェイス、接続ポイント、ティアオフ インターフェイス、ActiveX コントロールなど、COM の重要な機能が特別にサポートされています。 ATL プログラミングを多用する場合は、COM プログラミングが簡単になるように設計されている COM と .NET の属性について、さらに詳しく学習する必要があります。 詳しくは、Attributed Programming (属性付きプログラミング) に関するページをご覧ください。 (COM および .NET の属性を、C++ 標準の [[attribute]] 機能と混同し
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く