C+/CLI

【C++/CLI】System::String^をdouble/intに変換する

まず前提は以下の通り。 // これは .NETの型 System::String^ str = "10;" // こっちは .NET/C++(CLI)共通で使える型 double d = 0; 変換に使うメソッドはいくつかあるのでそれぞれの使い方です。 System::String^ str = "10"; double d = 0; int i = 0; // …

【C++】const参照とshared_ptrをダウンキャストする

const 参照と shared_ptr のダウンキャスト方法です。 先に方法を書いておきますが以下の通りです。 // const参照のダウンキャスト auto&/*const Type&*/ sub = static_cast<const Type&>(obj); // shared_ptrのダウンキャスト std::shared_ptr<Type> sub = std::dynamic_pointe</type></const>…

【C++/CLI】プロパティをヘッダーと実装に分ける

タイトルの通り C++/CLI でヘッダーにはプロパティ(propertyキーワード)の宣言だけを記述し、別のファイルに実装を宣言する方法です。VisualStudio では porperty 宣言は実装を自動生成してくれないため自分で手打ちする必要があります。 ヘッダー側 // Sa…

【C++/CLI】std::functionにマネージドメソッドをバインドする

std::function にメソッドを関連付ける時は std::bind を使用しますが C++/CLI でマネージドメソッドを std::bind 渡したい場合の実装方法の紹介です。 C++11 以降で関数ポインタの代わりに std::function でコールバック呼び出しされるような局面でマネージ…

【C++/CLI】Action<T1, T2>, Func<..>がエラーになる

C++/CLI で Action は使用できるのに Action<T1, T2> 以降が「E2154 ジェネリック クラス "System::Action" の引数が多すぎます」でエラーになる場合の対処方法です。 ソリューションエクスプローラー > 該当のプロジェクト > 参照 > System.Core を追加 どうやら定</t1,>…

C#のDateTimeとC++のtime_tを相互変換する

C++/CLIやC#とネイティブを相互運用を使用しているときにC#のDateTime型とC++のtime_tを相互に変換する方法です。 コードのかりやすさ優先でまとめています。 C#のDateTime → C++のtime_tへの変換 .NETのDateTimeをtime_tに変換します。 tm型を経由してmktim…

C++でif文の条件式中で変数に数値を代入するとどうなるのか?

以下ただの個人的なメモです。 言語仕様として falseは「0」 trueは「0以外」 int a = 1; if(a = 1) // ★条件式の中で代入してしまう { cout << "true" << endl; } else { cout << "false" << endl; } 結果は「true」が出力される。 aに1が代入されて if(1) …

C++/CLIでstd::stringとSystem::string^を相互に変換する

タイトルの通りで、C++/CLIでC++の文字列とC#の文字列を相互に変換する方法です。