くだすれC++/CLI(初心者用)part2 [sc](★0)
-
- 1
- ./1256645713/662
- 2010/03/15(月) 09:41:19
-
おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。
前スレッドはこちら
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l1
dat落ち姉妹スレ
C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/l1
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l1
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l1
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l1
-
- 798
- 2014/03/08(土) 21:13:21.28
-
>>784
俺は顧客の強い要望でVS2013 expressのVC++でWindows formアプリを作ってる。
非推奨だけど、作ろうと思えば一応作れるのね。
-
- 799
- 2014/03/10(月) 10:17:51.76
-
C++でのデザイナ機能も一応残してるんだよね
っていうか、Expressでも出来るんだ
-
- 800
- 2014/03/10(月) 20:21:18.79
-
>>799
できますよ
-
- 801
- 2014/03/11(火) 10:47:47.08
-
ATL/MFCもexpressでやらせてくれたらいいのに
あったらあったでそれなりに便利
-
- 802
- 2014/03/11(火) 10:59:46.32
-
ATL/MFC無しでもCStringくらい標準にしてくれるといいのにね
System::Stringからの変換がスマートにできるのに
-
- 803
- 2014/03/11(火) 11:35:40.31
-
ATL/MFCまで入れちゃったら有償版と変わらないのでは?
-
- 804
- 2014/03/11(火) 15:16:32.72
-
まあそれ以外にも違いはいろいろあるし
-
- 805
- 2014/03/11(火) 23:00:52.68
-
ウィザードやリソースエディタなんかがないとまともに開発には使えないだろうけど、
MFCのコードをビルドだけできるようヘッダとライブラリを公開して欲しいとは思う。
-
- 806
- 2014/03/15(土) 21:18:07.18
-
C++/CLIとC#を相互運用するとき、IDisposableの扱いについて参考になるWebページがあれば教えてください。
-
- 807
- 2014/03/20(木) 15:11:41.08
-
dth = dt;
dth = %dt; // 丁寧に書いた場合
-
- 808
- 2014/03/20(木) 17:32:35.09
-
C++/CLIでは値型とクラスの場合で書き方が変わったりするから要注意だな
-
- 809
- 2014/03/20(木) 17:57:34.38
-
C++/CLIで作っているフォームの表示が気づいたらXP仕様になってしまいました
過去につくった物はWin8仕様の表示になっているのですがどこの設定で変更できるのでしょうか
環境はWindows8.1でVS2012です
-
- 810
- 2014/03/20(木) 20:04:05.05
-
>> 808-809
ありがとうございます。さっそく参考にしていろいろ調べてみますv
-
- 811
- 2014/03/20(木) 20:28:07.59
-
807です。質問の時に代入する方向が逆でしたが、もらったヒントで
無事解決できました m(_ _)m
dth = %dt; // DateTime^ = DateTime
dt = static_cast<DateTime>(dth); // DateTime = DateTime^
-
- 812
- 2014/03/20(木) 21:58:05.31
-
2段目のはこれでいけるな。
dt = *dth
-> が *. なのもCの文法と同じ。
dth->AddSencond(...)
(*dth).AddSencond(...)
-
- 813
- 2014/03/20(木) 22:26:22.96
-
>>812
一文字で決まるおまじない教えてくれてありがとうですv
-
- 814
- 2014/03/23(日) 21:20:34.11
-
質問失礼します
クラスaの配列をメンバ変数に持つクラスbを作りたいのですが、クラスaの配列の初期化がうまく行きません。(コンパイル自体はできます)
これは初期化の方法が間違っているのでしょうか?
それともそのような設計(クラス配列を持つクラス)自体がよろしく無いものなんでしょうか?
ref class a
{
int x;
public: a(int num){x = num;}
};
ref class b
{
array<a^>^ array_a;
public:
b(){
array_a = gcnew array<a^>(10);
for (int i = 0; i < array_a->Length; i++)
{
array_a[i] = gcnew a(i);
}
}
};
-
- 815
- 2014/03/23(日) 21:31:58.22
-
問題なさそうだけど どう「うまく行きません」なの?
-
- 816
- 2014/03/23(日) 22:35:57.72
-
実体がない(?)と言いますか、array_aに何かしようとすると、その関数のそれ以降の処理をすっ飛ばすようになります。
例えばクラスaにint GetX(){return x;}、
クラスbにint GetArrayA(int num){return array[num]->GetX();}みたいな関数を追加して、
ウィンドウズFormの方でLabelを一つ用意します。
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
b^ test;
test->GetArrayA(0);
Label1->Text = "だいじょうぶ";
}
これだと、Label1->Textは「だいじょうぶ」に変わらずLabel1のままです。
しかし
>test->GetArrayA(0);
の部分をコメントアウトにするとLabel1->Textは「だいじょうぶ」になります。
-
- 817
- 2014/03/23(日) 23:19:57.49
-
これってコンパイル通る?>>816の方。
-
- 818
- 2014/03/23(日) 23:36:35.34
-
>>817
817もコンパイルは通ります
あと、今試してみたんですが出来上がったexeファイルを起動してみると
「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略)
オブジェクト参照がオブジェクトインスタンスに設定されていません」
と出ますね……
こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
-
- 819
- 2014/03/24(月) 01:02:03.43
-
test =gcnew 以下略つけてみたら?
-
- 820
- 2014/03/24(月) 01:50:12.79
-
>>819
あっ……「だいじょうぶ」になりました。
ありがとうございました!
-
- 821
- 2014/03/24(月) 11:45:41.86
-
デバッガ使えない環境なのかな、、、
例外起きた時は出力ウィンドウに出るぜ
-
- 822
- 2014/04/26(土) 12:11:13.54
-
c#のdynamic型に相当するものを
c++/cliで何と書けば良いですか?
-
- 823
- 2014/04/27(日) 21:57:27.97
-
多分無い
-
- 824
- 2014/05/09(金) 18:40:24.14
-
c++/cli勉強したいと思っています。
>>array<a^>^ array_a;
の<a^>^ってどいういう意味ですか?
顔文字に見えます。ググりたいのですが^>^でググっても
ヒットしません。キーワードを教えてけろ。
-
- 825
- 2014/05/09(金) 18:46:04.26
-
トラッキングハンドル
-
- 826
- 2014/05/09(金) 19:05:13.77
-
>>825
ありがとうございます。さっそくググってみます。
-
- 827
- 2014/05/11(日) 22:02:14.61
-
参照型を内部に保持するコンテナの参照を宣言かな。
-
- 828
- 2014/05/13(火) 09:25:37.06
-
ジェネリックメソッドの継承がうまく行きません。
generic<typename T> ref struct B;
ref struct A abstract {
generic<typename U> virtual A ^f(B<U> ^u) = 0;
};
//C4570 明示的に抽象として宣言せずに抽象関数を含んでいます
generic<typename T> ref struct B : A {
//C4490 オーバーライド指定子が不適切
generic<typename U> virtual A ^f(B<U> ^u) override {
return u;
}
};
同じ戻り値と引数でも、同じ関数だと認識されないようなのですが、どのようにすれば良いですか?
-
- 829
- 2014/05/13(火) 10:02:57.61
-
ttp://social.msdn.microsoft.com/forums/vstudio/ja-JP/2f138907-64a3-4326-bfea-d0e4b3c15fa8
仕様っぽいのであきらめてC++/CLI投げ捨ててC#で書く
-
- 830
- 2014/05/13(火) 10:44:57.11
-
なるほど・・・ありがとうございました。
-
- 831
- 2014/05/13(火) 23:30:42.34
-
C#でdelegateに設定されたメソッドを調べるのにGetInvocationListを参照していたのですが、
C++/CLIで同じようなことをするとコンパイルエラーが発生してしまいます。
どのようにコーディングすればよいでしょうか?
// C#
http://ideone.com/O4j7TX
// C++/CLI
http://ideone.com/Lazyxs
※実際は23行目のauto mcd = (MulticastDelegate^)hoge->Piyo;で
error C3918: 使用するには、'Delegate::Hoge::Piyo' がデータ メンバーでなければなりません
といったエラーが発生してしまいます。
-
- 832
- 2014/05/13(火) 23:41:08.55
-
C++/CLIの方はeventじゃん
-
- 833
- 2014/05/13(火) 23:47:44.50
-
>>832
あーeventキーワード取っ払ったら通りました。ありがとうございます。
そこでコンパイルエラーにしてくれたらいいのに…。
-
- 834
- 2014/05/14(水) 08:39:30.20
-
event自体は正当で使う側が問題なのに、eventの方でコンパイルエラー言われても
-
- 835
- 2014/05/14(水) 11:14:20.64
-
ワロタ
-
- 836
- 2014/05/14(水) 23:09:07.27
-
すいません>>831です。
禿しく勘違いしてました。C#のeventはシンタックスシュガーなんですね。
event EventHandler^ Piyo
{
void add(EventHandler^ value) { mPiyo += value; }
void remove(EventHandler^ value) { mPiyo -= value; }
void raise(Object^ sender, EventArgs^ e) { mPiyo(sender, e); }
}
EventHandler^ mPiyo;
などとしたら上手くいきました。
-
- 837
- 2014/05/26(月) 03:20:04.74
-
c++/cli初めて作成しています。
c++プロジェクトでライブラリを作成して
void func1(const char *p){
cout << p << endl;
}
を定義して、
c++/cliプロジェクトでこの関数を呼び出すと、
func1("Hello World"); //呼び出し成功
func1("Hello" + "World"); //型 "System::String ^" の引数は型 "const char *" のパラメーターと互換性がありません
となったので、エラー解決のために少しググって、よくわからないまま
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi("Hello" + "World").ToPointer();
のようにして、
func1(pStr); //呼び出し成功
しました。
この場合、
func1("Hello" + "World");
を実行可能に出来るようにc++ライブラリ側で、この引数を受けられるfunc1関数を定義することは可能でしょうか?
-
- 838
- 2014/05/26(月) 05:33:40.37
-
無理
-
- 839
- 2014/05/26(月) 09:14:28.60
-
>>838
そうですか無理ですか。
出来れば、出来ない理由を教えてください。
-
- 840
- 2014/05/26(月) 09:35:16.69
-
System::String^はネイティブでは直接扱えないから
-
- 841
- 2014/05/26(月) 09:42:14.96
-
>>840
なるほど。ありがとうございました。
-
- 842
- 2014/06/16(月) 00:28:31.77
-
c#で書かれたdllを呼び出すc++/cliのラッパー
static libを作り、それを呼び出すc++のコードを
書けば、c++でc#のdllを呼び出す事が出来ますか?
-
- 843
- 2014/06/16(月) 03:18:12.95
-
出来るよ。リンク時に/MDオプションを使う必要はあったと思うけど。
-
- 844
- 2014/06/16(月) 11:06:40.38
-
>>843
コメントありがとうございます。
c#からc++を呼び出す例はググるとたくさんあるの
ですが、c++からc#を呼び出す良い例、どこかに
ないでしょうか?
-
- 845
- 2014/06/20(金) 23:37:50.80
-
std::regexで"["や"]"などの文字を扱うにはどう書けばいいですか?
たとえばテキスト中に"[43]"などの[]で囲まれた数字があるかどうか知りたいのですが。
-
- 846
- 765
- 2014/06/21(土) 16:55:19.23
-
久しぶりにVS開いたらWinFormが消えとる。もう捨てられるのか
>>844
これか
http://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0
>>845
\でエスケープします
regex r("\[43\]");
-
- 847
- 2014/06/21(土) 16:56:33.36
-
regex r("\\[43\\]");
こうか
-
- 848
- 2014/06/25(水) 18:40:03.79
-
こんどCLI+API+STLで久々に開発するぜ
まともにWindowsアプリ作るの15年ぶりだぜ
このページを共有する
おすすめワード