
C++ module support has arrived in Visual Studio! Grab the latest Visual Studio Preview if you want to try it out. C++ modules can help you compartmentalize your code, speed up build times, and they work seamlessly, side-by-side with your existing code. This preview only supports C++ modules in the IDE for MSBuild projects. While the MSVC toolset is supported by any build system, Visual Studio’s ID
Introduction In this update, we continue the tradition of bucketing bugs into helpful categories for you all to filter through along with even more notes from the compiler team as to what, exactly, was fixed. This blog is also complemented by the recent Pure Virtual C++ pre-conference talk by RanDair Porter; so please check out RanDair's talk, "MSVC C++23 Conformance", if you have not already to g
この記事では、C++/CLI でプロパティを使用する方法について説明します。 基本的な性質 基本プロパティ (単にプライベート データ メンバーを割り当て、取得するだけのプロパティ) の場合、get アクセサー関数と set アクセサー関数を明示的に定義する必要はありません。プロパティのデータ型だけを指定すると、関数がコンパイラによって自動的に提供されるためです。 次のコードは、基本プロパティを示しています。 // SimpleProperties.cpp // compile with: /clr using namespace System; ref class C { public: property int Size; }; int main() { C^ c = gcnew C; c->Size = 111; Console::WriteLine("c->Size = {0}",
外部のコンポーネント(通常はDLLファイル)などを利用して.NETでアプリケーションを作成する場合、アプリケーション本体(EXEファイル)の実行には当然ながらそれらのDLLファイルが必要になる。しかしアプリケーションをユーザーに配布する場合などでは、ファイルの数は少ない(できれば1つのEXEファイルのみの)方が扱いやすい。 米Microsoftが無償で提供しているツール「ILMerge」を利用すれば、EXEファイルと、その実行に必要な複数のDLLファイルを1つのEXEファイルにまとめることが可能だ(正確には、ILMergeは複数のアセンブリを1つのアセンブリにマージする)。 複数のファイルを1つにまとめる「ILMerge」 ILMergeは次のページからダウンロードできる。このページには.NET Framework 2.0用と1.1用のインストール・パッケージ(.msiファイル)が用意され
外部シンボル "symbol" は未解決です コンパイルされたコードは、"シンボル" への参照または呼び出しを行います。 シンボルは、リンカーによって検索されるライブラリまたはオブジェクト ファイルで定義されていません。 このエラー メッセージの後に、致命的なエラー LNK1120 が発生します。 エラー LNK1120 を修正するには、最初に LNK2001 と LNK2019 のエラーをすべて修正する必要があります。 LNK2001 エラーを取得するには、さまざまな方法があります。 これらはすべて、リンカーによって "解決" されなかった、または定義が見つからなかった関数や変数への "参照 "を含んでいます。 コンパイラでは、コードでシンボルが "宣言" されていない場合は識別できますが、"定義" されていない場合は識別できません。 これは、定義が別のソース ファイルまたはライブラリに
Visual Studio を使用してダイナミックリンク ライブラリ (DLL) をビルドする場合、既定では、リンカーには Visual C++ ランタイム ライブラリ (VCRuntime) が含まれます。 VCRuntime には、C/C++ 実行可能ファイルを初期化および終了するために必要なコードが含まれています。 DLL にリンクされる場合、VCRuntime コードは _DllMainCRTStartup と呼ばれる内部 DLL エントリポイント関数を提供します。この関数は、Windows OS メッセージを DLL に渡してプロセスまたはスレッドにアタッチまたはデタッチします。 _DllMainCRTStartup 関数は、スタック バッファー セキュリティのセットアップ、C ランタイム ライブラリ (CRT) の初期化と終了、静的オブジェクトとグローバル オブジェクトのコンス
あるプログラムが DLL によって定義されたパブリック シンボルを使うことを、シンボルをインポートすると言います。 ビルドに DLL を使用するアプリケーション用のヘッダー ファイルを作成するときは、パブリック シンボルの宣言で __declspec(dllimport) を使用します。 キーワード __declspec(dllimport) は、エクスポートに .def ファイルと __declspec(dllexport) キーワードのどちらを使用した場合でも機能します。 コードを読みやすくするには、__declspec(dllimport) に対してマクロを定義して、そのマクロを使用してインポートされる各シンボルを宣言します。 #define DllImport __declspec( dllimport ) DllImport int j; DllImport void func(
__declspec(dllexport) キーワードを使用すると、データ、関数、クラス、クラスのメンバー関数を DLL からエクスポートできます。 __declspec(dllexport) では、オブジェクト ファイルにエクスポート ディレクティブが追加されるので、.def ファイルを使用する必要はありません。 この機能は、C++ 関数の装飾名をエクスポートする場合に特に便利です。 名前の装飾には標準仕様がないので、エクスポート関数の名前は、コンパイラのバージョン間で変わる場合があります。 __declspec(dllexport) を使用する場合は、名前付け規則の変更に対応するためだけに、DLL とその従属する .exe ファイルを再コンパイルする必要があります。 序数、NONAME、PRIVATE など、多くのエクスポート ディレクティブは、.def ファイル内にしか作成されないの
名前空間は、その内部にある識別子 (型、関数、変数などの名前) のスコープを定める宣言領域です。 名前空間は、コードを論理グループにまとめるため、およびコード ベースに複数のライブラリが含まれる場合に特に発生する名前の競合を回避するために使用されます。 名前空間スコープのすべての識別子は互いどうしを修飾なしで参照できます。 名前空間の外の識別子がメンバーにアクセスするときには、識別子ごとに完全修飾名を使用するか (std::vector<std::string> vec; など)、単一の識別子のために using 宣言を使用するか (using std::string)、名前空間内のすべての識別子のために using ディレクティブを使用する (using namespace std;) ことができます。 ヘッダー ファイル内のコードは、常に完全修飾された名前空間の名前を使用する必要があり
質問 2008年9月17日水曜日 17:27 VS2008 standard で C++ のターミナルアプリケーションを作成しようと project を作成しました。 Math.Abs() を使いたいと思い using System; を宣言したところ error C2871: 'System' : この名前を指定された名前空間は存在しません。 と出たのでエラー番号から検索しましたが、具体的に VS2008 から何を追加してやれば良い のか調べきれませんでした。 ... #include <complex> ... using std; using System; ... int ConvergenceTest_A(complex<double> z){ double re,im,temp; int value = 0; re = z.real(); im = z.imag(); temp
このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 以下のプロパティは、[プロジェクト]>[プロパティ]>[構成プロパティ]>[リンカー] の下にあります。 リンカーについて詳しくは、「リンカーを呼び出す CL」と「リンカー オプション」をご覧ください。 [全般] プロパティ ページ 出力ファイル /OUT オプションを指定すると、リンカーによって作成されるプログラムの既定の名前と場所がオーバーライドされます。 進行状況の表示 リンカーの進行状況メッセージを出力します 選択肢 [設定なし] - 詳細情報はありません。 [詳細情報をすべて表示] - すべての進行状況メッセージを表示します。 [検索したライブラリ] - 検索したライブラリのみを示す進行状況メッセー
バイナリファイルへの書き込みや通信などの用途で、文字列からバイト型配列 byte[]に変換したいことがあります。この記事では文字列からバイト型配列(byte[])への変換コードを紹介します。 概要 C#では文字列はunicodeとして定義されているため、文字列をbyte[]配列にコピーするためには、エンコードの指定(SJIS, JIS, EUC, UTF-8など)も必要になります。C#では System.Text.Encodingクラスが用意されており、このクラスを用いて文字列をエンコードを指定して、byte[]配列型に変換できます。 文字列(string)型からbyte[]配列型に変換する場合はGetBytes()メソッドを用います。 コード例 private void button1_Click(object sender, EventArgs e) { string text = "
既定で、Visual Studio 2015 で作成された CLR プロジェクトは .NET Framework 4.5.2 を対象とします。 新しいプロジェクトを作成する際には、.NET Framework 4.6 をターゲットにできます。 [新しいプロジェクト] ダイアログの上部中央にあるドロップダウン リストでターゲット フレームワークを変更します。 既存のプロジェクトのターゲット フレームワークを変更するには、プロジェクトを閉じて、プロジェクト ファイル (.vcxproj) を編集し、ターゲット フレームワークのバージョンの値を 4.6 に変更します。 変更は、プロジェクトを次回開くときに有効になります。 Visual Studio 2017 では、既定のターゲット .NET Framework は 4.6.1 です。 Framework バージョン セレクターは、[新しいプロジ
Visual Studio を使用すると、Arm64 やその他のプラットフォームなど、さまざまなプラットフォーム (プロセッサ アーキテクチャ) をターゲットにするようにアプリケーション ビルドを設定できます。 そのターゲット プラットフォーム用にビルドするために、プラットフォームで Visual Studio を実行する必要はありません。 Visual Studio での Arm64 のサポートの詳細については、 ARM 搭載デバイス上の Visual Studio を参照してください。 .NET 開発の 64 ビット プラットフォーム サポートについては、 64 ビット アプリケーションを参照してください。
オブジェクト ファイルまたは実行可能ファイル内にコメント レコードを配置します。 構文 #pragma comment( comment-type [ , "comment-string" ]) 解説 comment-type は、コメント レコードの種類を指定する定義済み識別子 (後述) の 1 つです。 省略可能な comment-string は、いくつかのコメントの種類で追加情報を指定する文字列リテラルです。 comment-string は文字列リテラルであるため、エスケープ文字、埋め込まれた引用符 (")、連結の使用は、文字列リテラルのすべての規則に従います。 compiler オブジェクト ファイル内にコンパイラの名前とバージョン番号を配置します。 このコメント レコードはリンカーには無視されます。 このレコードの種類で comment-string パラメーターを指定すると
モジュール定義または DEF ファイル (*.def) は、DLL のさまざまな属性を記述する 1 つ以上のモジュール文が含まれるテキスト ファイルです。 DLL の関数をエクスポートする __declspec(dllexport) キーワードを使わない場合は、DLL に DEF ファイルが必要です。 DEF ファイルには、最低限、以下のモジュール定義文を記述する必要があります。 ファイルの先頭には、必ず LIBRARY 文を記述します。 この文は、DEF ファイルが DLL に所属していることを識別します。 LIBRARY 文の引数には、DLL の名前を指定します。 リンカーは、この名前を DLL のインポート ライブラリに配置します。 EXPORTS 文には、DLL のエクスポート関数の名前と、オプションで序数値を指定します。 序数値を関数に割り当てるには、アット マーク (@) と数
他の .NET 言語とは異なり、Visual C++ には相互運用性サポートが備えられています。相互運用性サポートを使用すると、managed、unmanaged プラグマにより、マネージド コードとアンマネージド コードは同じアプリケーション内、また同じファイルでも共存できるようになります。 これにより、Visual C++ 開発者は、他のアプリケーションの動作を妨げることなく、既存の Visual C++ アプリケーションに .NET 機能を統合できます。 また、dllexport、dllimport を使用して、マネージド コンパイル単位からアンマネージド 関数を呼び出すこともできます。 関数パラメーターのマーシャリング方法を指定したり、DllImportAttribute を明示的に呼び出す際に指定できるその他の詳細設定を行ったりする必要がない場合は、暗黙の PInvoke を使用
String オブジェクトの文字にアクセスして、wchar_t* 文字列を受け取るアンマネージド関数に対する高パフォーマンスの呼び出しを行うことができます。 このメソッドにより、String オブジェクトの最初の文字への内部ポインターが生成されます。 このポインターは直接操作することも、固定して通常の wchar_t を必要とする関数に渡すこともできます。 例 PtrToStringChars を指定すると、内部ポインターである Char (別名 byref) が返されます。 そのため、ガベージ コレクションの対象になります。 ネイティブ関数に渡す場合を除き、このポインターを固定する必要はありません。 次のコードについて考えてみましょう。 ppchar は内部ポインターであるため固定は必要なく、そのポインターが指す文字列がガベージ コレクターによって移動されると、ppchar も更新されま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く