facebook twitter hatena line google mixi email
★お気に入り追加


■ このスレッドは過去ログ倉庫に格納されています

おそらく、.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

ここまで見た
  • 783
  •  
  • 2014/02/22(土) 18:19:01.60
エスパー呼んでる?

ここまで見た
  • 784
  •  
  • 2014/02/22(土) 18:21:31.68
でもさ、C++/CLIって今はWindowsフォームアプリ作れなくなったというか、非推奨でしょ?
ヒッジョーに残念なんだけど、俺はクソなC++Builder使ってる

ここまで見た
  • 785
  • 781
  • 2014/02/22(土) 19:14:11.22
>>782,783,784
最近C++始めました。今まで作ったC#の自作ライブラリをC++化しようとしています。
CLRクラスプロジェクトでクラスライブラリを作ってC#アプリから使う場合は、普通に
参照設定して使えましたが、でもそれだと、クラスライブラリの中身がReflectorなどで
見えてしまうので、それで/clr無しでビルドしてDllImportの方法でC#から使えたのですが、
これが正しいやり方かどうか知りたかったのです。要するに、逆コンパイルできない
(あるいは難しい)クラスライブラリを作りたいのですが。

ここまで見た
  • 786
  •  
  • 2014/02/22(土) 19:25:29.69
難読化しろ

ここまで見た
  • 787
  • 781
  • 2014/02/22(土) 20:01:19.06
>>786
それも考えたのですが、C#のDLLを難読化するくらいなら、C++でDLL
作るほうが手間がかからないかなと思ったのですが。
皆さん、こういう用途には、VS2013付属の難読化ソフトで十分ですか?

ここまで見た
  • 788
  •  
  • 2014/02/22(土) 21:16:20.23
秘密にしたいところはC++で書くよ

ここまで見た
  • 789
  •  
  • 2014/02/24(月) 10:59:05.87
ILMergeはC++/CLIでも使えますか?試したら出来ませんでした。

ここまで見た
  • 790
  •  
  • 2014/02/24(月) 12:00:23.44
mixed moeだとだめかもしれんね。/clr:safeや/clr:pureは試した?

ここまで見た
  • 791
  •  
  • 2014/02/24(月) 12:18:42.22
> clr:safeや/clr:pure
これ使うならC++/CLI使う理由が消えないか?
難読化がC++/CLI使う目的ならなんか違う気がする
業務か趣味かでも違うし

ここまで見た
  • 792
  •  
  • 2014/02/24(月) 13:20:04.45
難読化の質問の続きなのか?

ここまで見た
  • 793
  •  
  • 2014/02/26(水) 11:45:55.31
VS2013に難読化のソフト付属するようになったのか

ここまで見た
  • 794
  •  
  • 2014/02/26(水) 14:39:40.34
わざわざネイティブコードがちょろっとついてたら、まっさきにそこ覗くけどね
まあしっかり考えて。

ここまで見た
  • 795
  •  
  • 2014/02/26(水) 15:10:45.06
確かに、覗いてみたくなるな
Dependency Walkerに放り込むだけでもそれなりに見えてくるしな

ここまで見た
  • 796
  •  
  • 2014/02/26(水) 22:42:23.74
確かにすげー怪しいもんなw
むしろ、木を隠すなら森の中じゃないかな。

ここまで見た
  • 797
  •  
  • 2014/02/27(木) 00:13:46.26
ILが解析しやすいのはディスコンパイルできることよりも、
型名やメソッド名などのメタ情報がそのまま残ってることだから、
その辺改善したほうがましだな。
簡単な難読化ツールのやってることもその程度だし

ここまで見た
  • 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の方でコンパイルエラー言われても

お絵かきランド
フリックラーニング
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email
おすすめワード