[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/07 22:56 / Filesize : 214 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++/CLI part3



1 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 21:13:54 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。

前スレッドはこちら
(p)pc11.2ch.net/test/read.cgi/tech/1142147319/
(p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50

姉妹スレ
くだすれC++/CLI(初心者用)
(p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
(p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50

2 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 22:32:54 ]
おつ

3 名前:デフォルトの名無しさん [2008/03/26(水) 00:54:20 ]
いらんたせろ

4 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 15:15:12 ]
dataGridView等で、選択されてる行を消すって処理を
エレガントに描くにはどうすればいいですか?

今のところ
for( int i = 0 ; i < this->dataGridView->Rows->Count ; ++i )
{
     System::Windows::Forms::DataGridViewRow^ row = this->dataGridView->Rows[i];
     if( row->Selected )
     {
        dataGridView->Rows->Remove( row );
         i=0;
     }
}
です

5 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 15:40:32 ]
それって最終的に全部消さないか?

6 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 16:06:45 ]
>>5
selectedの時しか消さない(i=0)から問題なし
selectedしてない場合、ループの最後まで行くお

7 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 16:12:40 ]
自動選択は?

8 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 16:17:19 ]
自動選択って何?
上のコードでとりあえず動いてるから問題ないというか
質問を質問で返さないで

9 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 16:28:02 ]
あああ、デフォルトでそんな機能あるやんね

10 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:12:53 ]
List<Scene^> scenes;
// いろいろ
for each(Scene s in scenes)
{
 delete s;
}

何か問題はありますか?



11 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:24:45 ]
いろいろの最中に例外が投げられたらオワタ\(^o^)/になる。
といってもGCとファイナライザで救済されるから
ネイティブC++のときほど気にかける必要はないかもしれない。

12 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:20:34 ]
System::Collections::Generics〜のコンテナ郡に
auto_handleは入れられますか?

13 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:22:51 ]
はい

14 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:48:18 ]
入れたところで、自分でauto_handleのデストラクタを呼ばない限り、
auto_handleの中身のインスタンスのデストラクタは呼ばれないぞ。
中身のデストラクタはauto_handleのデストラクタ (Dispose)から呼ばれるのだが、
BCLのコレクションは要素のDispose(デストラクタ)を呼ばないため。

15 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:54:16 ]
意味ね〜

16 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 15:57:17 ]
おとなしくGCに従うのだ ははは

17 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:07:33 ]
STL/CLRのコンテナでも無理なの?

18 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:14:24 ]
無理。

19 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 16:20:33 ]
無理ですかorz

20 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 20:55:35 ]
ref class Banana;
List<Banana^> bananas;

for each (Banana^ b in bananas)
{
 delete b;
}




21 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 21:01:32 ]
Disposableなコンテナつくればいいじゃない

22 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 21:15:31 ]
value型でauto_handleみたいの作ろうとしたらデストラクタが定義できなかった。

23 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 21:17:13 ]
STLのコンテナだってstd::auto_ptr入れられないしね。

24 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 21:18:27 ]
>>23
それとこれとは関係ないだろ。

25 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 23:44:30 ]
でもさーGCはモノが使われなくなったら消えるんだから。
Vector<boost::shared_ptr<Hoge>>
と一緒じゃね?

26 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 02:16:39 ]
25はわかるけど、それと23とのつながりがわからない。

27 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 08:41:05 ]
>>25
タイミング

28 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 10:58:40 ]
COMにすればよくね?

29 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 13:24:49 ]
COMにもリリースのタイミングがあってだな

30 名前:デフォルトの名無しさん [2008/04/01(火) 21:59:31 ]
過疎



31 名前:デフォルトの名無しさん [2008/04/02(水) 21:46:36 ]
  踏んだら孕んだ!
  孕んだ振る降る般若だ!
  童貞擦る無駄、フン出る春巻きはむ無理!
  チン毛ちぎり、看板塗る飛騨!
  安眠煮る焼酎!
  安打!?半田ゴテ適時打!!
  原チャリ盗んだ!
  よくちょん切れるハサミだ!
        ∧__∧   ________ 
      <丶`Д´>/ ̄/ ̄/ 
      ( 二二二つ / と)

32 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 06:12:29 ]
const参照で受け取ったref classのプロパティって触れないの?

ref struct Foo
{
property int Bar;
static void Hoge(const Foo% foo)
{
foo.Bar;
}
}

error C2662: 'Foo::Bar::get' : 'const Foo' から 'Foo %' へ 'this' ポインタを変換できません。

const外すとコンパイル通ります。
getterちゃんと書いて、 int get() const とかやろうとすると
const 付けんなって怒られるし…

33 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 10:30:03 ]
追跡参照の中身が固定されたらGCが起きたとき、追跡できないだろ

34 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 14:59:36 ]
単にCLIにconstの概念がないから、
マネージ型にconst使おうと考えるなということ。

35 名前:32 mailto:sage [2008/04/08(火) 18:12:22 ]
>>33
え?それは Foo * const foo とした場合の話じゃないの?
「中身」っていう言葉が何を指してるのかよくわからないけど…。

C++だったら、そもそも参照自体がポイント先の変更を許さない概念なわけだけど、
CLIで%なんてもの導入したからには、そのへんは宜しくやってるんじゃないの?
const参照はあくまでポイント先のメンバの不変性を宣言するものだと思うんだけど

>>34
CLIでは「このメソッドは引数のメンバフィールドを変更しません」って
明言する事はできないの?
C++常習者としては、それってすげー不安なんですけど…

36 名前:デフォルトの名無しさん [2008/04/08(火) 22:10:35 ]
>>33
とんでもないかんちがいをしている椰子w

37 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 16:56:50 ]
VC++2008のexpressでmsclr/marshal.h が見あたらないんですが、
もしかしてこれStandard以上にしか付いてないんですか?

38 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:00:49 ]
error C4959: アンマネージ struct 'Microsoft::DirectX::PrivateImplementationDetails::_D3DPRESENT_PARAMETERS_' は、そのメンバへのアクセスによって検証不可能なコードを生成するため、/clr:safe で定義できません
とエラーが出ます。

39 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:13:02 ]
>>35
というか.NETの参照渡しは呼び出し側に変更してほしい時にしか使わないお約束

40 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:27:20 ]
^だけだと nullptr渡されない?



41 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 22:29:39 ]
そうだよ。それで困るメソッドはArgumentNullExceptionを投げてくる。

42 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 23:30:38 ]
モノ渡したら4バイト超えてたら遅くなるんじゃないの?

43 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:05:45 ]
いや、^のハンドル型の実態はGC追跡付ポインタ。
引数や戻り値でも4/8バイトのアドレス値が受け渡されるだけ(少なくともCLRでは)。

.NET Frameworkのライブラリのクラスに、
コピーコンストラクタや代入演算子が定義されていないのは、
そういうわけで不要だから。

44 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:06:05 ]
実際、XNAの算術ライブラリなんてガイドラインと逆走してるよ。

45 名前:デフォルトの名無しさん [2008/04/14(月) 22:39:17 ]
(一般ゲーム) [050325] [工画堂スタジオ] 蒼い空のネオスフィア -Neosphere of The Deep-blue Sky- (bin+cue).rar


46 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:23:14 ]
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。

47 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:25:01 ]
VisualAge のことですね。わかります

48 名前:デフォルトの名無しさん [2008/04/20(日) 15:16:43 ]
VisualAge

49 名前:デフォルトの名無しさん [2008/05/15(木) 12:45:00 ]
過疎るな

50 名前:デフォルトの名無しさん [2008/05/15(木) 15:20:37 ]
C++/CLIの達人になる意味って、ある?



51 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 15:54:40 ]
「C++/CLIの達人」⊂「C++の達人」
だから考えるまでもなく意味はあるだろ

52 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 16:22:00 ]
C++の達人とはまたベクトルが違うような

53 名前:デフォルトの名無しさん [2008/05/15(木) 17:39:28 ]
/ってorの意味じゃないの?
包含関係逆だろ!?

54 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 18:28:36 ]
withの意味だよ。

55 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:33:06 ]
「C++/CLIの達人」=「C++の達人」 ∩「CLIの達人」
「C++/CLIの達人」⊂「C++の達人」
「C++/CLIの達人」⊂「CLIの達人」

56 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 03:40:44 ]
下二つ反対だろ(w

57 名前:デフォルトの名無しさん [2008/05/17(土) 03:43:38 ]
上も反対

58 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 08:55:34 ]
           おっぱい!
       おっぱい! おっぱい!
    おっぱい おっぱい! おっぱい!
  おっぱい! ∩   ∩ ノ)   おっぱい!
 おっぱい!  川 ∩ 川彡'三つ  おっぱい!
おっぱい! ⊂ミ∩、⊂ミ∩彡⊃    おっぱい!
おっぱい!⊂三ミ( ゚∀゚)彡三彡三⊃ おっぱい!
おっぱい! ⊂彡川⊂彡川ミ⊃    おっぱい!
おっぱい!⊂彡川∪⊃ U川彡⊃   おっぱい!
 おっぱい! (ノ ∪  川 ∪ミ)  おっぱい!
  おっぱい!      ∪     おっぱい!
    おっぱい! おっぱい! おっぱい!
        おっぱい! おっぱい!
            おっぱい!

59 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:32:41 ]
C++/CLIの達人ってのが
C++ or CLIの達人だったら、
標準C++だけ知ってる達人とか、CLIのことだけ知ってる達人も
C++/CLIの達人になるけどいいの?

60 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:47:46 ]
/clr:safe の達人というのがいるとすれば、C++が使えるかどうか怪しいよな。



61 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 23:23:05 ]
それじゃ、C#使え、だよな

62 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 15:14:16 ]
C++/CLIのメリットってなんだろな。
safeで使いたいならC#だし、でなければC++でいいだろうし。
C++とmanagedのオブジェクトを両方使うのもあまり使い勝手が良くないし。


63 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 16:00:41 ]
C++でしか使えない(使いにくい)ライブラリをラップするぐらいしか

64 名前:デフォルトの名無しさん mailto:sage [2008/05/18(日) 17:23:00 ]
だから>>55が正しいと思わんか?

65 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 10:55:20 ]
C#でusingの嵐に嫌気がさした人にはC++/CLIは悪くない。


66 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 12:20:12 ]
だらだらと長い名前空間を書かされるとしてもか?

67 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 12:35:56 ]
using namespace書いとけばってのはC#だって一緒だが…。
ひょっとして、名前空間のインポートするときのusingディレクティブの話と、オブジェクトーのスコープを
定義する場合のusingステートメントの話をごっちゃにしてないか?


68 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 12:58:28 ]
C++で作ったやつが
簡単?に.Netな画面のアプリで動かせるんだよ


69 名前:デフォルトの名無しさん [2008/05/20(火) 16:30:17 ]
printf()とか関数の呼び出しを書いたとき、
それがネイティブなのか違うのか、
コンパイラは、どうやって判断してコードを吐いてるのだ?

70 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 16:50:22 ]
C++ではプロトタイプのない関数は呼べない。



71 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:03:52 ]
>>69
リンク時に解決する。
実際にILからネイティブの呼び出す部分はJITで生成される。

72 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:26:59 ]
この言語最高!

73 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:11:17 ]
普通のクラスや関数とrefクラスが混ざったDLLを作るとわけわかめ全開になるよね。

74 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:34:58 ]
確かに冗談みたいな汚さw

75 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 12:22:19 ]
>>68
簡単だったらな。


76 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:01:48 ]
簡単じゃないの?

77 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 18:23:20 ]


78 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:56:45 ]
Sizeをいちいち、System::Drawing::Sizeって書くのがめんどくさいんだけど、
どうにかならんの?
なんで型名なのに、メンバのSizeが優先されちゃうの?

79 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:40:44 ]
namespace dr = System::Drawing;
これでdr::Sizeってできる。

<windows.h>をインクルードして、Windows APIの名前と
.NETクラスライブラリの名前が被るときにも使える。


80 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:47:41 ]
C# と比較して C++/CLI ってやってる人少いの?



81 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:09:03 ]
C#とC++の橋渡し以外使う価値無いから、少ないだろ

82 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:35:04 ]
C#かVBと組み合わせて初めて価値が出る言語だし

83 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 17:56:15 ]
俺はCLIがメインw

84 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 01:54:15 ]
すいません、WebBrowserで選択中のテキストを取得する方法はありますでしょうか?
WebBrowserやDocumentクラスにないですし、ExecCommandにも該当する方法はないみたいです。

クリップボードにコピーして取得する方法もないではないですが、クリップボードの内容を壊したくないので・・・


85 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 05:33:06 ]
selection
createRange
text

86 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 07:46:28 ]
>> 83
おれは、全部、C++ or C++/CLI でいいのにって思ってしまう

87 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 14:18:34 ]
^

88 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:26:26 ]
C#のP/Invokeめんどくせ。
この言語って、windows.hインクルードすれば、APIそのまま呼べるようになる?

89 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:32:36 ]
呼べる

90 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:37:06 ]
MFC で UI 周り作って、/clr オプションつけて内部で .net fx 使ってるけど、かなり楽
C++0x もいいけど、便利なライブラリフレームワークも重要だと思うんだ



91 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:02:26 ]
MFCランタイムと.NETランタイムを両方使ってると思うだけで萎えるわ。

92 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 12:16:27 ]
使い方が逆だろう

93 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:54:03 ]
まあCWinFormsControlとかあるくらいだし、
そういう使い方も想定されてはいると思う。
主目的は移行用だろうけど。

94 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 05:12:11 ]
CLIでDirectXとか使えんの?

95 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 05:42:15 ]
XNA FrameworkはC++/CLIで書かれている

96 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 06:17:25 ]
Managed Direct Xはどこにいったよ?

97 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 06:43:21 ]
>>89
thanks
本格的に移行しようかな。

罠とかある?


98 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 09:17:47 ]
.NET Frameworkがないと動かない。
あと罠ではないが、ハンドルの扱いは
SafeHandle が使いやすいぶんC#のほうが楽だと思う。
C++/CLIで確実にハンドルが解放されるようにするのは
ちょっと面倒なんだよね。
どっかで SafeHandle 使うようにした Win32API の DllImport集
公開されてないかなあ。

99 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 09:32:06 ]
>97
ヘッダで定義されたdefineの衝突に注意。後、enum を混在させない
リソースの管理は、マネージドはマネージド、ネイティブはネイティブで管理する
.net fx をライブラリとして使える C++ と言う位置付けを忘れない
こんなところかな
COM の扱いが、com::ptr で済むのが楽だね

100 名前:98 mailto:sage [2008/05/28(水) 10:16:11 ]
ごめん。やってみたら C++/CLI でも
C# と同じやり方で SafeHandle 使えたわ。
検索してもC#とVBの資料しか出てこないからできないもんだと思ってた。
コールバック関数要求するアンマネージド関数に
delegate 渡すこともできるな。
なんでこういうの紹介してるページがないんだ。
C#のコードばっか載せやがって。

ただし、こういう小技を使おうとすると結局自分で
DllImport書かなきゃいけないので windows.h との親和性は低いけど。
こういうの全部取り込んだ windows.h があればいいのに。



101 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 13:05:09 ]
>>98−100
ありがとうございます。

API?STL?NET?
なんでもドンと来い。サクッと受け止めてやる!

って感じの言語みたいだね。
なんでもこいは諸刃の剣なので気をつけないと・・・


102 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 18:03:35 ]
>>95
全部C++/CLIじゃなくて,C#を併用してるっぽい

103 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 18:29:52 ]
>>100
Marshal.GetFuctionPointerForDelegate使えば、<windows.h>を活かせる。
ただreinterpret_castをしないといけないから、結局ラップしたくなる罠。

104 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 19:37:11 ]
C# でできて C++/CLI でできないことは、あんまりない

105 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 21:47:27 ]
WPF使えないしたぶんSilverlightも同じだろうね

106 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 00:46:31 ]
WPF は普通に使えるだろ
XamlReader 使ってもよし、普通にコードで GUI 使ってもよし

Silverlight だって、アセンブリは C++/CLI の Safe コードで書けるんじゃないかな
試してみるか

107 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 09:25:26 ]
あげるならXNAか

108 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:07:30 ]
>>106
それで使おうと思う?
WPF自体が糞とかいうのは置いといて

109 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 11:10:08 ]
WTL を使うのに比べれば、インテリセンスが標準で効くだけまし

110 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 14:46:01 ]
マニアックな人しか使わんのかこれは



111 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 15:06:25 ]
必要になったら使う、って感じじゃないか?

112 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 15:43:54 ]
マネージ埋め込みリソースの参照がかなり面倒なんだけど、
なんでC#みたいに、Properties.Resources.リソース名で
一発アクセス出来ないの?

113 名前:84 mailto:sage [2008/05/31(土) 22:12:20 ]
>>85
遅レスですが、
Document->DomDocumentを取得後に
その手順でできました。

ありがとうございます。

114 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:56:08 ]
仕事で他の人間に頼まれて、何日かCLIでバリバリ書いた後、
C++に戻ると、ついつい"gcnew"を連発してしまう

115 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 17:32:52 ]
C#のあとの配列newみたいなもんですね

わかります

116 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 15:50:13 ]
C#のあとのfor eachみたいなもんですね

わかります

117 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 16:22:02 ]
それは無い

118 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 19:09:28 ]
あるあry

119 名前:デフォルトの名無しさん [2008/06/04(水) 00:21:57 ]
^←これなに?
ポインタモドキ?

120 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:39:41 ]
それはハット



121 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:21:37 ]
マネージドアプリを C++/CLI で作るのは邪道ですか?

122 名前:98 mailto:sage [2008/06/04(水) 08:46:51 ]
あんまりメリットはないと思う。

123 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 18:00:03 ]
MS的には事実上非推奨

124 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:36:39 ]
C++/CLIのメリットって何?

125 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 20:44:05 ]
C++でしか使えないライブラリを.NET用にラップするのが簡単になることじゃないか?

126 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:19:21 ]
あとはCOMのインターフェースを扱うときとかな
OSが実装しているCOMのインターフェースをC#やVB.NETで書き直すのは馬鹿らしい

127 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:22:01 ]
逆にC#のメリットって何?

128 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 23:56:57 ]
書きやすい

129 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:28:30 ]
情報(サンプルソースなど)が豊富。

130 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 00:35:15 ]
ヘジたんが好きです



131 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 14:05:42 ]
なんか、この手の質問ループしてないか?

132 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 15:58:50 ]
過疎るな
それ以外の話題がないのかwwwwwwww

133 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 18:56:24 ]
.NET各言語のまとめ

C++/CLI  闇ナベ言語
C# ヘルスバーグ萌え言語
VB 建て増しを繰り返した温泉旅館言語
J# J++手切れ金言語
JScript.NET (´・∀・`)ゲンゴ
F# 趣味言語


134 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 19:58:55 ]
Spec#とSing#……勝手に☆拡張!

135 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:30:05 ]
>>133
F#ってFortran#かForth#のどっち?


136 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:40:18 ]
>>135
OCamlのクローン

スレ立ってるよ
pc11.2ch.net/test/read.cgi/tech/1186030985/l50


137 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 21:53:12 ]
JScript .NETスレがこのスレより伸びているのは不思議でいけない
pc11.2ch.net/test/read.cgi/tech/1194001483/l50


138 名前:デフォルトの名無しさん mailto:sage [2008/06/06(金) 22:01:12 ]
見に行ってみたけどあれは伸びてるって言っていいのか?w

139 名前:デフォルトの名無しさん [2008/06/09(月) 10:26:58 ]
で、どうしろと?

140 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 22:09:43 ]
Thread^ jisure = gcnew Thread("C++/CLI part4");

jisure->build("プログラム板");

for(int i=0; i<1000; i++) {
  // TO DO
}

jisure->Close();



141 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:11:10 ]
ヘッダーのみで書いてるけど

生のC++と比べて
C++/CLIだとコンパイルが数倍速い気がする。


142 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 19:00:13 ]
>>141
ほとんどref classだけで書くとコンパイル速度は速くなる。
C#のコンパイルが早いのと同じ理由。
生のC++で書いてただそれを/clr でコンパイルしただけの場合はかわらない。

143 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:36:54 ]
c++/cliでxnaって使えるんですか?
ウィンドウを出すまでは出来たって人がいるみたいですけど

144 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:17:46 ]
少なくとも/clr:safeは必須だろうな。

145 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:34:19 ]
>>143
Xbox 360で動かすなら/d1clr:nostdlibも必要になるかも。

146 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 19:35:50 ]
Windowsなら普通に使えるけど意味ないわな

147 名前:デフォルトの名無しさん [2008/06/28(土) 13:39:34 ]
STL/CLIでIntellisenseの効きが悪すぎる

148 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 20:08:34 ]
メインのフォームに
別のフォームを
・タスクバーのアイコン無し
・閉じるボタンをなくす、もしくはCloseじゃなくSW_HIDEみたいにしたい
んですが
どうすればいいのでしょうか?

149 名前:148 mailto:sage [2008/07/01(火) 20:17:29 ]
事故しました

150 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 20:28:19 ]
メインフォームのLoad〜

サブフォームを作成(gcnew してShow)

サブフォームを閉じてしまった場合、
再度表示するには、どうすればいいでしょうか?

もしくは、そのオブジェクトが閉じられてるかどうかを確認するには何をチェックすればいいのでしょうか?



151 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 21:15:41 ]
CloseしないでHideすればいいんじゃね

152 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 21:20:20 ]
MSDN で、Visible プロパティとShowメソッドを10遍読んでこい

153 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 16:48:57 ]
hideの身長は何センチですか?

154 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:07:21 ]
hydeだろ

155 名前:デフォルトの名無しさん [2008/07/09(水) 16:15:57 ]
ネイティブのDirectX使いたいんですけど、
初期化時に必要なフォームのウィンドウハンドルはどうやって取得すればいいのでしょうか?

156 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 16:21:24 ]
(HWND)this->Handle.ToInt32();


157 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 16:28:57 ]
>>156
ToPointerだな

158 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 17:09:56 ]
どっちでもいけたお

159 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 17:54:50 ]
64bit

160 名前:デフォルトの名無しさん [2008/07/14(月) 17:45:14 ]
FormやPictureBoxのイベントハンドラを見ても出てないのですが、.
net 2003ではMouseWheelイベントは定義されていないのでしょうか?




161 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 17:52:14 ]
隠されてんじゃね
基底であるControlで定義されてるから存在しないわけじゃない

162 名前:160 mailto:sage [2008/07/15(火) 16:47:11 ]
>>161
ありました。VB以外だと自分で定義してやらないといけないのですね。

163 名前:デフォルトの名無しさん [2008/07/16(水) 07:28:12 ]
別のイベントが連鎖的におきてそちらのイベントを使うことが多いから
[Browsable(false)] にしてあるのだろう。



164 名前:デフォルトの名無しさん [2008/07/16(水) 21:47:24 ]
関数ポインタ配列の宣言がどうしてもコンパイル通らないんです。
よかったら何がだめなのか教えてください。

public ref class Form1 : public System::Windows::Forms::Form
{
public:
...
  int fn1(int,int);
  int fn2(int,int);
  int fn3(int,int);
  int (*fp[])(int,int){
    fn1,
    fn2,
    fn3
  };
...


ちなみにerror C4368です。

165 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 21:55:08 ]
関数ポインタはアンマネージ
デリゲート使いな

166 名前:デフォルトの名無しさん [2008/07/16(水) 22:08:11 ]
>>165

アンマネージだったんですか。ポインタはだめとかそんなことを聞いたきがします。
ありがとうございます。

167 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 09:30:03 ]
>>164
普通の関数とメンバ関数は、ポインタ型にすると別物だけど、
わかってるのかな?

168 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 17:00:04 ]
C#でやるより少々手間がかかりますな。
delegate int fd(int x, int y);
array<fd^>^ fp;
fp = gcnew array<fd^> { gcnew fd(this, fn1), gcnew fd(this, fn2), gcnew fd(this, fn3) }

ネイティブクラスの関数ポインタは ->* が出てきて泥沼に陥るからやめたほうがいい。

169 名前:デフォルトの名無しさん [2008/07/17(木) 21:20:42 ]
>>167
わかっていないですorz調べてみます。ありがとうございます。
>>168
デリケートを使うことでコンパイルも通り,プログラムも完全はしましたが,>>168が何をいっているのかわかりませんorz
まだまだです…

本当にありがとうございました。

170 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 21:25:59 ]
>168
イベント使ったら?




171 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 09:43:55 ]
うん普通はイベント使うよね

172 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 10:35:31 ]
>>164
>関数ポインタ配列の宣言がどうしてもコンパイル通らないんです。 
という問いだからあえてデリゲートの配列にしたまでで、
そりゃ普通マルチキャストデリゲートとかイベント使うよ。
イベントでadd/remove/raiseを明示的に実装する場合は・・・まあ普通はコレクションだな。

言いたかったのはネイティブクラスもrefクラスの関数ポインタはthisを内包していないことと、
関数ポインタを使う場合やデリゲートにする場合はthisを明示的に指定する必要があること。

C#と比べてうんぬんというのはC#でデリゲートを作るときはthisを暗黙に補ってくれるので
気にしなくて良いということ。


173 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 09:16:10 ]
A classのメンバにB classの配列を加えるということはできないのでしょうか

174 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 09:21:39 ]
array<T^>^なら入れられるよ

175 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 09:33:38 ]
ref class A{
public:
static array<L_SAMPLINGDATA^>^ hoge;
};

ref class B{
public:
static int piyo;
};
---------------------------------
レスありがとうございます。
こんなかんじでしょうか。

176 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 09:36:50 ]
ref class A{
public:
static array<B^>^ hoge;
};

ref class B{
public:
static int piyo;
};
---------------------------------
まちがえました

177 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:19:37 ]
どういう意図があるのかわからんが static でいいのか?

178 名前:デフォルトの名無しさん [2008/08/20(水) 02:17:19 ]
自分からテスト専門です、って宣言してる派遣テスターって何なの?

将来プログラマとかSEになりたい、とかならわかるけど。
向上心ないよね、頑固だし。
そういう派遣テスターって、仕様書は読めない、
テスト仕様書も作れない、テストプログラムも作れない
やれることは「テキトーにプログラムを触る」ことだけ。

俺は派遣プだけどさ、こういう派遣テスターがいると
派遣全体がバカにされるんだよ。
テスト専門派遣なんて氏んで欲しいよ、まったく。

今日も正社員の人が派遣テスターに仕様書を読んで
テスト仕様書を作ってください、って説教してたよ。
その派遣は頑固に「何故、仕様書が必要なんですか?」って
反論してたから、きっとテスト専門派遣テスターだな。
仕様書も読まず、テスト仕様書も作らず、ただテキトーに
プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの?

あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、
仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。
そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。
うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか!
テスト仕様書もなしにテキトーにテストして納品か。
中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。

派遣専門テスターさんよ、少しは向上心持てよ!
頑固な性格直して仕様書読めよ!テスト仕様書作れよ!


179 名前:デフォルトの名無しさん [2008/08/28(木) 14:39:28 ]
誘導されました

マネージコードでdllを作成することってできる?

dllのソース内でSytem::Stringを使おうとしたらC4747エラーがでちゃった
ソースの方に「#pragma unmanaged」宣言してるから仕方ないんだけどさ

なんかやり方あるんでしょうか?

環境はvc++2005でc++/cliでやってます

180 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 14:44:01 ]
どんなDLLが作りたいの?



181 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 15:11:28 ]
#pragma managedができない差し迫った理由でもあんのけ?
ちゅーかCLRでプロジェクト作ればまんまマネージアセンブリができるはずだが。

182 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 15:21:07 ]
>>179
#pragma unmanagedなしでも__declspec(dllexport)な関数は作れるぞ。

183 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 16:04:26 ]
関係ないけど、C++/CLIでSusieプラグインのコールバック書いたらすごく遅くてビビった。
何回も呼ばれるとアンマネージ-マネージ間のオーバーヘッドも馬鹿にならんな。

184 名前:デフォルトの名無しさん [2008/09/07(日) 23:04:10 ]
既存のNativeのC++コードをC++/CLI
でくるんでC#から呼び出す方法がいくつか検索できるけど
(MicrosoftのC++開発チームもそれを奨励しているみたい)、
これって実際に余程、腕が習熟してないとトラブルに見舞
われそうだと思うけどどうですか?

もう、MFCなんか使ってnativeのC++で押し通した方が
良いように思うけど。とくに、カーネルの数値計算部
がNativeコードでできている場合

185 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:15:06 ]
それでいいんじゃない?
その時、/clr 付けておけば、.net framework も使えるし
C# のライブラリも使える

186 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:21:19 ]
pc11.2ch.net/test/read.cgi/gamedev/1210701179/
749 名前:名前は開発中のものです。[sage] 投稿日:2008/09/07(日) 13:50:13 ID:TzkL+YXR
C++/CLIなら.NETの便利なクラスライブラリやビジュアルデザイナを
C++から都合よく使えるとか思ってるなら大間違い

187 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:32:05 ]
は? GUI は MFC か WTL だろ
>184 もそう言ってるじゃないか

188 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 01:49:41 ]
>>184
別にネイティブコード呼び出すだけならC#からP/Invokeでも良いじゃん。
一度C#+WinForms+ビジュアルデザイナの開発に浸っちまうとMFCとか戻りたくない。

というかC++/CLIは使うかどうか迷うようなもんではないだろ。
C++/CLIのプロジェクト自体ほとんど見たことないが、
例えばアンタがXNAやSlimDX(DirectXのマネージラッパー)
みたいなアセンブリを作ろう思った時に、欲しい言語はどんな感じになると思う?

189 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 09:20:33 ]
dllimport並べたC#

190 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 10:33:14 ]
>>189
DirectXインターフェイスみたいなクラスのメンバ関数はどうするの? 
FBX SDKみたいなバイナリ提供しかされていないライブラリが沢山ある場合は?

C#+DllImportにこだわって関数テーブルからのオフセット調べたり
API変換のみのネイティブDLLをライブラリ毎に作るくらいなら
C++/CLIでマネージクラス書いた方が多少はマシだぞ思うぞ。



191 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 11:05:30 ]
すでにC++のコードがある場合、それをC#から使うのにいいな。

192 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 11:09:30 ]
>>190
>DirectXインターフェイスみたいなクラスのメンバ関数はどうするの?

DirectXインターフェイスならCOM準拠なんだからCOM Interopでいいじゃん。

>FBX SDKみたいなバイナリ提供しかされていないライブラリが沢山ある場合は?

Interop Assistantでヘッダファイルを構文解析して、P/Invoke定義をコード生成する。
ttp://blogs.msdn.com/bclteam/archive/2008/06/23/p-invoke-interop-assistant-justin-van-patten.aspx


193 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 11:11:31 ]
FBX SDKってもしかして*.libのみ提供?

194 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 12:10:02 ]
>>192
>DirectXインターフェイスならCOM準拠なんだから
DirectShow以外は準拠しとらんよ。tlbもidlもない状態からinteropできたっけ?
まぁDirectXに限らずCOM以外のC++クラスライブラリは無理だわな。

>Interop Assistantでヘッダファイルを構文解析して、P/Invoke定義をコード生成する
言葉足らずで悪かったが、スタティックライブラリのみの提供の場合ね。

195 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:18:14 ]
>>194
>DirectShow以外は準拠しとらんよ。tlbもidlもない状態からinteropできたっけ?

できるよ。tlbやidlはコードジェネレータの種に使っているだけで、
実行時にはMSILのメタデータしか使ってないから。
同じものをC#で書ける。

196 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:30:35 ]
そもそもAPIからIUnknown弄ればどうとでもなる

197 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 23:01:19 ]
C++もC#も理解していて、さらにC++/CLIをやってやろうという意気込みがあれば、
DllImport並べたりCOMInteropでどうにかするより楽に感じると思う。
つまりそれくらいの意気込みがないとつらいかなとも思う。

198 名前:デフォルトの名無しさん [2008/09/09(火) 23:04:31 ]
実現したい機能がリフレクションを使わないと書けないかめんどくさい
・Type.getType()相当のプリミティブ
・Invoke()相当のプリミティブ
 があれば文字列をえっちらおっちらこさえれば.NET Frameworkのコードが呼べるはず。
 これならスタック二段増えるだけなので手間じゃないはず。(文字列こさえるのはともかくとしてね……)
 大本のプリミティブの下に積んでやれば下位互換性も保たれる。


199 名前:デフォルトの名無しさん [2008/09/14(日) 07:17:54 ]
447 名前:デフォルトの名無しさん[] 投稿日:2008/09/14(日) 01:09:45
Express 2005で3連休プログラマーなんだけど、

 String^ folderName;

の ^ ってなに?

200 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 07:27:27 ]
マネージドオブジェクトの参照。それ基本だから入門サイトで勉強しなおせ。



201 名前:デフォルトの名無しさん [2008/09/14(日) 14:24:38 ]
.NETでiniファイルの読み書き詳しく

202 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 14:27:51 ]
C++/CLIならAPIをじかに呼べる。/clr:safeやC#などからならP/Invokeを使う。
その前にini使うようなデザインはもうするな。

203 名前:デフォルトの名無しさん [2008/09/14(日) 17:31:54 ]
仕様に書いてあるから訊いているのであって
お前ごときが意見するのはおこがましいちは思わんかね?

204 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 17:35:18 ]
クスクス クスクス

205 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 17:37:55 ]
このレベルのことはプログラマの権限の範疇だろ。
そうじゃなかったらプログラマでなくお前はコーダーだ。

206 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 17:40:57 ]
あげてるし釣りだろ
そろそろ後釣り宣言が来るかもね

207 名前:デフォルトの名無しさん [2008/09/14(日) 20:48:40 ]
iniファイルは釣りでした。
起動してるプロセス(リスト)の取得教えて

208 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 20:49:53 ]
起動時にPIDをファイルに書いとけ

209 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 21:36:58 ]
そもそもC++/CLI関係なくね

210 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 21:59:34 ]
くだすれ.NET逝け



211 名前:デフォルトの名無しさん mailto:sage遅 [2008/09/14(日) 23:36:22 ]
>>197
しかし DllImport, COMInterop にも利点があってアセンブリが
AnyCPU に出来るという一部受けする魅力が
パワーがあるんならだからそっちのほうがと思うとやっぱり
C++/CLI って移行移行言っているのはそういう話なのではと。
言語的な話もあれども。

212 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 01:40:00 ]
日本語ぎりぎりだな

213 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 17:30:40 ]
もうやだこの世界

214 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 17:42:28 ]
C++/CLIこそ.NET

215 名前:デフォルトの名無しさん [2008/09/19(金) 15:24:08 ]
自分以外のユーザのマイドキュメントのパスを取るAPIってない?

216 名前:98 mailto:sage [2008/09/19(金) 15:38:38 ]
なぜここで訊く

217 名前:デフォルトの名無しさん [2008/09/19(金) 15:46:18 ]
c++/cliでやってるもんで・・・
フレームワークにうまいのがないかなと

218 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:48:41 ]
>>215
基本的にアクセスできない & プロファイルのロードは重いのでないん
じゃない。
というか偽装してプロファイルロードしてとりゃいいんじゃないかなぁ。

219 名前:デフォルトの名無しさん [2008/09/22(月) 14:31:38 ]
>>218
返信遅くなったんだが教えてくれ

ユーザプロファイルを読み込んで後はどうやってマイドキュメント取ればいいの?
後、ユーザプロファイル取れてるかも自信ないんだが、下で合ってる?

IntPtr lt = IntPtr::Zero;
PROFILEINFO pfi;

LogonUser(L"test", L"", L"test",
 LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
 (PHANDLE)<)

::ZeroMemory(&pfi, sizeof( PROFILEINFO ));
 pfi.dwSize = sizeof( PROFILEINFO );
 pfi.lpUserName = L"test";

LoadUserProfile((HANDLE)lt, &pfi);

220 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 23:47:22 ]
>>219
C++なんだから、IntPtrよりHANDLEとか適切な型を使おうぜ。
それはともかく、SHGetFolderPathがトークンハンドルを引数を取る。
もしかしたら、ユーザプロファイルを読み込まなくても使えるかもしれない。



221 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 09:13:10 ]
>>221
レスあり
ユーザプロファイルのロードはしなくても取れました

222 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 20:36:52 ]
というかそのコードだと LogonUser で自動的にロードしてるな>プロファイル

223 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 17:16:46 ]
C++/CLIでprintDialogが開くのが遅くて、
printDocument->Print()してからプリントアウトが始まるのも遅いんですが早くする方法ってありますか?

224 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:51:11 ]
C#の
if(hoge is Nazo)
{
 // hogeはNazo型
}
みたいのはどうやって書くの?

225 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:59:13 ]
if (dynamic_cast<Naze^>(hoge))
{
}
dynamic_castはC#のas相当で、C#のisとasは同じILにコンパイルされるということから。

226 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:12:10 ]
できました

227 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:35:06 ]
as は safe_cast 相当じゃないの?

228 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:50:42 ]
safe_castはキャスト失敗した時例外投げる

229 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:43:43 ]
List<T>::Find(System::Predicate<T>(T))

あたりのやつってC++/CLIだと使えないの?

230 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 21:48:12 ]
別に使えないってこたーない
匿名メソッドやラムダ式が無いから使いづらいけどな



231 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:02:12 ]
匿名メソッドないから、
条件の数だけデリゲートの関数が要る。

232 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:16:36 ]
そこでBoost.Lambdaが……、使えない。

233 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:25:28 ]
比較対象を変数に仕込んだり…

234 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 22:32:27 ]
こんなカオスな方法が
ttp://blogs.wankuma.com/episteme/archive/2006/02/21/21426.aspx

235 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:14:38 ]
collection_adapterにぶち込んで、cliext::find_ifを使うんだ。
bind1stとか使えるぞ。

236 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 01:49:56 ]
文字列スイッチはできないの?

237 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 02:35:14 ]
そこはC++ですから。

238 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 22:18:18 ]
ひんと はっしゅ

239 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 14:52:36 ]
C++/CLIのフォームデザイナのコード、あれなんとかならない…?

240 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 09:10:20 ]
まあそもそもフォームデザイナ使うようなところに使う言語じゃないしね
おまけと割り切るべき



241 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 10:55:06 ]
C#はISO,JIS承認されたけど、
C++/CLIはISOに蹴られてその後どーなったの?

242 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 01:18:52 ]
C++0x 待ちじゃね?

243 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 10:47:55 ]
Bette Cを標榜するならC99のコードは動作してもらいたい。
C++/CLIIはNGになってよかったけど、これに変わるとなると、もう素直にC++0x→D言語でいいんじゃないの?


244 名前:デフォルトの名無しさん [2008/11/11(火) 23:17:15 ]
VSで開発してC++用のライブラリ使ってて、
内部で標準C++ライブラリが使われてmsvcr80.dllとかが要求されるんだが、
完成間近にいざ別の環境に持っていくと動かなかった。
.net入れてたら動くかと思ったんだが・・・
CRTオプションが/clrだから/MT(without DLL)が併用できないと怒られたし。
どうしよう(・ω・`)
正味CLRの実装レベルの話分かってない俺を誰か助けてくれ。

245 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 23:19:24 ]
>>244
それはランタイムが足りないから。
Visual C++ 再頒布可能パッケージってのをインストールするんだ。
バージョン(SPの有無も)、x86/x64/IA64で別々だからそこんとこ間違えないように。

246 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 06:20:13 ]
xp以降はおなじmsvcr80.dllでもビルドやリビジョンが下位の場合は読み込まない。
.NET2.0を導入すると.NET2.0が使ってる8.0.50727.42(or163?)が、
.NET3.0を導入すると.NET3.0が使ってる8.0.50727.1833がインストールされるが、
VS2005の最新パッチ状態でコンパイルしたものは8.0.50727.3053を必要とする。
このために.NET2.0が入っていてもmsvcr80.dllがあっても見つからないというエラーが発生する。

247 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 07:52:30 ]
別に .net 関係ない話だし

248 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:46:47 ]
CRTを使ってるからたまたま一緒にインストールされるという話だね。
インストーラーやClickOnce、または再配布モジュールで導入するのが筋だろう。
.NETでCRTを使ってるのはCSC.EXEとかMSCORWKS.DLLあたりだね。

249 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 08:53:36 ]
C++/CLIでCRTを使いたくないなら、/clr:safeにする必要がある

250 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:22:04 ]
ねーよ



251 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:01:08 ]
CLIの機能(プロパティやGC)は使用したいけれど.net frameworkは使用しない場合で、
.net frameworkのランタイムが入っていない環境で動作する様にできるんですか?

252 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 22:16:09 ]
Monoでも入れてみるかね

253 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:48:07 ]
CLIって.NET Frameworkの仕様のことなんだが

254 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:58:02 ]
>>253
おそらくC++/CLIのつもりなんだろ

255 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:10:24 ]
CLIの機能を使いたいが、.NETは嫌だというなら、>>252しかないな。

256 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:19:45 ]
そういえばなんでSTL/CLRはCLIじゃなくてCLRなんだろう
仕様を定めてるんじゃなくて、あくまでCLR用のライブラリそのものを指すから?

257 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 20:18:48 ]
Mono調べてみました
・・・素直に. netを使おうかと思います^^;

C++/CLIは独自仕様で直接.net frameworkとは関係ない所なので
C++/CLIだけ利用できないかな?と思ったので質問しました。

258 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 20:37:48 ]
C++/CLIっていうのは文字通りCLI(.NET Frameworkのコア仕様を定めるもの)
をサポートしたC++なんだよ?
その点C#は言語仕様が直接CLIに依存してないから
C++/CLIに比べて.NETとの繋がりがむしろ弱いともいえる

259 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 21:54:38 ]
まあ現実にはCLIなしのC#なんて考えられないけどな。

260 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:01:39 ]
コンパイラとGCとBCL一通りさえ実装すればC#と名乗れるんでしょ?
誰かやりそうだけど誰もやらないね



261 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:09:01 ]
そうなんですか、それでもやっぱりC++/CLIだけ使用して
.net frameworkを使用しないっていうことはできないんですよね。残念です

262 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:21:49 ]
>>260
mono

263 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 22:38:24 ]
プロパティに夢見てCLIにソースコピペ

プロパティ追加したらアンマネージにマネージは作れないと怒られる

クラスをマネージにしてみる

処理速度激減。なぜかインライン展開できてないorz

アンマネージクラスにプロパティとか新しい列挙とか作る方法ってないの?
マネージ系はインラインできないの?

264 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:03:44 ]
マネージコードでのインライン展開はJITの仕事。

ネイティブでのプロパティはCOM対応のおかげで昔からあったが別構文。
msdn.microsoft.com/ja-jp/library/yhfk0thd.aspx

265 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:06:46 ]
遅くなってるのは、インライン展開やマネージコードになったことよりも、
アンマネージコードとマネージコードの境界を意識してなくて行き来が多発しているのが原因だと思う

266 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:16:06 ]
まぁ、素人はネイティブをメインに gcroot でも使ってろってこった

267 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:42:35 ]
monoでのC++/CLIの対応状況。
コンパイラのサポートはなし。
Microsoft.VisualC.Dllは存在していてsafeモードでコンパイルされたものは動く。
その内訳。
 mono2.0.1現在ではVS2005でコンパイルしたものは動く。
 vs2008でコンパイルしたものは動かない。STL/CLRも未サポート。
mix, pureモードでコンパイルされたものは動かない。


268 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 20:47:23 ]
VC2008EEで勉強してます。
アップウィザードの自動生成が嫌なので、
空のCLRプロジェクトを選択して
int main()
{
Application::Run(gcnew Form());
return 0;
}
という最小限のプログラムを作ってみました。
プロンプトを表示させないようにするには
どうすれば良いのか教えて下さい。


269 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 21:01:33 ]
まず普通のWinFormプロジェクトを作ってみてそれを参考にすれば良いよ

270 名前:268 mailto:sage [2008/11/15(土) 21:04:17 ]
プロジェクト->プロパティ->リンカ->システム
で Windows(/SUBSYSTEM:WINDOWS)
を設定。

int main()を
int __stdcall WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int cmdShow)
に置き変えて,
#include <windows.h>
を書いたらできました。

でも、なんか違う気も。。
CLR用のやり方があるんだろうか?




271 名前:268 mailto:sage [2008/11/15(土) 21:10:32 ]
>>268
やってみてます。
Form1クラスの
System::ComponentModel::Container ^components;
メンバって使われてます?


272 名前:268 mailto:sage [2008/11/15(土) 21:11:51 ]
>>269
だった。。 自分に返信 ORZ

273 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 23:03:06 ]
>>270
それでいいと思う。

どうしても気になるなら、リンカ→詳細のエントリポイントを書き換えろ。
サブシステムが/SUBSYSTEM:WINDOWSにさえなっていれば大丈夫。
例えば、mainCRTStartupにすればint main(int argc, char **argv)で始められる。
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Zだと
int main(array<System::String^>^ args)になる。
CRTの初期化が要らなければ、自分の関数を直接指定する。

274 名前:268 mailto:sage [2008/11/16(日) 10:17:18 ]
>>273
ありがとうございます。

教えて頂いたところを試してみて、以下がわかりました。
・int __stdcall WinMain(HINSTANCE hInst ... )
 を使った場合には、サブシステム:設定なし で動くようです。
・int main(array<System::String ^> ^args)
 を使いたい場合には、サブシステム:/SUBSYSTEM:WINDOWS
 エントリポイントmainで動くようです。

アップウィザードはの設定は後者ですが、
メイン関数からの引数が不要なら前者の方が楽ですね。


275 名前:268 mailto:sage [2008/11/16(日) 10:58:51 ]
自分で作成したフォームクラス(MyForm.h, MyForm.cpp)
に対して,デザイナを使えるようにしようとしています.

とりあえず新しい項目の追加でWindowsフォームを選び,
作成されたFoo.hとFoo.cppの内容をMyForm.hとMyForm.cpp
に全て変更したら動きました.

デザイナで編集して,MyFormのコンストラクタから
InitializeComponent();を呼んでいます.

でもこれもやり方が違う気が..


276 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:36:02 ]
何がいいたいの?

277 名前:268 mailto:sage [2008/11/16(日) 18:57:42 ]
MyForm.resx というXMLファイルを追加し,
ProjectName.vcproj というXMLファイルに変更を加えたら
MyForm.hがデザイナから認識され,編集できました.

既存のMyFormクラスに対して上記のXMLファイルの
設定を自動で行ってくれる方法は無いみたいです.


278 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:51:31 ]
日記は自分の blog にでも書いたらいいんじゃないか

279 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:58:39 ]
何の情報も提供せずに教えてくれってのよりは良いんじゃない?


280 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 20:31:19 ]
この人、自分がやってることをぼそぼそ呟いて、自己満足してるだけだろ
ウィザードがやってることを見もせずに、ウィザードと同じことやってりゃ世話無い罠



281 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:52:34 ]
自動的に作成されるメソッドに日本語が入らないようにするにはどうすればおk

282 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 20:59:21 ]
過去の資源を再利用できること以外にC++/CLIがC#より優れてる点はどこですか?


283 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:09:52 ]
Disposeパターンが言語に組み込まれてる
テンプレートが使える
マクロが使える

一番目は相互運用絡みだから除外するべきかも

284 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:09:49 ]
__fastcallが使えないのが痛い

285 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:55:26 ]
#pragma unmanaged

286 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 09:27:31 ]
C#(検証可能アセンブリ?)はリバースエンジニアリングが簡単という話を聞いたんですが
C++/CLIの混在アセンブリ、純粋アセンブリや検証可能アセンブリも同じなんですか?


287 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 09:46:21 ]
マネージコードで書かれた部分は読み放題
Reflectorでほぼ完璧に逆コンパイル可能
C#ほどILが綺麗じゃないから若干読みづらいかも

288 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:46:58 ]
>>285
#pragma unmanaged
int __fastcall func( int a, int b)
{
return a + b;
}
#pragma managed

これじゃ駄目なようですが


289 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 02:10:49 ]
MSの常
・勝手に仕様拡張する
・なかなか、正規仕様に準拠しない

どやしつけられたのがJ++
総スカン食らったC++/CLI

J#でどやしつけられ、性根入れ替えてC#はよかったのに
またC++/CLIで汚点。
J#はみあたらんぞ

290 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 02:13:24 ]
忘れてた
・勝手にサポートを打ち切る



291 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 10:56:03 ]
今どうしても必要なときに必要なところだけ使う言語だもん
中途半端なフォームデザイナなんか付けたりするから勘違いする奴がいる

292 名前:デフォルトの名無しさん [2008/11/30(日) 11:55:31 ]
property TKey First;
のような省略記法って、何の意味がありますか?
アクセサを使わない場合と比べて、何か利点はあります?

293 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:07:44 ]
記述を省略できる

294 名前:デフォルトの名無しさん [2008/11/30(日) 12:15:20 ]
generic< typename TKey, typename TValue >
public ref class Pair
{
public:
property TKey First;
property TValue Second;
//TKey First;
//TValue Second;

Pair(){}
};

stl::pairのようなクラスを作ったのですが、propertyを使うと、
テンプレートの型によって、代入出来たり出来なかったりするようです。
propertyを削除すると、代入出来るようになります。
何か理由わかりますか?
(続く)

295 名前:デフォルトの名無しさん [2008/11/30(日) 12:19:11 ]
(続き)
public value struct ValueTypeStruct
{
unsigned int A;
unsigned int B;
};

array< Pair< unsigned int, ValueTypeStruct >^ >^ arry;
arry = gcnew array< Pair< unsigned int, ValueTypeStruct >^ >(10);

for each( Pair< unsigned int, ValueTypeStruct >^% inv in arry)
{
inv = gcnew Pair< unsigned int, ValueTypeStruct >();
inv->First = ...; // <- OK
inv->Second.A = ...; // <- NG
inv->Second.B = ...; // <- NG
}

>>293
記述を省略して、デフォルトのアクセサを作ったとして
それのメリットは何ですか?
別にget、setに別にアクセサビリティを設定出来る訳ではないし、、
メンバ変数のアドレスを取れなくさせるとかですか?

296 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:06:46 ]
>>290
いやいや、RedHatにはかなわんよ。
新版のLinuxパッケージをリリースしたら、旧版は即日サポート終了だからな。
あれには驚いた。

297 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:08:30 ]
> inv->Second.A = ...; // <- NG
> inv->Second.B = ...; // <- NG
プロパティは実質的にメソッドなので値型だとコピーが作られる

> 記述を省略して、デフォルトのアクセサを作ったとして
> それのメリットは何ですか?
ILレベルじゃまったく別物
途中で検証が必要だからフィールドからプロパティに変えるか、ってほど気楽な変更ではない
そもそもインスタンスフィールドを公開するのはガイドラインに逆らってるしな

> 別にget、setに別にアクセサビリティを設定出来る訳ではないし、、
これは単にコンパイラの実装の手抜きだろ
C#じゃ設定できるし

298 名前:294 mailto:sage [2008/11/30(日) 13:08:31 ]
自己解決しました。
inv->Second.Aとした場合、Secondはメンバではなく
get()の戻り値である一時変数であった為でした。

299 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:19:08 ]
>>297
理解しました、ありがとうございました。


300 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:20:21 ]
valuetypeは変更不可で設計したほうがこの手の間違いが少なくてすむよね。




301 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:33:23 ]
>>300
値型と参照型の違いもそうなのですが、
プロパティの

inv->First = ...; // <- OK

inv->Second.A = ...; // <- NG
が、表面上は同じ代入なのに

内部的には、
inv->set_First( ...);

inv->get_Second().A = ...;
と、正反対の関数に分かれるってのは
デンジャラスだなーと思いました。
propertyのgetには、何か足りてないものがあるような感じです。



302 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:51:03 ]
値型とプロパティは相性が悪いのよ。参照型のクラスだと問題ないでしょう。
だからP/Invokeのような特殊な用途を除いてイミュータブルにするルールになってる。
・・・のだけど、WindowsFormのPointやSizeはしっかり変更可能になってる(笑
ヘジたんの目が届かなかったのだろう。

303 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:52:10 ]
>>302
ここで言う値型はプリミティブ型を除いたユーザー定義型の構造体のことです。念のために。

304 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:55:09 ]
WinFormじゃなくてGDI+だな
その辺はむしろラップしてるアンマネージドとの兼ね合いじゃないか

305 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:03:29 ]
WPFの構造体だってたいがい変更可能だよ
そのへんは割り切り設計
ちゃんとわかってたら問題ない

306 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:05:30 ]
C++/CLIっていうか、.NETって
typedefのようなエイリアスって無いんですかね?
これじゃ何も作れないような、、皆さんはどうしてるんですか?

307 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:12:46 ]
何を作りたいんだ?

308 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:20:20 ]
マクロでも書けば委員者ね?

309 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:21:35 ]
トリビアル・プロパティとトリビアル・イベントの存在意義はロック処理を自動でしてくれること
だった気がする

310 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:25:52 ]
>>307
何か特定のソフトウェアに依存する話ではなく
一般的なものだと思います。

typedef classA< classB< classC > > > arg_type;
void func( arg_type a );

C++ではこう出来ていたものが、

void func( classA< classB< classC > > > a );

.NETではこれしか出来ないというのは
利用者側は、いちいちclassA< classB< classC > > >型のオブジェクトを宣言しろってことですか?





311 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:30:57 ]
で、それだけで何も作れなくなるの?

312 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:33:12 ]
>>310
アセンブリ横断ではその機能はないが、C++/CLIつまり同じソースか
includeするHeaderファイルの範囲なら使えると思うけど。
C#の場合は using xxx = System.YYY.ZZZ; 同じソースないなら出来る。

313 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:34:09 ]
今のC#とVB.NETにはローカル変数の型推論もあるし、
常にclassA<classB<classC>>>と書かねばならないわけでもなかろう。
(もちろんクラスメンバや戻り値など、その必要性がある場面も依然として存在するが)

314 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:34:48 ]
C++/CLIはtypedef使えるぞ。

315 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:39:54 ]
>>310
むしろ出来ないってデマをどこで教わったんだ?
2,3行書けば検証できる話だぞ?
その例から「でもBoostのようなメタプログラミングが〜」とか飛躍しないでくれよ。

316 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:45:16 ]
>>311
激しく意欲を削がれます。
他にも、const参照が出来ないとか、
ちょこちょこ退化してる?みたいな部分が見え隠れするんで。
いろんなサイトの紹介文ではマンセー意見しか書いてなかったんで
余計にです。

>>312
CLRで使えないと、C++/CLI使う意味ないです。

>>314, >>315
>>312のいうアセンブリ横断のことです。
もちろん書いて試したし、検索もしました。

317 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:48:47 ]
>>313
型推論について調べてみます。
アドバイスありがとうございます。

318 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:04:36 ]
C++のconst参照みたいなコンパイラを騙くらかすだけのまがい物ではなく
実際に参照されているオブジェクトを変更不可として扱うconst参照を導入しようとすると
オブジェクトの検証にパフォーマンス上の問題が発生するのであえて採用してないそうだ。

319 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:28:26 ]
オブジェクト指向では、内部の実装を隠蔽するわけだが、
それによって、一見読み取りだけのメソッドでも内部では何か状態を
更新してるかもわからないし。
const参照は、なんちゃってオブジェクト指向のC++と違って現代的な
オブジェクト指向とは相性悪いってことだな。

320 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:54:17 ]
基のC++でもmutableとかあるしね。

逆に、.NETで表現するとしたら、IReadOnlyHogeとIHogeって2本立てにするのが落としどころだと思う。



321 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:19:45 ]
複雑なジェネリック型を晒すなと.NETのガイドラインに書いてあるんだよね

322 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:31:51 ]
Native C++の2次元配列から、C++/CLIの2次元配列に値をコピーしたいのですが、1つ1つの要素を代入する以外の、
一発でコピーできる方法が分からなくて困っています。
1次元配列の場合は、
double nativeVec[3] = {1, 2, 3};
array<double> ^cliVec = gcnew array<double>(3);
System::Runtime::InteropServices::Marshal::Copy(IntPtr(nativeVec), cliVec, 0, cliVec->Length);
でコピーできますが、
2次元配列の場合はどうすればいいのでしょうか?
以下のコードでは動きませんでした。
double native2DVec[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
array<double> ^cli2DVec = gcnew array<double, 2>(3, 3);
System::Runtime::InteropServices::Marshal::Copy(IntPtr(native2DVec), cli2DVec, 0, cli2DVec->Length); // ここでエラー
エラーは、
error C2665: 'System::Runtime::InteropServices::Marshal::Copy' : 16 オーバーロードのどれも、すべての引数の型を変換できませんでした
です。


323 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:08:52 ]
ピンしてmemcpyでどうだ。
#include <cstring>

double native2DVec[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
array<double, 2> ^cli2DVec = gcnew array<double, 2>(3, 3);
pin_ptr<double> p = &cli2DVec[0, 0];
std::memcpy(p, native2DVec, sizeof native2DVec);

std::copyでもできたけど、書くのが面倒だった。

ところで多次元配列の要素の連続性の保証ってあるよね?

324 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 21:52:35 ]
>>323
できました!
連続性の保障は怪しい気もしますが、とりあえずは手元で動くのでokということにしておきたいと思います…

325 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 00:28:22 ]
マネージ多次元配列はメモリレイアウトに関してなんら保障してなかったような・・・
ジャグ配列にして一行ずつコピーした方がいいんでね?
マーシャリングはともかくアクセスはジャグの方が速いし。

326 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 03:54:37 ]
>>325
3x3行列なので、ジャグ配列にするのもなんかなあ、という気分なのです。
最悪2重forでコピーかなあ。

327 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 20:04:50 ]
小さい行列を大量に扱うんだったら>>322-323みたいなのはかなり非効率だと思うよ
3×3と決まってるなら手打ちでいいじゃん

328 名前:デフォルトの名無しさん [2008/12/12(金) 00:25:00 ]
MFCのダイアログアプリで質問です。
画面上のボタンを押すとWindowsForm画面を開いています。
こんな感じです

ボタンの処理
Form1 ^ fm = gcnew Form1;
fm->Show();

画面は普通に開きますが
別プロセスみたいにメイン画面の下に隠れます
親ハンドルを指定すればいいのかな?と思い
下のようにしても裏に隠れます

Form1 ^ fm = gcnew Form1;
fm->Show(fm->FromHandle(GetSafeHwnd()));

親子関係にするにはどうやればいいのかわからないです。
fm->Parentやfm->Ownerを設定してもダメでした

MFCダイアログとWindowsForm画面の親子関係は無理なんでしょうか?
やりたいことはMFC画面上に.NETコンポーネントである
グラフコントロールを表示したいだけです。
素ではダイアログに組み込めないのでWindowsForm画面に組み込み
子画面として特定の位置に固定させようとしています。
画面は表示できたのに位置合わせだけがダメです。



329 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 08:05:01 ]
MFC 側で Window Activate 時に Form を前にしてやればいいんじゃね?

330 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 08:07:09 ]
後は、ホストするか
msdn.microsoft.com/ja-jp/library/676cbawx(VS.80).aspx



331 名前:328 [2008/12/12(金) 08:28:12 ]
レスありがとうございます。
少し進展がありました。

ラッパーというのを作って
public ref class HwndWrapper : public IWin32Window
{
public:
HwndWrapper(HWND handle)
{
this->handle = static_cast<System::IntPtr>(handle);
}

virtual property System::IntPtr Handle
{
System::IntPtr get()
{
return handle;
}
}

private:
System::IntPtr handle;

};



332 名前:328 [2008/12/12(金) 08:29:03 ]
Showのところでこうやると親子関係できました。

HwndWrapper ^ww = gcnew HwndWrapper(GetSafeHwnd());
fm->Show(ww);

ただ、親が動いても子は元の位置のままなのでちょっと不便です
ウインドウ上にボタンが乗ってるように一緒に移動してくれません。
MFC側でコントロールするとどうしても遅れが生じるので不自然っぽいです。

どうもうまくいかないので教えていただいた
「MFC ダイアログ ボックスとしての Windows フォーム ユーザー コントロールのホス」
の方をやってみます。

333 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 10:02:59 ]
子ウィンドウとownedウィンドウの区別も付いてないのか

334 名前:328 [2008/12/12(金) 10:52:09 ]
ホストの方法でいけました
ありがとうございました

335 名前:デフォルトの名無しさん [2008/12/13(土) 18:30:25 ]
ぬこでも〜のwindows SDK編のイントロダクションのコードが
cygwinでコンパイルで通りませぬ・・・
VSでも無理だったんですが原因わかりますか?

www.kumei.ne.jp/c_lang/sdk/sdk_00.htm

336 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:38:46 ]
スレチ、winAPIスレへ行け

337 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:53:26 ]
char使ってるからunicodeがらみだろうが
すれ違いの上エラーの内容も書かない阿呆か。

338 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:57:38 ]
VS2005の環境でプログラム書いていたのですが、
テキスト形式のデータを読みだそうとすると以下のエラーが出てきてしまいました。

System.ObjectDisposedException' のハンドルされていない例外が mscorlib.dll で発生しました。

追加情報: 閉じている TextReader から読み取ることはできません。

System.ObjectDisposedExceptionのことを調べてもいま一つどういうことなのかがわからなかったので、
何がダメだと言われているのか教えていただけないでしょうか?
初心者なので意味不明な質問になってしまっているかもしれませんが、よろしくお願いします。

339 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 02:03:39 ]
端的に言えば、Close/Disposeを読んだ後に、まだ何かやろうとしてるということ。
自分でそれらを呼んでいるか、自動変数のスコープを抜けるときに自動的に呼ばれたか。

340 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:29:08 ]
元のコードに原因がある。



341 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 13:12:47 ]
>338
こっち池

くだすれ.NET(超初心者向け)
pc11.2ch.net/test/read.cgi/tech/1160209713/

342 名前:デフォルトの名無しさん [2009/01/04(日) 04:35:53 ]
参照クラスって、使用しなくなったインスタンスを自動開放してくれるって
ことでいいんだよね?

343 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:11:08 ]
そんな単純なものじゃない
住む世界が違う

344 名前:デフォルトの名無しさん [2009/01/11(日) 01:45:20 ]
この言語でMFCは使えるんですか?

345 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 01:46:21 ]
使える

346 名前:デフォルトの名無しさん [2009/01/11(日) 02:07:07 ]
フォームアプリからMFCサポートに変更
MFCアプリから.NET使用&フォームアプリダイアログ作成
できるんですか?

347 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:08:36 ]
できる。聞くばかりじゃなくて、やってみればいいだろ
単純な MFC アプリケーション作って、そこで CLR サポート有りにすればいい

348 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 02:11:00 ]
MFCウィンドウ内に.NETコントロールを置くほうはCWinFormsControl/View/Dialgのクラスもある。

349 名前:デフォルトの名無しさん [2009/01/11(日) 16:10:30 ]
全然わかりません、MFCで共通言語ランタイムサポートを選ぶと/MTと一緒はダメと言われます。どの項目を選んでもダメです。
これはどうすればいいんですか?

350 名前:デフォルトの名無しさん mailto:sage [2009/01/11(日) 16:38:36 ]
MFC の共有DLLを使えよ。どの項目を選んでも駄目ですって条件反射で書いてるんじゃねぇ



351 名前:デフォルトの名無しさん mailto:sage [2009/01/12(月) 11:22:55 ]
VS2008を再インストールしたら治る可能性があります。とかいうからやったらほんとに治った
共通言語ランタイムサポートにできました!

352 名前:デフォルトの名無しさん [2009/01/18(日) 05:10:12 ]
アンマネージからrefクラスの関数を呼び出すにはどうすればいいんですか?

353 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 05:36:03 ]
managed -> managed で呼び出すのと同じ

354 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 05:39:11 ]
>>352
静的メンバなら>>353の言うとおり。
非静的メンバの場合、#pragma unmanagedや/clrなしの領域から直接呼ぶことは不可能。
#pragma managedな領域にそれを呼び出すだけのラッパー関数を置くしかない。
インスタンスの保持だけは、<msclr/gcroot.h>してmsclr::gcroot<>で可能。
例えばこんな感じ。
#include <msclr/gcroot.h>
msclr::gcroot<System::Object^> CreateObject()
{
return gcnew System::Object;
}
int GetHashCode(msclr::gcroot<System::Object^> const& h)
{
return h->GetHashCode();
}
#pragma unmanaged
#include <iostream>
int main()
{
msclr::gcroot<System::Object^> h = CreateObject();
std::cout << GetHashCode(h) << std::endl;
}


355 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 05:40:25 ]
ラッパーはmanaged領域でのネイティブクラスでも可能。ただし、依然としてmsclr::gcrootは必要。
#include <msclr/gcroot.h>
class XObject {
public:
XObject() : o(gcnew System::Object) {}
int GetHashCode() {return o->GetHashCode();}
private:
msclr::gcroot<System::Object^> o;
};
#pragma unmanaged
#include <iostream>
int main()
{
XObject o;
std::cout << o.GetHashCode() << std::endl;
}

356 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 05:51:22 ]
はっきり言って全然わかりません。同時に使うのは厳しすぎますね
じっくり解読しますありがとうございます。


357 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 07:01:49 ]
354と355のコードでは、refクラス = System::Object、関数 = GetHashCodeとして書いてある、一応。

358 名前:デフォルトの名無しさん [2009/01/30(金) 01:24:35 ]
なぜに、MFC+.NETなんて使う必要があるんだ?
.NETが許される案件なら.NETで押し通せばいいじゃん

大抵の案件は、.NETは拒否られる



359 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 01:28:02 ]
自分の狭い世界で語られてもな

360 名前:デフォルトの名無しさん [2009/01/30(金) 02:06:05 ]
.NETは遅い



361 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 02:35:18 ]
そーだね
でもrubyよりは速いよ
起動以外は

362 名前:デフォルトの名無しさん [2009/01/30(金) 21:08:41 ]
Visual Studio 2008がやたら、重いんで
ちょっとしたテストプログラムはテキストエディタで作成して
コマンドラインからビルドしたいんですけど、どうすればいいのかしらん?


363 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 21:16:08 ]
nmake か VCBuild を使う

364 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:18:18 ]
C++/CLIのString型とC言語のchar文字列は、
どのようにデータをやり取りさせればいいのでしょう?

char c_str[]="1234";
String ^cli_str;

cli_str = c_str; // cli_strに"1234"をコピー

と言った事をやりたいのですが。



365 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:31:23 ]
cli_str = gcnew String(c_str);


366 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:34:52 ]
2008以降ならmarshal_asおよびそのソースコード

367 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:40:43 ]
バカ正直にやるならASCIIEncoding

368 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:46:30 ]
その実体はMultiByteToWideChar

369 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 22:49:20 ]
ありがとうございます。
コンパイルやってみて上手く動きました。

String型文字列をchar型にコピーするのについても質問したいのですが、

c_str[0]=cli_str[0];

というのを繰り返す事でコピーできる事まで調べました。
これを行う為の関数のようなものはあるのでしょうか?

370 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:00:33 ]
・・・みんないっぱい検索キーワード出してるじゃん
まじめに探したの?



371 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:08:35 ]
marshal_contextを使うか、CString/CStringA/CStringWを使うか。
どっちもexpress edtionだと使えなかったと思う。
裏技的にはsprintfを使う方法がある。


372 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:12:30 ]
だから、WideCharToMultiByte があるじゃないか

373 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:17:04 ]
>>372
それは単なるUNICODE-ANSI変換でない?

残りの方法はこんなとこ、使い方はぐぐってね。
Marshal::StringToHGlobalAnsi
Marshal::StringToHGlobalUni
PtrToStringChars

374 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:18:12 ]
>>369
それ仮名・漢字が入ると死ぬよ。

375 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:19:24 ]
Encodingが一番確実か

376 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:25:26 ]
>>373
Unicode -> MBCS変換だろうけど
WideCharToMultiByteは変換に使えないの?

377 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 23:28:02 ]
>376
そのまえにToArrayしてpin_ptrして、サイズ計算して、領域確保して変換だから
ほかの方法のほうが断然楽

378 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 01:33:06 ]
>>377
ToArrayよりPtrToStringCharsだろ。
いずれにせよ、pin_ptr<const wchar_t>化してしまえば、
既存のライブラリが使えるので、持ち合わせがあればそんなに悪くない選択肢だと思う。

379 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:04:04 ]
C++/CLIで書いたプログラムって
Monoで動く?


380 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:09:57 ]
動くのもあるし、動かないのもある



381 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:23:46 ]
/clr:safeのものは動く。
ただしSTL/CLIのサポートはまだのようだった。

382 名前:デフォルトの名無しさん [2009/02/01(日) 01:06:00 ]
cl.exe でコマンドラインからコンパイルすると
〜.exe.manifest
なるものも生成され、削除すると〜.exeが起動しなくなります。

exe単体で起動できるようにするにはどうしたらいいのですか?


383 名前:デフォルトの名無しさん mailto:sage [2009/02/01(日) 01:13:32 ]
>>382
mt -manifest HOGE.exe.manifest -outputresource:HOGE.exe;#1
これやると、manifestがexe内に埋め込まれるので、manifest無しで動く。

384 名前:デフォルトの名無しさん [2009/02/01(日) 01:29:08 ]
>>383
ありがとう

できました。多謝です

385 名前:デフォルトの名無しさん [2009/02/01(日) 23:49:39 ]
CLIスレ伸びませんねw

実際に使ってるところある?

386 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 00:27:50 ]
仕事で事前調査用に使ったが、周りに理解されず、本番はVC++6.0でMFC4.2ときたもんだwww

なんか、布教にいい道具があればいいのだけど…。

387 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 01:41:31 ]
WPFとかに対応しない限りまず消滅すると思った方がいいだろうね。


388 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 02:25:50 ]
WPFが俺の思ってる物と同じなら、対応するとかナニ言ってるんだって感じ。

まあ、Cのポインタ全部絶滅させられるならどっちでもいいがw

389 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 02:27:19 ]
>>388
絶滅させられないからこそのC++/CLIじゃないの?w

390 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 08:48:55 ]
今のところMFCのCArchive使ってファイル保存していた古いデータを
.NET側から簡単に読み込むためのモジュールを作るのに重宝してるってぐらいだなぁ。






391 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 19:55:31 ]
WPFみたいなほとんどマネージコードによるマネージコードのための超高レベルフレームワークを
わざわざC++で使う意味がわからない

392 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 01:32:22 ]
まぁP/InvokeやCOWだけじゃ困る場面もたまにはあるわけだし。
やってることは凄いんだが評価されないC++/CLI。

とりあえず「C++屋のための.NET言語」という勘違いをされ気味なのはなんとかすれ。

393 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 02:17:17 ]
進化したMS版C++Builderくらいにしか思ってませんでしたw

394 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 02:20:41 ]
使いやすいGUIライブラリ付きのC++という捉え方は誤解の元だね


395 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 02:27:14 ]
どうして誤解なのか解説しちくりくり

396 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 03:16:05 ]
使いやすくないからな。
GUI部分はC#でいいべ。

397 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 09:07:45 ]
C#の「#」は、++++ で C++++の略でしたっけ?

398 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 09:21:42 ]
>>396
まあそうなんだが、GUIだけ分けるのもかえって面倒だったりするしな。


399 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 15:51:47 ]
>>389
何言ってんだお前

400 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:28:07 ]
>>397
別に略ではないな



401 名前:デフォルトの名無しさん [2009/02/04(水) 15:17:24 ]
で、どうしろと?

402 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 21:50:29 ]
とりあえずチンコでも揉んでみたら

403 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:13:08 ]
チンコとかの話しかしない人に必要な言語は
C++/クリ(ry

C++/CLIは地味だけど、商用デスクトップアプリで
.NET使う場合はよけて通れない言語じゃないかなぁ。
.NETなアプリはまだ本家MS様も出してないよね?
Expression もハイブリッドだし。


404 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:18:08 ]
ネイティブとマネージドのミックスタイプのアプリはMSのプロダクトに増えたけど、
基本的にホスティングがおおいな。
C++/CLIはあまり見かけない。

405 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:53:46 ]
>>404
あ〜。ホスティングだったのか。
勘違いを正してくれてありがトン


406 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 22:59:00 ]
XNAのWindows向けアセンブリくらいだろうなぁ。

407 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 23:36:35 ]
俺の言ったカンファレンスじゃ、ベンダーがC++/CLI がベストと言って楽しそうだった

408 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 23:51:11 ]
WPFも一部C++/CLIだな
XNAのフレームワーク部分はC#だよ

409 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:03:15 ]
>>408
んー? Reflectorで眺めた結果で予想してるだけだが、
Microsoft.Xna.Framework.Game.dll以外はほぼC++/CLIのアセンブリでしょ。
FBXインポータが3MB超なのも、もろにfbxsdkのバイナリとマージしてるからかと。

410 名前:デフォルトの名無しさん [2009/02/05(木) 01:17:05 ]
ネイティブとマネージドのミックスタイプのアプリは現在、どの程度可能
なのか?

C++Builderでは、確かDelphi(Object Pascal)のコードがコンパイルできたと思う
が、こういうことがネイティブとマネージドの間で透過的にできるのか?

もちろん、マネージドコードとネイティブコードの混在ははるかに難しいと
思うが、これを簡単に実現できる方法を提示してもらわないとマネージドは
使う気になれない。

大体、トラブルがリンカエラーで出てくるというのは、エラー箇所の特定が
非常に難しく、最悪の状態ではないか?






まぁ、C#が良いみたいだけど、結局、VBだろが、VC++だろが、C#だろが
Windowsプログラミングになるとどの言語だろが関係ない。

結局、MIcrosofが決めた訳の分からん取り決めに振り回されることになる
から。



411 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 01:18:58 ]
日記もつけたし今日は寝る。お休み。

412 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 01:29:23 ]
>>410
その混在を実現しているのが今のところC++/CLIだけ。

#pragmaでネイティブとマネージドどっちのコードを吐くか切り替えられる。
ネイティブクラスとマネージクラスの混在(has Aでの包含)は
透過的ではないものの、手段は用意されている。

413 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:22:24 ]
blogs.msdn.com/bclteam/archive/2006/06/23/644343.aspx

ただのネイティブ関数呼び出しであるP/Invokeですら
導入した瞬間にこんだけの「隙」が出てきてしまうのだから
簡単に実現できる方法って言われてもお花畑だよなぁ。

理想に対する泥臭い現実解としてはイイ線いってると思うけどねぇC++/CLI。

414 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:58:44 ]
とりあえずガンガン使っていくので今後ともよろしく>C++/CLI

使って情報を出さないとね。ググった結果に引っかかるサンプル増やせば
ちったあ底辺広がるだろうし。

415 名前:デフォルトの名無しさん [2009/02/10(火) 09:57:12 ]
バイナリフォーマットで100MBほどのデータを
シリアライズしようとしているのですが、
デシリアライズするときにメモリを数倍も消費して
ロードできないのですが、

デシリアライズをカスタマイズしないとできないのでしょうか?

GC::Collectするとメモリがいっぱい回収できます。


416 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:58:03 ]
諦めてXmlReaderかストリーミングでLINQ to XML使った方がいい

417 名前:415 mailto:sage [2009/02/10(火) 23:00:48 ]
結局、自前で読み書きするようにしました。


418 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:54:41 ]
>>392
> やってることは凄いんだが評価されないC++/CLI。

MSがC#を前面に押し出したから見向きされなくなったよね。
それにC++はもともと敷居が高い言語だけど、
マネージドが入るとさらに敷居が高くなるからね。
員数仕事じゃ使うの無理じゃない?


419 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:58:36 ]
>>418
>MSがC#を前面に押し出したから見向きされなくなったよね。
その頃はまだmanaged C++といってほとんど試作品」だったよ

420 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:59:16 ]
C++/CLIのコンパイラのソース出してくれないかなあ。
CLIじゃなくて、JVMのバインディング、面白そう。



421 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:00:00 ]
>>419
「その頃」違いです。

422 名前:デフォルトの名無しさん [2009/02/11(水) 17:01:01 ]
そもそも、.NETはお金を頂くソフトウェア作るには不向き
・遅い
・ソース丸見え
・フレームワークインストール必須
・FAでは絶対に無理

枚挙に暇がない

423 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 17:35:54 ]
今時そんなのが問題になるのか?


424 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 17:48:12 ]
>・ソース丸見え
あっちこちでネガネガしてる奴のようだ。ほっとくに限る。

425 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:58:12 ]
組込みでC言語、VB6を少々

しかやった事無いけど、CLRでデータロガ作ってみた。
Windowsの知識はほとんど無いけど、すごく簡単ね

Win32Apiでやろうと思ってたけど、自分のツール程度ならCLRでいいかな。
とりあえず田舎で本が手に入らないからゴリ押し(ほぼC言語w)で作成中、
勉強すればもっと便利に使えると思うんだけど・・・。

皆さんはどうやってC++/CLRを勉強したの?

426 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:00:29 ]
勉強?
どこをどう勉強する必要があるんだ??


427 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:17:43 ]
>>425
C++の経験者が使う言語だと思ったほうがいい。
Win32APIやCのライブラリを使わないならVB.netやC#やったほうがいい。

428 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:18:12 ]
デフォルトでスマートポインタなCOMの一種と考えるとそれほどでもない

429 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:36:59 ]
C++とC#の経験があればそのまま使える
というか,そういう人にしか旨味のない言語
簡単だと思うのはC#やVB.NETを触ったことがないから

430 名前:425 mailto:sage [2009/02/12(木) 03:33:22 ]
>>426-429
ありがとう、意見を参考に、ずっとC#のサンプルコードいじってた。
とりあえず腹減ったので寝ようかな。

>>427
当初Win32APIをやろうと思ったけど、開発効率重視で諦めました。

*組込み屋なんで速度と柔軟な処理が可能かが気になりましたが、
そんな難しいもの作るわけじゃ無いので。



431 名前:デフォルトの名無しさん [2009/02/14(土) 19:15:48 ]
E-mail欄ってほとんどE-mail欄の役割は果たしてないよね。

432 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 21:38:35 ]
果たしてるスレもあるよ、カードゲームのトレードスレとか

433 名前:デフォルトの名無しさん [2009/02/21(土) 13:57:06 ]
良い時は悪い時。
悪い時は良い時。

434 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 11:54:55 ]
C++/CLI なんですが、教えてください。
(スレ立てるまでもないスレで誘導されてきました)

<NewDataSet>
 <OYA>
  <DATA1/>
  <KODOMO>
   <DATA2/>
  </KODOMO>
 </OYA>
</NewDataSet>

こんな感じの xml データを操作したいと思います。
DATA1 なら、 DataSet.Tables[ "OYA" ]->Rows[ 0 ][ "DATA1" ] で参照できるのですが、
DATA2 にはどのようにしたら参照できるのでしょうか。

435 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 12:00:31 ]
>>430
デスクトップでプログラム書く時は、組み込み脳は捨てろ。

436 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 12:12:44 ]
>434
それ C++/CLI と関係ないし

Schema はどう定義されているの? XML読み込んだDataSetからSchemaを見てみたら?

437 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 12:13:36 ]
そういう質問は軽くC#の書き方覚えてC#スレで聞いたほうが早いよ

438 名前:434 mailto:sage [2009/02/22(日) 14:27:57 ]
別の方法で解決できました。ありがとうございました。

>>436
こんな感じです。
(xs:schema とか xs:complexType など、なくてもわかりそうなところは消しています)

<xs:element name="OYA">
 <xs:element name="DATA1" type="xs:string" minOccurs="0" />
 <xs:element name="KODOMO">
  <xs:element name="DATA2" type="xs:string" minOccurs="0" />
 </xs:element>
</xs:element>

このスキーマ自体も DataTable.Add や DataColumn.Add などでプログラムで作成したモノを
ファイルに落としていました。

>>437
その言葉がヒントになり、System::Xml::XmlElement などを使って解決することを思いつきました。
意外なほど簡単でびっくりです。

439 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:31:08 ]
C#で試したらLINQに行っちゃう気が

440 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 14:49:58 ]
LINQ楽なんだよな〜
3.5に移行する気ないからテストプログラムでの使用オンリーだけど



441 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 15:36:22 ]
System.Xml.Linqの使いやすさは異常
言語としてのLINQサポートがなくても十分使いやすいと思う

442 名前:434 mailto:sage [2009/02/22(日) 18:19:33 ]
確認したらウチの 2008 standard にも C# 入ってたし、覚えようかな。。。

443 名前:デフォルトの名無しさん [2009/02/24(火) 23:47:48 ]
覚えても使う機会が(ry

444 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:13:15 ]
おれ、がめついからVS2008EEを全部インストールしたけど
一番使わないと思ったVC++を今一番使ってる

445 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:18:35 ]
cl vjc fsi jsc ... やっぱり一番使うのはmlでっしょ

446 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:16:16 ]
いちばん使わんのはVBだな

447 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:20:23 ]
ILASM最高

448 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:03:01 ]
newとgcnewって
マルチスレッドでコンパイルすれば、
スレッドセーフですか?


449 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:48:00 ]
当然だ。でなきゃ使い物にならないだろ。

450 名前:デフォルトの名無しさん [2009/03/03(火) 23:00:37 ]
早急に回答を頂きたいのですが、
テキスト(アスキー)をバイナリに変換する方法を教えてください。
本当に急いでいます。よろしくお願い致します。
悩んでいます。本当に。



451 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:07:42 ]
テキストもバイナリの一種ではあるのだが。とか言ってみる。w
なにをしたいの?

452 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:07:56 ]
エスパーさん
出番ですよー

453 名前:450 [2009/03/03(火) 23:11:59 ]
>>451

>なにをしたいの?
出世です。

bitconverterあたりを調べても何も出てきませんよ。ため息以外は。
本当に急いでいます。今日は寝ません。本当に。

454 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:13:54 ]
>>453

>>451

> >なにをしたいの?
> 出世です。

> bitconverterあたりを調べても何も出てきませんよ。ため息以外は。
> 本当に急いでいます。今日は寝ません。本当に。

455 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:19:50 ]
printfでいいじゃない。ヘキサダンプもバイト出力も自由自在。

456 名前:450 [2009/03/04(水) 00:29:54 ]
出力させても意味はないのです。
バイナリデータにしないといけないのですよ。
回答まだですかね? 眠くなってきましたわ。
本当に。

457 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:47:16 ]
だから冗談抜きでテキストはバイナリなんだけど

458 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:50:25 ]
じゃあfprintf

459 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:00:36 ]
適当に圧縮して保存すればおk

460 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:42:09 ]
charまたはstringをintにキャストしたいという意味だろうか



461 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 02:09:17 ]
ならばsprintfで

462 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 05:20:49 ]
C++/CLIではC#のようなAnyCPUのEXEやDLLは作れないんですか?


463 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 08:22:34 ]
>462
/clr:safe にすれば?

464 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 10:05:25 ]
あーそんなオプションがあったんですね
ありがとうございます

465 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 10:09:17 ]
C++/CLIを使う価値99.9%減だけどな

466 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 10:20:32 ]
/clr:safeだとコンパイル通りませんでした;;

467 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 10:26:08 ]
/clr:safeの場合はネイティブコードを混ぜられないからな
単なる劣化C#になっちゃうからC#使った方がいいよ

468 名前:デフォルトの名無しさん [2009/03/04(水) 10:42:40 ]
0x1234 みたいなテキストをバイナリの2byteとかにしたかったのかな...

そんな事で出世できる会社がうらやましいわw



469 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:24:29 ]
何がしたかったんだろうな
エスパーじゃないからさっぱりわからん

470 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:30:49 ]
GZipStream でも使えばよかったのにな



471 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 18:15:31 ]
C++/CLIのコードで「reinterpret_cast」の部分を選択してコピー ( Ctrl + C ) したらVSが固まるのって俺だけ?

472 名前:450 [2009/03/04(水) 23:48:34 ]
>>468
まさに、それがしたかったのですよ。
やっと理解者が現れたか。

473 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 23:57:01 ]
>>468 の才能に嫉妬。w

sscanf とかでもいいんじゃないの。もっといいのあったと思うけど。

474 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 00:05:52 ]
Converter でいいんじゃね?
今度はエンディアンの違いとかで騒ぎそうだけどさwww

475 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 00:20:51 ]
C 互換の数値リテラルなら strtol() かな。
書き下ろしても大したこと無いように思うけど。

476 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 12:48:19 ]
>>472
そうかわかったぞ
GoogleのTwitterをいち早く読んで
出世にいかそうとしてるんだ・・・・なんてなw

477 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:25:34 ]
こんなこと言うのはなんだけど、そんなのC++/CLIでやる
ことじゃないよな・・・
しかも、C#とかJavaとかCとかならまだしも、なぜC++/CLI ・・・

478 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:35:00 ]
いままで MFC を主に使ってた人間が C++/CLI を使い始めようというときに、
よい参考書ってないかな? ネットで調べつつ、特に問題なく書くことは出来るんだけど、
なにか見落としてそうで怖い。

他のところでも聞いてみたんだけど。。。

479 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:15:33 ]
C++は初心者では無いけど、.NETは全くの初心者というのなら多分無い

既に知っているかもしれないが、C++も.NETも使いこなせるような人がその両方を活かすために選択するのがC++/CLI
C++を勉強するために選択するべきものではないし、.NETを勉強するために選択するべきものでもない

480 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 10:10:56 ]
>478
現状で特に問題がないなら、むしろ .net framework の癖というか、ライブラリの作り方が
載っている C# の本を買ったほうがいいお
そこらに載っていることをC++/CLIで表現できれば十分じゃない?



481 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:10:11 ]
C++/CLIで書かれてる情報だけを調べて特に問題なく書けてきたなら尊敬に値する

482 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:40:00 ]
ttp://msdn.microsoft.com/ja-jp/library/ms235289(VS.80).aspx
とりあえずこれ読むといいよ。

前にマネージ型の実行時型情報の扱いでちょっと苦労したな。
SomeClass::typeid でType型が返ることさえ分かってしまえば
全部解決なんだが、なかなかそこに辿り着けなかった。
つーかなんでIntelliSenseで出ないんだこれ。

483 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 11:44:05 ]
それアンマネージC++→C++/CLIじゃなくてManaged C++→C++/CLIだよ
ひたすら表記の違いだけが書いてあるだけ
.NET初めてなら実行時型情報なんてそもそも何のことかわからんでしょ

484 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 12:04:54 ]
あのぅ、RTTIは…

485 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 12:51:46 ]
>>483
そうだけど、ManagedとCLIでほとんど全部変わってるので、
結果的にC++/CLI構文の端的な解説みたいになってる。
まあマネージドの概念とかeventみたいな特殊なのは
他のところで頑張って覚えてもらうしかないが、
その場合もここで出てきたキーワードでMSDNライブラリ引けば
だいたい解説があるし。

あと実行時型情報なんて必須知識ではないし、
他のも必要なものだけ覚えりゃいいと思うよ。
人によっては value class や enum class も必要なかろう。

486 名前:478 mailto:sage [2009/03/06(金) 23:02:03 ]
たくさん、ありがとう。
とりあえず >>482 さんの教えてくれたサイトを読んでみます。

自分でも調べているところですが、>>479 さんも仰られているように .NET を
まず覚えないといけなさそうですね。いただいたレスの中にさえ見覚えのない
単語がある状況からしてなんとかしないと。

>>481
意外となんとかなるモノですよ。
まあ、C++/CLI そのものではないけど、ちょっとずついろいろと触ってきてるし。

487 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 23:05:34 ]
最低限C#は読めないと話にならないよ

488 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 17:56:55 ]
ネット上のサンプルコードの量はVBが一番多い気がする
でもVBのよさが分からない。


489 名前:478 mailto:sage [2009/03/07(土) 19:08:36 ]
調べていての感想は
「‥‥なんか VB みたい」
でした。w


C# は読むだけなら別に問題なくできたりします。
(ネットで拾った C# のコードを C++/CLI に置き換えたりしてお勉強してます)

一番戸惑うのは、自分が欲しい機能を持った関数がどこにあるのか見当が付けづらいことですね。
基本的な手順などは Windows の API や MFC を使う場合と大差ないような気がするので、
既存のコードを読む場合には VB でも C++/CLI でも C# でもわかるのですが、自分で書く場合に
どこにその関数があるのかわからず途方に暮れるというか。w

昨日も、マネージ拡張でちょっとしたツールを書いてたのですが、書いてる時間よりも
必要な関数の情報を集める方に圧倒的に時間を要してました。むー。

490 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:09:50 ]
C++/CLIは異なるアーキテクチャを混ぜただけだからややこしくなる。

APIやMFCを使いたいならC++の方が制約なしに使えるし。
.NETフレームワークを使いたいならC#だろうし。
初めのうちはどちらかを選んで情報を収集したほうがいいよ。




491 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 22:54:05 ]
C#やVBなら慣れてくるとインテリセンスでテキトーにメンバ探せる
だまされたと思ってちょっとVC#触ってみたら?
異次元の使いやすさでアホらしくなるからw

492 名前:デフォルトの名無しさん [2009/03/17(火) 17:03:00 ]
畑を荒らしてるのはモグラじゃないよ。
モグラの穴を利用しているネズミだよ。
モグラは肉食だから野菜は食べないよ。

493 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:00:28 ]
穴掘る時点で荒らしてます。

494 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:03:10 ]
アンマネージのコードで作成されたウィンドウにマネージコードのコントロールを乗せる方法ってないですか?

495 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 20:13:41 ]
あります。

496 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:07:38 ]
>>495
出来ればヒントだけでもお願いします。
あるソフトのプラグインで複雑なGUIを組みたいのですがC++ CLIの情報自体が少ない上に
こんなニッチなことをしている人はいないみたいなので。

497 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:41:29 ]
>496
上の方のスレ読んだ?

498 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 05:01:11 ]
>>497
ありました。
MFCですか。使ってないけどなんとかやってみます。

499 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 14:31:53 ]
いま、C++/CLI の勉強中なんですが、C# との連携をやってみたくなりました。

C# で画面系を作って、それ以外を C++/CLI でやってみるとか考えているのですが、参考になりそうな HP とかないですかね。
自分でも調べ始めたところなんだけど、間違った方向に行かないようにするためにも最初だけは他力に縋ってみたくて。

500 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 15:10:23 ]
春休みかあ



501 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:47:42 ]
>499
C++/CLI は普通にアセンブリを作れるから、C++さえわかっていればC#からそれほど
離れている訳じゃなく、構文上の癖だけ理解すればいいんだけど、C++はできるんだよね?

502 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:53:08 ]
>>501
C++ は特に問題ないす。
C# とかもたぶん問題ないです。書かれているのを読むだけなら普通に出来ます。

C++/CLI を調べるときに MSDN を読むとほとんど常に C# とか VB とかの関数も併記されているので
一緒に使えるんだろうな、とか思ったのが連携させたいと思ったきっかけでした。

「アセンブリ」、調べてみます。


>>500
まあ、あの質問の仕方ではそう思われるすね。たしかに。

503 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:56:18 ]
まあ参照設定すれば見える。
それも同じソリューションなら適宜やってくれるはずだし。

504 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:28:25 ]
>502
ほれ。これで充分じゃね
ttp://vene.wankuma.com/ecma372/08_overview.aspx

アセンブリはメタデータ付きのDLLのことだお。.NETでは EXE と DLL は両方ともアセンブリで
違いはスタートアップの有無だけ。だから、EXE も参照することができるんだお

505 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:07:35 ]
従来のC関数もEXEからエクスポートできたりするわけだが。

506 名前:499 mailto:sage [2009/04/03(金) 22:25:42 ]
返信をくれた方、ありがとうございます。
アク禁を食らってました。(某報道機関所属じゃないですw)

いただいたアドバイスを元に試験用プロジェクトをいじり倒した結果(そこまではしてないけど)、
普通に C# と C++/CLI でプログラムを組めるところまで来ることが出来ました。

‥‥ほんっとに便利な世の中になったモノです。
文字コードの変換も数行で終わっちゃうんだもの。(´・ω・`)

507 名前:デフォルトの名無しさん [2009/04/17(金) 09:39:44 ]
ageさせてもらいます。
C#の方からC++/CLIを経由(ラッパ)してアンマネージのMFCクラスを使う方法で困っています。
C#→C++/CLI→CWndのCreate()を呼ぶと、内部のAfxGetInstanceHandle()でassertが出ちゃうんです。
どうもMFCの初期化をしてやらなくちゃならない様なのですが、さっぱり情報がありません。


508 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 12:15:00 ]
ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=34991
同じ質問を見たな

509 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 14:14:21 ]
解決しました。
MFC拡張DLLをひっつけるのではなく、単なるクラスライブラリにしたら
うまく行きました。
お騒がせしました。

510 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 00:48:46 ]
CLIはヘッダーに実行コード書くのに違和感が...



511 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 00:52:27 ]
それは、単にVC++の新規プロジェクトで作成されるコードがそうであるというだけのことだろ。

512 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 09:03:44 ]
そうだけど、いちいち書き直すのめんどくさいんだよな。
普通に宣言と実装に分けてくれればいいのに、
なんでこんなことになってんだろう。

513 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:09:53 ]
C# とか他の .net 開発言語?でそうだからなんじゃない。
ヘッダとコードが別々な C/C++ の方が珍しいってどこかで聞いた。

そんな分離の話よりも、ひとつのフォームとかのコードをすべて同じファイルに記述する
人が多いことの方が気になる。ちょっと規模が大きくなるとごちゃごちゃして分かりづらいことこの上ない。
そのほかにも VB6 の頃に不満に感じてたことを、いまここでまた目にするとは。。。

514 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:43:50 ]
VBは知らんが、今のC#はデザイナで作ったコードと
ユーザーが実装したコードは別になってる。
あれと同じようにしてくれればそれでいいんだが。
VS2010でC++に大きく手が入るってことになってるが、
ぜひ変更して欲しいところだ。

515 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:45:17 ]
むしろヘッダに実装全部書いても問題のない言語デザインに変更してほしい

516 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:21:25 ]
プロパティなんていちいち分離して書いてられないもんな
ただでさえ面倒な文法なのに

517 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:43:11 ]
>>515
むしろ、ヘッダを書く必要のない言語にだろう。
D言語ではコンパイラがコンパイルするときにヘッダファイルを自動生成してくれるらしい。

テンプレートとかどうなってるのかは知らんけど。

518 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 22:03:28 ]
よく知らないけど n1778 とか

519 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 23:57:24 ]
まあC++はC++の文法であることが存在意義だからな。
嫌ならおとなしく最近の言語を使うしかあるまい。

520 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 19:31:20 ]
そうかなあ



521 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 23:03:28 ]
C++/CLIは進化したC++として使うための言語じゃないでしょ
逆に「C#アンマネージ拡張」でよかったのに

522 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 08:50:34 ]
ヘッダとソース分けると
using namespaceがうざいことになる。

まーヘッダだけフルパスで書けばすむんだが。

523 名前:デフォルトの名無しさん [2009/05/11(月) 10:57:13 ]
過疎スレに質問。

C#やVB.NETってdecompiler使うと生ソース丸出しになっちゃうけど、
C++/CLI で clrsafeでないソース書いてもやっぱ丸出しになっちゃう?


524 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:18:22 ]
マネージド部分は当然

525 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:29:59 ]
しかし何で、見えるのを気にする奴がいるんだ。
はっきり言ってどうでもいい。どうせ見てもわかる奴は見ないし。
見たい奴はわからないだろうから。

526 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:39:17 ]
.NETの場合はメタ情報がしっかり残ってるというのがポイントだな。
それと逆コンパイルのツールが手軽に手に入るといったところか。
ソースが逆生成できるというならそれなりのツールを使えばCからでも
相当の精度で可能なのだが、マクロやテンプレートの展開でソースが
スパゲッティになったり関数やクラス名など型情報が抜け落ちるので
その分解析しづらい。
.NETでもクラス名や関数名のメタ情報を書き換える程度の
難読化ツールを使えば解析しづらくなるから使ったらいい。

527 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:42:57 ]
実際ある程度の規模のソースになると、仕様書もコメントもないソースを提示されても
見る気も起きないのが普通。
見られて困るといってるのはパスワードを入れるとエロ画像が拝める系のしょうもない
シェアウエアの作者と相場は決まっている。

528 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:58:48 ]
表記法がまるで入れ替わっていて美しくないと思うけど、
仕様でミスった方はC#でいいよね。

C#
ファイナライズ ~MyClass()
ディスポーズ IDisposable.Dispose()

C++/CLI
ファイナライズ !MyClass()
ディスポーズ ~MyClass()


529 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:58:59 ]
>>528
C#使ったことあるの?

530 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:02:26 ]
あったらこんなこと書かないでしょw



531 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 18:52:35 ]
C#でもディスポーズを~MyClass()と定義するべきだったと思う。

532 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:11:06 ]
>>531
ヒント:経緯。順番。

533 名前:デフォルトの名無しさん [2009/05/19(火) 23:57:42 ]
C#のディスポーズは歴史的な失敗作

534 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 00:11:45 ]
って、いうかGCに対応する為に
覚えなきゃならない概念が増えるのがイヤだ。
弱い参照だのトラッキング参照だのファイナライズだの

535 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 08:20:08 ]
VS2010ベータが出たので入れてみたがC++/CLIでIntelliSenseが使えなかった。


536 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 11:35:35 ]
>535
C++って0x対応とIntelliSense強化がメインじゃなかったっけ?


537 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 12:02:59 ]
CLIじゃないC++ではIntelliSense使えるし、
C#にあったコンパイル前にエディタ上でエラー表示する機能も追加されてる。

なのになぜかC++/CLIでは
IntelliSense: 'Unavailable for C++/CLI'
と表示されてしまう。

538 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:40:46 ]
助けてくだちい
C#からC++のクラスライブラリを使いたいので、
C++/CLIでラップするクラスライブラリを作っていたら、
何かC++のクラスのインスタンスをC++/CLIでnewすると、
例外が出てしまいますーorz
アンマネージコードのデバッグを有効にするとセーフ
回避する方法ありますか?


539 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:46:50 ]
別のDLLのクラスをnewしようとしてるんじゃねぇ?

540 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:23:56 ]
>>538
gcnew



541 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 22:05:06 ]
>538
人にものを聞くときは例外ぐらいコピペしろよ、このデコ助野郎

542 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:16:43 ]
>> 541

すみません。
例外は以下の通り。

System.Runtime.InteropServices.SEHException はハンドルされませんでした。
Message="外部コンポーネントが例外をスローしました。"
ErrorCode=-2147467259(0x80004005)

>> 540
アンマネージの実体は、newで作るんですよね?

>> 539

C++のクラスライブラリは、static libです。
dllにしても変化なし。
C++のクラスに、virtualの関数が無ければOKです。
何故??

543 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:45:45 ]
InteropServices の例外?
COMオブジェクトでもコンストラクタで生成してるの?
ライブラリの実績はあるんだよね

544 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 13:39:10 ]
>> 543
C++の方は、DirectShow(COM)を使いに行きます。
ライブラリの方は、C++ではちゃんと動いてます。

自分も、COM辺りが怪しいのかなと思って、COMを一切アクセスしない
空のクラスをテストで作ってみたのですが、それでもダメでした。

上で書いたvirtualというのは間違いで、今色々試したところ、
クラスにメンバ変数があるとダメの様です。意味不明。

ただ、DirectShowのサンプルにあるBaseClassesというlibを流用しています。
それが引っ付いてるのですが、グローバルでstaticな変数定義とかがあるので、
その辺りで何か問題があるのかもしれないですね。

545 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 13:56:01 ]
> 外部コンポーネントが例外をスローしました。
と書いてあるとおり、COM内部で例外を投げている。
原因はいろいろあるが、何れにしてもCOM内部での話なのでCLRには関係ない。

546 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 14:00:42 ]
>>545
わかりました。
COMが例外出しているのですね。
有難うございましたm(__)m

547 名前:デフォルトの名無しさん [2009/05/25(月) 20:02:57 ]
DataGridViewで、下のコードで、コンボボックスをセルの中に入れたいんだが、
デフォルトが必ずブランクになる。
アンマネージの時みたいに、デフォルトのIndexって、設定できないの?

//---create a new bindingsource control---
BindingSource^ bindingsource = gcnew BindingSource;

//---add the items into the control---
bindingsource->Add("Type A");
bindingsource->Add("Type B");
bindingsource->Add("Type C");


//---create a combobox column---
DataGridViewComboBoxColumn^ comboBoxCol = gcnew DataGridViewComboBoxColumn;

//---set the header---
comboBoxCol->HeaderText = "Types";

//---data bind it---
comboBoxCol->DataSource = bindingsource;

//---add a combobox column to the DataGridView control---
dataGridView1->Columns->Add(comboBoxCol);




548 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 22:19:11 ]
アンマネージの時みたいってのがさっぱりわからないが
DataGridView::RowAddedイベントかBindingSource::ListChangedイベントで

549 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 06:24:44 ]
俺はVisual Stidio 2003なので、CLIは使えん。
マネージ拡張C++だけになるが、そのタイトルのスレは無いので、ここに書いても
かまわないか、それともだめか。

550 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 09:13:45 ]
ここは今無き ManagedC++ スレの直系だからおけー



551 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 10:24:36 ]
/clr:oldSyntax で今でも一応使えるが、もうすっかり忘れてしもーた。

552 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 01:20:50 ]
愚痴。

VC6ソースなアンマネージDLL内の関数が、FLIE*な引数を要求してくるんだ。
で、C++/CLI内でラッパークラスを作ってそこでfopenした結果を渡してやると
書き込み時に例外 System.AccessViolationException が出て使えない。

この手のストリームをアンマネージな相手に渡すときに注意することは
なにかあったかなぁ...。

553 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 01:58:27 ]
そのDLLはVC6でビルド済みなの? 
だったらCRTのバージョン非互換の可能性もあるけど。


554 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:29:44 ]
愚痴とか言わずに、素直に 「誰か知ってたら教えて!!」 って言えばいいのに


555 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 02:33:21 ]
そしてお前が次に言う台詞は
ググレカス

556 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 22:22:04 ]
>>552
CRT境界を超えるなあほう

557 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 23:28:39 ]
くり

558 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:40:19 ]
>>556
いやまあしかし、逆方向には渡せるし使えるからなぁ。
この辺のやっていい事か否かの判断は難しいね。

559 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:11:04 ]
俺もね、CRTで悩んでるのよね。
DLLの中にグローバル変数置いてるんだけどさ、
CRTのデバッグ系DLLをリンクすると問題ないのに
リリース系DLLをリンクすると、アプリケーションの
初期化に失敗しましたってなっちゃうんだよね。
何なんだろうねコレCRTかんけーねーじゃん。
つーかC++/CLIにも関係ないか。

560 名前:デフォルトの名無しさん [2009/06/07(日) 13:21:48 ]
これからC++/CLIを学ぼうとおもっているのですが、
なにが良いサイトを紹介していただけますでしょうか・・・。



561 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:13:00 ]
いまのスペックは?

562 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:17:09 ]
500000です

563 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:21:46 ]
私なんて52万ですよ。ホホホ

564 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:40:53 ]
VBの関数を使えると聞いたのですがどうやって使うのでしょうか?
若しくは解説しているページはありますか?
くだスレというスレで聞きたかったのですが、dat落ちしてしまったようです

565 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:55:32 ]
VBがVB.NETであることと、C++/CLIが何か分かっていての質問?

プロジェクトの右クリックで参照...の「新しい参照の追加」でMicrosoft.VisualBasic追加すればいい。
using namespace Microsoft::VisualBasic;
で探すといくつかサンプルあるかもよ。

566 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:58:38 ]
>>558
出来るとやっていいは違うべ
DllMainでMessageBox呼ぶのだって同じだろ

567 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:41:29 ]
品薄みたいなのでボランティア出品しました。必要な方どうぞ
業者さんには悪いですが、1万ほど値を下げさせてもらいました
すごく安いと思います。
amazonです

568 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 22:37:07 ]
int send_data_[64];
char buf[128];
memset(buf, 0, sizeof(buf));
memcpy(buf, reinterpret_cast<char*>(send_data_), sizeof(send_data_));
これがやりたいんですが

array<int>^ send_data_;
send_data_ = gcnew array<int>( 64 );
array<Byte>^ sendBytes;
sendBytes = gcnew array<Byte>( 128 );
sendBytes->Clear( sendByte, 0, sendByte->Length );
このあとどうすればいいんでしょうか?

569 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 22:53:48 ]
>>568
コピー元と先のサイズが一致してないぞ
System::Buffer::BlockCopy
あとarray<T>^は初期化されるのが保証されてるからClearはいらない

570 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 00:21:25 ]
あとは、pin_ptr 刺して memcpy でいいんじゃないか?



571 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 12:46:11 ]
テンプレート使ったときのメモリー処理を超低レベル関数と組み合わせるのって心情的に怖いなぁ

572 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:19:21 ]
テン・・・プレート・・・だと?

array は int[] と書く代わりに array<int> と書いているだけで、メモリの直列性は保証されて
いるから問題ない


573 名前:568 mailto:sage [2009/06/19(金) 23:02:54 ]
System::Buffer::BlockCopy( send_data_, 0, sendBytes, 0, send_data_->Length * sizeof(int) );

解決しました。レスありがとうございました。


574 名前:デフォルトの名無しさん [2009/06/21(日) 22:03:43 ]
checkedListBoxでフォーカスされたアイテムのテキストをTextboxに設定したいのですが
GotFocusで飛んできたときにSystem::Object^ sender, System::EventArgs^ eからどうやって
検索なり変換なりをして扱うのかわかりません、どなたかわかれば教えてください。

575 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:18:46 ]
そもそもGotFocusはコントロール自身がフォーカスを得るときに発生するんであって
現在のアイテムが変更されたときには発生しないんだが?

576 名前:デフォルトの名無しさん [2009/06/22(月) 04:27:56 ]
いや現在のアイテムが変更されたときではなく複数のアイテムがあって
そのアイテムの選択が変わったときにTextboxの内容を変えたいだけ。

577 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 04:48:08 ]
まず用語を明確に定義して
アイテムって何
現在のアイテムの変更って何
複数のアイテムって何
アイテムの選択って何
フォーカスはどこ消えた

578 名前:デフォルトの名無しさん [2009/06/22(月) 08:03:07 ]
アイテムは
int sCount = 0;
checkedListBox_A->Items->AddRange(gcnew cli::array< System::Object^ >(1) {L"A" + sCount});
で増やした項目のことをさしてます。そのアイテム(A,B)が複数あった場合にBからAに選択された時に
Aが選択されたときにAが選択されてることを知りたいです。

579 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:37:30 ]
GotFocus 事態は発生してるんだろ?
sender のオブジェクトは何が入っているのか、中身を確認すればいいだけじゃね

580 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 11:54:06 ]
>>579
GotFocusは他のコントロールから移ってきたときに発生するイベントだって

CheckedListBox::SelectedIndexChangedイベント
CheckedListBox::Itemsプロパティ
CheckedListBox::SelectedIndexプロパティ
この辺
SelectedItemを直接変更はNG



581 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:33:05 ]
神の焦点?

582 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 14:00:41 ]
>580
なるほど。WPFとかだとItemsにLabelを入れてLabelのGotFocusにdelegate食わせれば
いけるんじゃね。WinForm の場合も、Object にLabelを放り込んでできないか?

583 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 22:53:15 ]
>>580 のイベントを拾うのが一番普通な気がする


584 名前:デフォルトの名無しさん [2009/06/23(火) 06:13:33 ]
118.82.122.42/products/
で使われてるみたいな左にウィンドウの幅が変更可能なTreeViewと
右に別のやつみたいなことをしたいのですがこの構成は何かにはめ込んで
実現されてるのでしょうか?

585 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 10:01:09 ]
なんだかこないだから、これの宣伝でもしてるのか?
C++/CLIのスレで聞くってことはフォームの範囲で聞いてるのかな。

586 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 12:53:06 ]
WinFormの質問なら.NET汎用かVB,C#すれで聞いたほうが早い。
おそらく宣伝だろうね。

587 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 23:17:38 ]
VC2008 C++/CLI
UDPClient マルチキャスト通信です、MSNのサンプルのままですがReceiveからかえってきません。

 UdpClient^ rClient = gcnew UdpClient( RemoteIpEndPoint );
 try
 {
  data = rClient->Receive( RemoteIpEndPoint );
 }
 catch( Exception^ e )
 {
  Console::WriteLine( e->ToString() );
 }

Sendは問題なくできています。何か他に設定が必要なのでしょうか?


588 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 23:34:59 ]
リモートホストが何も送ってこないだけじゃね?

589 名前:587 mailto:sage [2009/06/23(火) 23:57:49 ]
>>588
1台のPCで複数アプリ間での通信なんです。
Socketを使って確かめたけど、送られてはいるんですよ。

590 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 00:45:58 ]
JoinMulticastGroup



591 名前:デフォルトの名無しさん [2009/06/25(木) 22:11:11 ]
Form1とForm2のように複数のフォームがある場合での質問です。
Form2で定義したテキストボックスのテキストをForm1でボタンを押したときに変更したいんですが
どういう風にすれば違うフォームのオブジェクトを操作できますか?


592 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 22:15:18 ]
>>591
>>586

593 名前:デフォルトの名無しさん [2009/06/25(木) 22:17:02 ]
winforms以前の問題だ
悪いことは言わん
C#からやりなさい

594 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 23:44:21 ]
>>591 やり方は幾つか(てか、いくらでも)ある。質問の仕方が悪すぎる。

595 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:03:32 ]
C++/CLIってやっぱ素のC++は使えない?
例えばポインタとか。

596 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:08:19 ]
使えるよ。何でそう思ったの?

597 名前:595 mailto:sage [2009/06/26(金) 11:09:24 ]
managed C++だと、素では使えなくて、
unsafeだとか要ったキガス

598 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:20:26 ]
unsafeってそれC#
/clr:safe としない限りは使える。
ただしマネージドオブジェクトに対しては参照を使用する必要がある。

599 名前:595 mailto:sage [2009/06/26(金) 11:25:56 ]
つまり、マネージドオブジェクトを参照しない限り、通常のC++プログラムと実行ファイルになるんだ。

600 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:40:41 ]
>>599
C++/CLIを選択した時点でそうはならんよ。あくまでマネージコード上で実行されるネイティブコードだ。
実行時の構造はObjective-Cあたりとは逆のイメージだな。

てゆーか質問してんのか自分の思い込みに賛同してほしいのかどっちなんだよ。



601 名前:600 mailto:sage [2009/06/26(金) 11:45:43 ]
>マネージコード上で実行されるネイティブコード
あ、間違えた。C++だけで書いても#pragma unmanaged指定しない限り基本的にマネージコードだった。

602 名前:595 mailto:sage [2009/06/26(金) 11:46:35 ]
.NET調査です。
解析系ライブラリはC++なのでC#やVB.NETは_。
今までのC++アプリに.NET混ぜれば良いのかなと思うのですが、
どの部分に.NETを使えば良いのか調査。

603 名前:595 mailto:sage [2009/06/26(金) 11:50:44 ]
>C++だけで書いても#pragma unmanaged指定しない限り基本的にマネージコード

C++で開発しておいて、.NETバイナリが欲しくなったら、ドットネットコンパイルすればおk?

604 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:55:45 ]
DLL か COM のラッパー作った方がいいんじゃねぇの?

605 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:00:48 ]
その用途ならCLRのホスティングだな。ネイティブアプリからCOMで.NETの呼び出し。
CorBindToRuntimeExあたりでググれ。

もうひとつのパターンはネイティブアプリのルーチンをライブラリ化して.NETアプリから呼び出す。
C++/CLIはこれの橋渡しみたいなもんだ。C#+P/Invokeなどでも可能。

606 名前:595 mailto:sage [2009/06/26(金) 13:11:14 ]
>ネイティブアプリからCOMで.NETの呼び出し。

解析処理はC++で書かれてるので呼び出す.NETって何だろう?

>.NETアプリから呼び出す。

.NETアプリは現状無い。。。

607 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 13:19:19 ]
C++で書かれてて、それで使えていて、あえて.NETとMIXしたい理由ってナニ?
よくあるのは画面とか入出力を.NETで簡便に作りたいというのが多いけど。

608 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 13:35:39 ]
>606
解析処理で使うんだから、あえて処理の実態をC++/CLIで作る必要はないだろ
解析部はDLLかCOMにしておいて、C++/CLIからそれを呼べばいい
なんか変な夢を見て、どっかんと大きく変えて失敗した責任をC++/CLIに押しつける羽目に
なりそうだな

609 名前:595 mailto:sage [2009/06/26(金) 13:55:12 ]
最近、会社に来る人材派遣系とか中途応募してくる人的に.NET経験者が多いということから、.NETとの関わり方を調査することとなりました。

単純思考でC++&.NETと考えたのですが、”将来○○だから、.NETと折り合いが必須」みたいなビジョンを模索中。

会社的にはITRON系OSを使ってるのでソース共有の観点から、C++をC#に書き変えたくない。

610 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 14:23:02 ]
>609
あのさ、正直、あんまりちゃんと領域を考えていないだろ
たとえば漏れの知っている例で言うと、解析エンジンをクラウド上に乗せて管理周りやUIを
.Net でと言う話とかも聞くよ。だがな、解析エンジンというのはある意味ノウハウの結晶さ
強制的に置き換えても、今までと結果が変わったり、初期依存周りのパラで挙動が
変わったりするさ。そういうことを考えずに、安易に両方できるから C++/CLI とか
手を出したら痛い目に遭うよ
まずやるべきことは、既存エンジンに影響が出ないよう、DLLやCOMでラッピングして
.Net からインターフェイス経由でやりとりできるよう、エンジン周辺をきれいに設計する
ことじゃね?




611 名前:595 mailto:sage [2009/06/26(金) 15:06:21 ]
なるほど、エンジンはC++にしておいて、
実行環境が.NETが有利な環境で画面でも.NETで作れば良いですか。

Winで.NETは少し抵抗があるが、LinuxやMac、泥井戸ではありかも。

612 名前:デフォルトの名無しさん [2009/06/26(金) 17:56:54 ]
いやWinだからこそ.NET
特にC++/CLIはWinでしか使えない

613 名前:595 mailto:sage [2009/06/26(金) 18:01:04 ]
>C++/CLIはWinでしか使えない

そうなんかorz

GUIに関しては、C++ Builderでペタペタやってるので、超快適だお

614 名前:デフォルトの名無しさん [2009/06/26(金) 18:30:00 ]
ネイティブコードさえ混ぜなければ他の環境で動かないこともないよ
ただその場合はそれこそポインタすら使えないのでC#で全部書き直した方がマシなレベル

615 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:37:58 ]
そんなこと、このスレで言われても。。。

616 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:17:45 ]
やる気ないのに調査しろと命令されて、仕方なく2chに丸投げした感じだな。

617 名前:デフォルトの名無しさん [2009/06/26(金) 22:26:41 ]
なんかたまたま C# のDLLImport を調べてたら・・・ 実は Wikipedia の記事が一番シンプルで
わかりやすかった

ja.wikipedia.org/wiki/P/Invoke

618 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:28:53 ]
地味に誤爆しました

619 名前:デフォルトの名無しさん [2009/07/04(土) 18:24:19 ]
C#2008を使い始めました
CLIのenum型を一個ずつ追加していくにはどう書いたら
いいのでしょうか?
具体的にはRegexOptionsをNoneの状態から追加して
いきたいのですが・・。


620 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 18:27:38 ]
質問の意図が読み切れんが、|=



621 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 18:40:44 ]
むむ
RegexOptions^ Option = gcnew RegexOptions();
Option |= RegexOptions::CultureInvariant;
これでコンパイルエラーerror C2676が出てしまいました・・。



622 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 18:50:26 ]
それはこれと意味的に大体同じ 見るだに意味不明だろう
int* x = new int();
x |= 3;

623 名前:デフォルトの名無しさん [2009/07/04(土) 19:04:53 ]
enumってそもそも静的に定義を列挙して使うものじゃないのかな?
リフレクション関連を駆使すればenumの内容を動的に追加とか出来るかもしれないけど・・・。

624 名前:デフォルトの名無しさん [2009/07/04(土) 19:10:38 ]
フラグを立ててるだけで別にメンバを追加してるわけじゃない
ごく普通の使い方
列挙型は値型だから^はいらない

625 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:14:21 ]
なるほど・・。
*Option = *Option | RegexOptions::CultureInvariant;
でコンパイル通りました。
ありがとう!



626 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:16:18 ]
斜め上だなー……

627 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:17:06 ]
そっちの勘違いをしてたのか。
C++/CLIでは値型をgcnewするとBoxingされた状態で生成されてしまう。

RegexOptions Option = new RegexOptions(); // C#
RegexOptions^ Option = gcnew RegexOptions(); // C++/CLI
は同じ意味じゃない。

628 名前:デフォルトの名無しさん [2009/07/04(土) 19:20:23 ]
基本的に値型に^は付けない
パフォーマンスが落ちるし、C#など他のほとんどの.NET言語ではサポートされてないので良くない

629 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 21:49:30 ]
2008 でコンパイルした dll とか exe を 2003 のプロジェクトで参照って出来ないよね?
両環境用に作ってやらないとダメかな。。。

630 名前:デフォルトの名無しさん [2009/07/07(火) 23:42:26 ]
できるけど必ずしも完全な互換性があるわけではないので
可能なら避けるべき



631 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:51:11 ]
ん〜。やっぱりそう?
プロセス間 I/F のクラスを作ってそれぞれで共用しようと思ったけど、
同じ仕組みのを 2003/2008 別個に作ることにするよ。

632 名前:デフォルトの名無しさん [2009/07/14(火) 04:10:47 ]
www.webtech.co.jp/sstudio/pro/img/f_time/f_chart.png
の右にあるようなものをC++/CLIで表現したいのですが似たようなものが見付かりませんでした。
何かそれに近いものや組み合わせればいけそうなものがあれば教えていただけますか。

633 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 04:29:24 ]
要素の数が多そうだからコントロールを並べるより、
Graphicsで直接書いたほうがいいかも。
C++/CLIはあんまり関係ないな。VBかC#からはじめなよ。

634 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:25:44 ]
教えて欲しい。

VS2008 の C++/CLI でメール関連のプログラムを書いているんだけど、
System::Net::Mail::Attachment を使って添付ファイルをつけると、プログラムが
終了するまで添付ファイルに使用したファイルを操作することが出来なくなる。

で、調べて、System::Net::Mail::Attachment は使い終わった後に、Dispose すると
ヘルプにもネットの記事にも書かれているようなんだが‥‥コンパイルすると C2039 エラーで
そんなメンバはないと怒られる。

エラーメッセージを読むと「代わりにデストラクタと呼べ」とあるので試しに delete してみたら
使用したファイルを普通に操作できるようになった。

マネージ環境では delete はしないモンだと思ってたんだけど、これでいいんだろうか?
期待通りに?動くからいいんだけど。。。

635 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:32:08 ]
Destructors and Finalizers in Visual C++
に書いてる

636 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:37:05 ]
C++/CLI では C# のDisposeパターンはデストラクタで実装されている

637 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:38:58 ]
そんなもんC++/CLIで作るなよ

638 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:39:38 ]
deleteを直接呼ぶのはDisposeを直接呼ぶのと同じだから避けるべき。

C#ではusingを使うのが常識だけど、C++/CLIで同じことをやるには、
自動変数の形で使うか、それが無理ならauto_handle/auto_gcrootを使う。

639 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:51:18 ]
delete を・・・直接、呼ぶ?
ざわ・・・ざわ・・・

640 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:00:31 ]
別におかしくない
C#でもDisposeの呼び出しを単独で書くことはしない
絶対にusingを使うかfinallyの中で呼ばないといけない



641 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:09:01 ]
classのメンバにDispose持ちがいたら普通に単独で呼ぶが

642 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:14:34 ]
その呼び出しの発端は単独ではないだろ

643 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:17:49 ]
>>641
でもその場所はどうせデストラクタ・ファイナライザの内部以外に有り得ないでしょ。
それくらいだったらいいと思うけど。

でも、C++/CLIならauto_handleをクラスメンバにできなかったっけ?

644 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:23:20 ]
でも、単独での呼び出しを書くことがあるというのは事実だよねって話

>>643
そいやC++/CLIってメンバに^付きで書かなきゃメンバのDisposeも勝手に読んでくれるんだよね

645 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:24:29 ]
ファイナライザでDisposeは絶対ダメ
ファイナライザでメンバのマネージオブジェクトにアクセスするのは原則禁止

646 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:29:22 ]
誤解を招くなぁそれ。C++/CLIのファイナライザ構文なんて
勝手にDispose呼び出しを生成してんぞ。

引数付きのDisposeパターンを守れってだけでしょ。

647 名前:645 mailto:sage [2009/07/18(土) 00:36:47 ]
すまん言葉足らずだった
ファイナライザで"メンバの"Disposeはダメ

648 名前:634 mailto:sage [2009/07/18(土) 11:29:44 ]
thx
こんなに沢山の人がいたんだ。。。

だいぶ慣れたと思ってたけど、まだわかってないことが多いみたい。
もっとお勉強するよ。
今回のは >>638 の auto_gcroot を使ってみようと思う。

>>637
C++ が好きなんだもん。w

649 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 15:01:37 ]
auto_handleはマネージクラス・マネージコード内、
auto_gcrootはネイティブクラス・ネイティブコード内で使う。

650 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 15:51:27 ]
C++好きなのはいいけど.NETに慣れる意味でも一度はC#やってみたほうがいいよ
なぜ本スレでさえアンマネージコードとの相互運用という本来の目的以外での
C++/CLIの使用に否定的な人が多いのか理解できるはず



651 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 15:57:56 ]
相互運用ならC++/CLIはいい。もうC#でDllImportする気が起こらない。

652 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 00:02:11 ]
clrinterop.codeplex.com/

653 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 00:13:08 ]
いや、DllImportさえ簡単に貼り付けられればC#で問題ない、という程度のことではないから。

654 名前:634 mailto:sage [2009/07/19(日) 00:54:11 ]
>>649
thx
勘違いして入れ替わってたよ。

auto_gcroot は変数定義した後に代入できるけど、auto_handle は変数定義の時の
初期化でしか代入できないとか、多分、何かの都合があるんだろうけど、面白いね。

>>650
どっちでも一応書ける。
だいたい画面系に C# 、それから呼ぶライブラリ関連に C++/CLI を。(最初にそうお勧めされた)
いまいち「目的外での C++/CLI に否定的」ってのがよくわかってないんだけど。。。
感覚的にはわかるような気もするけど、言語として C# の方に抵抗を感じたりして。

655 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:12:27 ]
>>650
やっぱ、CLIは無意味?

656 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 18:51:25 ]
>>655
ブリッジ


657 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 18:56:51 ]
ドトネトにブリッジする理由は???

658 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:47:10 ]
.NET開発の補助として使うものであって、決して
「.NETが使える便利なC++」ではない

659 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 23:02:04 ]
適材適所という言葉があってだな(ry

660 名前:デフォルトの名無しさん [2009/07/22(水) 08:06:27 ]
この天気、日食どころじゃねーな。



661 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 09:19:19 ]
それ食えるのか?

662 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:12:57 ]
ドトネト材の適所って何?

663 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:35:54 ]
Java+JNIと比べるとはるかに優れているな。
だれか、javaVM用のC++/CLI?を作ってくれ。

664 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 10:41:19 ]
ハンドルの指すアドレスの最初の4バイトは何のデータですか?
昔.NETを勉強したときに、
オブジェクトヘッダーは同期ブロックインデックスと
クラス定義へのポインタで構成されてると
読んだ記憶があるんですが

665 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:55:00 ]
>>664
知ってどうするんだよ?


666 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:56:25 ]
おしえて。

フォームアプリのテキストボックスとかにデータバインディングで、
DataTable の要素を関連づけて入力値を管理したい。

ここで、テーブル中のレコードが1つの場合はいいんだが、複数あって
かつ、バインドするレコードを動的に変更したい場合ってのはどうすれば
いいのだろうか?

よくわからなかったので、

・バインド用に同じ構造のテーブルを用意して
・そこにレコードをひとつだけ作り
・そのレコードに元テーブルの任意のレコードの値をコピーする
・フォーム終了後にもとのテーブルのレコードに値をコピーし直す

方法で使おうとも思ったのだけど、もっと直接的な方法がありそうな気がする。
いかがだろうか。教示いただけると嬉しい。

667 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:08:13 ]
>>666
ここよりもC#、VB、ADO.NETスレあたりで聞いたほうが早いと思うよ。

668 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:06:25 ]
そう? じゃ、C# のスレに移動するよ。
thx

669 名前:デフォルトの名無しさん [2009/07/27(月) 23:44:45 ]
質問です。
自転車って制限速度が無いと聞いたことがあります。
一方で、系車両は制限速度30km/hと聞いたことがあります。
自転車に関してはどうなのでしょうか。
自転車に速度計装着の義務付けが無い以上、
制限速度自体、無意味なことだと思うのですが。


670 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:50:41 ]
無料で難読化できるソフトはありますか



671 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:34:28 ]
ある

672 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:55:16 ]
>>669
軽車両には車両種別による速度制限はありません。標示の制限に従ってください。

673 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:57:05 ]
C++/CLI的には見られたくないところはネイティブコードで書けばいい

674 名前:デフォルトの名無しさん [2009/08/04(火) 06:16:44 ]
PictureBoxの左上を座標(0,0)としてマウスでクリックしたときの
PictureBoxの左上からのオフセット座標を取得したいのですが
いい方法ありますでしょうか。


675 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 06:47:44 ]
>>674
取得したいも何も、MouseClickイベントで受ければ
MouseEventArgsに入ってるだろ。

676 名前:デフォルトの名無しさん [2009/08/06(木) 06:26:04 ]
質問です。
初期化時にPictureBoxに格子上の線を描画したあと、PictureBox内をクリックした場所に図形を描画したんですけど
再度クリックしたときにその図形を消したい場合は一度RefreshやClearなどをしたあとに格子上の線・図形は再度描画
するしか方法ないですよね。

677 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 06:27:14 ]
___
←樹海| 
 ̄|| ̄ ┗(^o^ )┓三
 ||    ┏┗  三
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄



678 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:04:47 ]
>>676
毎回描画し直します。
C++/CLIに限らない.NET Frameworkの使い方についてはC#かVB.NETのスレで質問することをお勧めします。
(C++/CLIにしかない機能を使わないならC++/CLIを使うこと自体お勧めしません)

679 名前:デフォルトの名無しさん [2009/08/12(水) 11:52:55 ]
質問です。
プロジェクトの新規作成で自動的に作成されるFrom1.hですが、
簡単に一括で、それらしい名前(CalcMainForm.h等)に変換で
きる方法はありますか?(自動生成されるコード内のClass名称
なども追従したい)

今は、手作業でファイル名の変更後、コード内の名称を置換しています。


680 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:10:44 ]
VSのアドインとかでリファクタリングのツール探してみては



681 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:06:34 ]
ファイル名はファイルのプロパティの名前
クラス名はクラスのプロパティのName
簡単と感じるかは人による

682 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 10:36:57 ]
俺はウィザード直後に即削除。
新しく任意のFormクラスを作成→コードゴリゴリw

683 名前:デフォルトの名無しさん [2009/08/23(日) 00:11:09 ]
クラスを参照渡しするときに、mainで渡すと問題なく実行できるのですが
クラスの中で渡すと下記のエラーが発生してしまいます。

"演算子 '%' は、値型または ref クラスのインスタンスにのみ適用できます"

このエラーを回避するためにはどのようにすればいいでしょうか?


おk:
main(){
A^ a;
B^ b;
b->(%a);
}

マズー:
ref class Z{
A^ a;
B^ b;
b->(%a);
}


684 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 01:50:23 ]
クラスの中に処理は直接書けない。メソッドの中に書く。
エラーを回避とかそういう次元の問題ではないのでまずはC#かC++を一通り勉強するべき。

685 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 02:10:25 ]
これからC++/CLIを勉強しようと思うんだけど
どんな本読んだらいいのかしら?^^

686 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 02:21:17 ]
VisualStudio2008ExpressEditionをイジリ倒す。

687 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 02:24:20 ]
C++とC# (またはVB7-)をどのくらい理解してるかでいろいろ違ってくる。
両方まだなら手を出さないほうがいい。

688 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 06:57:30 ]
というかC++もC#も両方使いこなせる人にしかC++/CLIを使う意味がないし使う必要もない。

689 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 07:16:52 ]
C++はGOF本を読むレベルっす。オブジェクト指向設計も任せてネ★
MFCはまぁそこそこ。ATLはさっぱり。WTLはみたこともない。

C#? なにそれ?
マイクロソフトローカルな糞言語になんてまったく興味ねぇんだよっ

690 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 08:07:39 ]
C++/CLIのスレで、よくそんなことがいえるな。
C++/CLIがよりいっそうマイクロソフトローカルな糞言語なのを理解しているのか?



691 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 09:37:50 ]
所詮はつぎはぎで緊急避難するときだけ使う補助言語だからな

692 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 10:16:28 ]
ワロタ
>>689は自分がどこに書き込んだのかもわかってないのか

693 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 11:20:47 ]
自分は C++/CLI については 実践C++/CLI 極めるための基礎と実用テクニック を読んだだけだな。
あとは C# まで含めてどうとでもなったよ。

ただ。最初のコードを見る限り、基本からわかってないと思うけど。
C++ がどうとかではなくて、プログラミングの基礎からって意味で。
ちゃんと基礎からやった方が、結局は時間の節約になると思う。

694 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 22:41:47 ]
つまり、。NETについて学ぶにはまずC#を習得して来い…と。
C#…なぁ。Javaならまだ学ぶ気あるんだけど。
(J++1.0が出た当時にちょろっとかじったから、基本はあるんだよ^^
 でも最近はJava5とかいうのらしいから、勉強しなおしかな^o^;)

どうせ5年もしないうちに「なかったこと」にされるような言語なんて
学ぶだけ資源の無駄だしなぁ。どうしようかなぁ。ああー。

695 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 22:51:22 ]
C#が世に出て既に8年ほどたつが、まだなかったことにはなってないな
C++/CLIのほうがよほど…

696 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:00:41 ]
これって何に使うの?
C++Builderの代わり?

697 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:15:50 ]
てか、基礎のある人間なら、わざわざ覚えるってほどのモンでもないだろ。
MFC わかるんだよね?

698 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 23:20:23 ]
J++のWFC、delegate、J/Directを理解してるならそれはそれですごいな。
delegateはC#のとも一味違うぞ。


699 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 06:41:25 ]
C#やったことなくてもC++/CLIは使えるかもしれないけど
C#で.NETの流儀に慣れてないと.NET的にはとんでもないコードが確実に出来上がる

700 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 12:49:28 ]
>>699
慣れてないせいか、Disposeルールが
なんか気持ち悪い。




701 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:13:03 ]
>>700
あれはネイティブなC++でいうところの単なるデストラクタなんだが……

702 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 19:24:05 ]
そう思っているなら確実に
>.NET的にはとんでもないコード
を書いてるな。


703 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:04:58 ]
MFCのDLLがあってCLIでラップしてVB.NetとC#で利用しようとしてるんですが
unsigned char *の配列データを受け渡しするところがあって
VB.NetだとこれはByte()になるんだろうけどどういう変換すればいいのでしょう?
Byte()の引数ってCLI側での表記方法も分からないし

704 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:13:16 ]
Byte[] に変換するなら、

 cli::array< System::Byte >^ a = System::Text::Encoding::GetEncode( "エンコードの種類" )->GetByte( "String型の文字列" );

ただ、Byte[] に変換したいのではなくて、String から char* に変換したいんだろうから、だったら、

 ::sprintf( a, "%s", "String型の文字列" );

‥‥本当に出来る。w
正しい?方法は StringToHGlobalAnsi でぐぐれ。

705 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:25:20 ]
いえ、画像データなんで本当にバイト列が必要なんです

706 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:25:55 ]
バイナリデータであるByte()やbyte[]を渡したいだけかもしれないぞ。
もしそうなら、cli::array<System::Byte>^型が対応するのでこれを使えばいいだけ。
自分はcli::array<unsigned char>^と書く方が好みだがまあどっちでも同じ。

707 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:36:09 ]
unsigned char* だから普通に byte 配列だろなんとなく。
分かりにくいので以下の説明は BYTE* で行くな。

まず、BYTE* -> byte[] はそのままでは無理。byte[] を
構築してコピーする。

BYTE source[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
array<Byte>^ arr = gcnew array<Byte>(10);
pin_ptr<Byte> p = &arr[0];
memcpy(p, source, 10);

次に、byte[] -> BYTE* は可能。上でやってるが、pin_ptr でおk。

pin_ptr<Byte> p = &arr[0];

ちなみに、VB だったら GCHandle で Pinned しなさい。IntPtr が
取れる

まとめ。なんで両方の方向の説明したかというと、コピー発生させ
たくないならマネージで byte[] なバッファ作成して(ここポイント)、
それ使うといいよみたいな。


708 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:42:03 ]
いやcli::arrayってByte()と同じ形なの?
双方向でやりとりするんだけどコピーではなくて共有して書き出すからポインタを変換しないといけない
例えば
DLL側
array<Byte> ^GetData();

VB側
dim bytes as Byte[] = dll.GetData()
bytes[0] = 255;

みたいな使い方がしたい

逆にVB側のByte[]を渡してDLLに中身を書き込ませるような処理もある

ポインタのキャストがうまくいかないんだけどどうすればいいの?

709 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:54:02 ]
cli::array< Byte >^ と Byte[] は同じ型だよ。
言語による表現の違いなだけ。

うまくいかないって、どんなエラーなわけ?

710 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:56:11 ]
エラーというかキャストの仕方が分からない



711 名前:707 mailto:sage [2009/08/25(火) 22:56:55 ]
>>708
・・・伝わってねぇかなぁ。その例なら

void Hoge(BYTE* p) {
 p[0] = 255;
}

void Piyo(array<Byte>^ arr) {
 pin_ptr<Byte> p = &arr[0];
 Hoge(p);
}

array<Byte>^ GetData() {
 array<Byte>^ arr = gcnew array<Byte>(10);
 pin_ptr<Byte> p = &arr[0];
 Hoge(p);
 return arr;
}

これで分かる?

712 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:01:19 ]
>>711
GetDataは元がunsinged char *なんで
それごどうにかしてarray<Byte>^にしないといけないんですが

713 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:06:34 ]
仮にarray<Byte>^にして渡した後ってVBのガーベージコレクタに殺されたりする?
それはまずいな

714 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:09:10 ]
ということはVB->DLLの方向の時だけByte[]で受け取って
DLL->VBの時はラッパーDLLでアクセスを仲介するような関数を容易するべき?
例えばWriteByteみたいな関数を入れてDLLの保持してるメモリはVBでは触れないようにした方がいいの?

715 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:12:05 ]
managed側のメモリはpinすればunmanaged側でいじれるが、
逆は出来ないんじゃないかなぁ。
基本はコピーになるはず。

unmanaged側でメモリを保持して、managedにはハンドルやクラスの形で
渡してやるのがセオリーだと思うよ。

716 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:13:32 ]
なんかdllの仕様まで変更できるような話になってるが

717 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:20:04 ]
メモリへのポインタを渡したいのか、ただデータを入れた配列を渡せればいいのかわかんね。
キャストの仕方っても、どんなところでなにをやろうとしてるのかわかんね。
dynamic_cast とかをキーワードにして調べてみたら? 自分で。

718 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:23:42 ]
>>715
じゃあGetDataの部分はIntPtrを返してVB側でMarshal.ReadByteするのが適切?

>>716
CLIのラップDLLはGCの影響は受けないでしょ

>>717
ポインタを渡して中身を双方で共有して直接いじりたい
メモリは確保した方が解放するというのがルール

719 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:30:55 ]
そう。

byte[](マネージバイト配列)ってのはマネージヒープに確保
されてそこにあるやつ。アンマネージで勝手に確保した
なぞの領域にあるところをさしたポインタってやつはそうじゃ
ないから当然変換できないしコピーするしかない。
マネージにあるやつのポインタ化(pin_ptr) は可能だが、逆は
無理。

結局シームレスにいじりたい領域はマネージ側で確保して
やるしかない。アンマネージポインタしかないんなら、コピーとか
マーシャリングとかしかない。

CLS 非準拠だと CLI は一応 T* みたいな形式も持ち運べは
するんだけどな。準拠させるためには IntPtr とかのやり取りと
なる。
…VB じゃなく C# ならそのポインタシームレスに使えるのだがな。

720 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 00:12:20 ]
とりあえずラップDLLに読み書き専用の関数を持たせることで解決しました



721 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 14:58:37 ]
プロパティの書き方で、ヘッダー(h)とソース(cpp)に分離する方法を教えてください

property float X
{
float get();
void set(float value);
}

ヘッダーにこのように書いたところ、
1>Vec3.obj : error LNK2020: 未解決のトークン (06000008) Fwm.Math.Vec3::get_X
1>Vec3.obj : error LNK2020: 未解決のトークン (06000009) Fwm.Math.Vec3::set_X

と言われたので、ソースに
float Vec3::get_X() { return 0; }

と定義してみたのですが書き方が間違っているようでコンパイルが通りませんでした

722 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:02:46 ]
Vec3::X::get

723 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:10:32 ]
そこかぁあああああああ!!!
ありがとう!!

724 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:14:58 ]
インテリセンスに出ると思うんだがな

725 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 15:18:17 ]
ところがどっこい出なかった

726 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 17:44:34 ]
CLRでも<summary>指定したらインテリセンスにでまつか?

727 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:23:04 ]
CLRが何だと思ってるのか詳しく聞かせてもらいたいな

728 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 02:05:29 ]
C++/CLIとC++ネイティブのコード共存で開発してるんですが、

C++ネイティブクラスのメンバーをDataBindingするのって不可能ですか?

こんな感じでやってみたいのですが、System::Object^型にsrcを変換できずに
コンパイルエラーを吐きます。。。

class src {
public:
int m;
};

src = new csrc;
textBox1->DataBindings->Add(gcnew Binding("Text", src, "m"));

※textBoxのTextプロパティにintの値を設定しようとしているのは、例なのでスルーしてください。


729 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 06:51:20 ]
中でリフレクション使ってるんだからできるわけがない
マネージクラスでプロパティとしてラップする

730 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 09:06:34 ]
C++/CLIでも<summary>指定したらインテリセンスにでまつか?



731 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 09:20:42 ]
出るよ

732 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 09:29:31 ]
/// <summary>
/// クラス解説
/// </summary>
public ref class Test

って書いたら
<summary>
クラス解説
</summary>

って出た。<summary>消したら
クラス解説

って出た。なんか違うかな・・・

733 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 14:50:40 ]
XMLドキュメントを出力するオプションは有効になってる?

734 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 16:29:59 ]
ありがトン
なってませんでした
有効にしたら隣に〜.xmlってのが出来たけど
やっぱりインテリセンスには出てこねぇ

735 名前:デフォルトの名無しさん [2009/08/30(日) 12:38:18 ]
デリゲートで関数のポインタを変数に渡そうとしてるんだけど
うまくいかない。

delegate void startCallback();
startCallback^ cb_start;

cb_start = gcnew startCallback(start);
fn = &cb_start;
cb_startがデリゲートの変数なのですが。
どうしたらいいでしょう?

736 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:40:23 ]
&はいらん
^の意味解ってる?

737 名前:735 [2009/08/30(日) 12:50:37 ]
>>736
確か似そうでした。
で、&を外してみたところ
error C2440: '=' : 'startCallback ^' から 'void (__clrcall *)(void)' に変換できません。
とかいうエラーが・・・。
どういう意味なのでしょう?



738 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 13:06:42 ]
デリゲートと関数ポインタは別物だから。

739 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:30:32 ]
>>735
fnやstartがどう定義されているか見えないけど、
fn = start でいいでない?

740 名前:735 [2009/08/30(日) 17:37:50 ]
fn=start だと
error C3867: 'start': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&start' を使用してください
となって、fn=&startとすると737 のエラーとなるという。

fnもstartも同じ型でvoid (*dsfunctions::start)(void)なのだが、
c++/CLIだとだめらしい。

関数ポインタを渡したいだけなんですがどうしたもんでしょう?




741 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:03:47 ]
もしかして、スタティックでない関数をその書式で使用しようとしてない?
ちがうなら、下みたいにすべきじゃね?

cb_start = gcnew startCallback( [startメンバを含むクラスインスタンス], start );

742 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:07:28 ]
生のC++でもクラスのメンバ関数というか仮想関数の関数ポインタはカオスだからなぁ。

743 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:24:58 ]
マネージドとネイティブでポインタや関数の互換はないから
関数自体をどちらかにラップするしかないだろう。
以下は関数ポインタとデリゲートの使用例
int native1(int x, int y) { return x+y; }
class Foo {
 public:
  static int nativeS(int x, int y) { return x+y; }
  int nativeV(int x, int y) { return x+y; }
};
delegate int MyCallback(int x, int y);
ref class Hoge {
 public:
 static int ManagedS(int x, int y) { return x+y; }
 int ManagedV(int x, int y) { return x+y; }
};


744 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:27:07 ]
int main() {
  Hoge^hoge = gcnew Hoge();
  Foo foo;
  int (*f1)(int, int) = &native1;
  int (*f2)(int, int) = &Foo::nativeS;
  int (__thiscall Foo::*f3)(int, int) = &Foo::nativeV;
  //int (__clrcall *f4)(int, int) = &Hoge::ManagedS;
  //int (__clrcall Hoge::*f5)(int, int) = &Hoge::ManagedV;
  MyCallback^ f6 = gcnew MyCallback(Hoge::ManagedS);
  MyCallback^ f7 = gcnew MyCallback(hoge, &Hoge::ManagedV);
  System::Console::WriteLine(f1(100, 1));
  System::Console::WriteLine(f2(100, 2));
  System::Console::WriteLine((foo.*f3)(100, 3));
  System::Console::WriteLine(f6(200, 6));
  System::Console::WriteLine(f7(200, 7));
  return 0;
}
clrcall型の関数ポインタはdelegate作成時にしか使用できない。


745 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:47:06 ]
^は「へ」って読むんだぞ

746 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:47:31 ]
へー

747 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:30:09 ]
実践C++/CLI 極めるための基礎と実用テクニック
アマゾンに入荷したね

748 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:52:39 ]
え。出品者からお求めいただけます、じゃなくて?

749 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 03:42:45 ]
うん。昨日見たときアマゾン新ピンが2800円ぐらいで売ってた
今見たら終わってたw

750 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:33:06 ]
ていうかアマの技術書は一度の入荷数が少ない
近くの書店で取り寄せすればすぐだ



751 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:29:13 ]
自分が確認したときにはすでになかったから、釣りかと思ったわ。
情報ありがとう。普通に取り寄せてみるよ。

752 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:16:03 ]

C++の保守チームからCLIのチームに移ってきた新参者です。
C++の頃に良くみた無名名前空間でのリテラル文字定数の宣言

namespace {
const std::string EngFileName = "XXXX"
const std::wstring JpnFileName = L"XXX"
}

と同じことがしたくて

namespace {
const String^ EngFileName = "XXXX"
const String^ JpnFileName = L"XXX"
}

にしたらコンパイラ君に怒られてしまった。
もしかして、CLIではできない? 
const char* const EngFileName = "XXXX" みたいにC言語風に明記しないとだめなのでしょうか?

753 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:18:30 ]
適切なクラス作って静的メンバにするのが.NETのやり方

754 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:33:56 ]

そうなんですか!! ありがとう。
C++のころは、cppで使いまわすだけの定数をヘッダーに追加すると、
結構、コンパイルに時間がかかったので、無名名前空間に押さえ込んでました。

あ、そういえば自動生成されるコードもCLIは全部、ヘッダーに展開されますね。
無名空間はだめで、静的メンバであればOKってのが理解できないので、
ちょっくらテストしてきます。 注意点とかあれば教えていただけますか?

755 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 03:23:27 ]
>>754
なんか分かってなさそうなので念のために言っておくけど、
適切なクラスというのはref classのことだぞ。


756 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 08:44:54 ]
>754
const は String^ にはつけられないから literal 使え

757 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:51:30 ]
initonlyも忘れないで。外へ公開するメンバなら特に。

758 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 18:24:19 ]
initonly と literal はアセンブリ化したときの文字列確定のタイミングが違うから気をつけろ

759 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:48:46 ]
やば。initonly を完璧に忘れてた。。。

760 名前:754です。 mailto:sage [2009/09/04(金) 19:08:41 ]

ありがとうございます。
準備した参考書では、literalもinitonlyも明記がなかったので、なかなかできませんでしたが、
ようやくテストできました。(結果もOKでした。)

ただ、literal と static const の違いだけが分かりませんでした。
どちらも同じ結果になるので・・・。
CLIで追加された宣言なので、literalを使えば良いのかな?

それにしても、CLIの情報は探すのが大変ですね・・・。みなさんはどうしてますか?(どうやって覚えました?)



761 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 20:26:10 ]
>760
String^ は追跡参照なのでポインタのようにアドレスが一定ではない。だから、const
指定できない。(const が有効だとGCがString^を移動できない)その代わりに literal が
あると思っていい

762 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 20:38:18 ]
literalって単なるアセンブリのメタデータだし

763 名前:デフォルトの名無しさん [2009/09/13(日) 01:12:57 ]
>>879
パレスチナ問題って深刻だね。

764 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 04:02:10 ]
C++/PLO
うむ、一文字しかあってない

765 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 19:53:24 ]
pin_ptrのようにオブジェクトの移動を制限する方法って他にないでしょうか
スコープを抜けてもずっと固定していたいんですが

766 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:02:36 ]
GCHandleを割り当てる

767 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 22:06:03 ]
C++からの移植で下位のような変換を行ってみました。

clss NameHolder
{
   NamaInfo _Name;
public:
   NamaInfo getNameInfo();
}

ref clss NameHolder
{
NamaInfo^ _Name;
public:
NamaInfo^ getNameInfo();
}

768 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 22:10:18 ]
C++からの移植で下位のような変換を行ってみました。

// C++の場合
clss NameHolder
{
  NamaInfo _Name;
public:
  NamaInfo getNameInfo();
}

// CLIの場合
ref clss NameHolder
{
  NamaInfo^ _Name;
public:
  NamaInfo^ getNameInfo();
}

C++の場合だと、getNameInfo()で取得したNamaInfo を呼び出し元で変更しても、
元の値(NameHolder)は値が変わりませんが、 CLIの方だと変わってしまいます。
ハンドルだからといわれそうですが、CLIで値を保持するクラスより、クラス側の値を取得するのは
一般的にどのように実装すべきでしょうか?

769 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 23:09:46 ]
value class使え

770 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:04:27 ]
ありがとうございます。
value class を使用することで、目的の動作ができました。
ただ、疑問が残りまして、該当クラスには、セッター関数もありまして

(1) void setNameInfo( NamaInfo^ Name) { _Name = *Name; }
(2) void setNameInfo( NamaInfo& Name) { _Name = Name; }
(3) void setNameInfo( NamaInfo Name) { _Name = Name; }

もどれも同じ挙動でした。(3)にすると、実体がコピーされて遅そうなので、
(1)か(2)かと思ったのですが、一般的にはどちらを使うものなのでしょうか?



771 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:08:28 ]
実体コピーしなきゃ結局他でNameInfo変更したときに影響するだろ…

772 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:23:39 ]
便乗ですまない

>>770の(1)はマネージでないとダメで、(2)はアンマネージでないとダメだと
思っていたんだけど、両方とも許される状況っていうのはあるもんなの?

773 名前:772 mailto:sage [2009/09/17(木) 02:37:45 ]
value classだと(2)は問題なく参照となり、
(1)はボクシングが行われた上で、ハンドルを取得できる、と考えたけどあってるのかなぁ。
難しいなぁ

774 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:41:02 ]
public value class NameInfo
{
   public: property Int32 ID;
};

public ref class NameHolder
{
   NameInfo _Name;
public:
  NameInfo get(){return _Name;}
// void set(NameInfo^ Name ){_Name = *Name;}
// void set(NameInfo& Name ){_Name = Name;}
  void set(NameInfo Name ){_Name = Name;}
};

int main(array<System::String ^> ^args)
{
  NameInfo Name;
  Name.ID = 10;
  NameHolder Holder;
  Holder.set(Name);
  NameInfo Buf1 = Holder.get();
  Console::WriteLine(Buf1.ID);
  Name.ID = 20;
  NameInfo Buf2 = Holder.get();
  Console::WriteLine(Buf2.ID);
  return 0;
}
どれも結果は 10、 10と表示され、値は登録後の値は変わりませんでした。
根本的に、なんか勘違いしてますかね?

775 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:49:44 ]
メンバがいつの間にかハンドルじゃなくなったな

776 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 03:05:00 ]
NameInfo^ _Name; これに変更。
NameHolder() { _Name = gcnew NameInfo(); } これ追加

してやって見ました。結果は同じでした。C++からハンドルが一つ増えただけで、こんなにも苦労するとは・・・・

777 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 03:10:40 ]
もとのC++の記述と同じようにかきゃいいと思うけどな
value classならほぼ変わらんし
移植って時点で思想とか意味ないだろうし

778 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 03:19:20 ]
元のコードにあわせてハンドルじゃなくしたのかと思ったけど、あっさりハンドルに戻すとか
ほんとに移植しようとしてるのかが疑問

779 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 03:54:00 ]
>>770
ちなみに、ネイティブなC++だったら、そのsetの引数の型は、NameInfoかconst NameInfo&にするとこだよね。

自分だったら、NameInfoにするかなあ。コピーのコストが心配っていうならそもそも値型にしないし。
読み取りだけの引数にconst付けないのは嫌だ。

値型の場合、T& → T%、T* → interior_ptr<T>へと機械的に変換すればいい。
その上で、他言語で使えないのでconstは削除し、値型のハンドルも使わないのが自分の方針。

ちなみに、(1)の値型のハンドルで、>>774のようにボックス化されていない(ハンドルでないもの)を実引数にする場合、
ボックス化(ようは新しくメモリ確保してそこへ実引数をコピー)が行われるので(3)より遅いよ。

780 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 04:03:11 ]
>>779
横からごめん
> 他言語で使えないのでconstは削除
というのはどういうこと?



781 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 04:20:29 ]
>>780
C#などからそのメソッドを呼ぶ場合、あたかもconstはなかったかのように無視される。
そのため、自分はC++/CLIは他言語から呼び出すことを前提に使っているので、
C++/CLIの段階でpublicな型のpublicなメソッドの引数・戻り値にはconstを付けようと思わないというだけのこと。

つまり、これは自分1人の考えなんで、気にせずconst使うという人も中にはいると思う。

782 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 04:29:23 ]
>>781
なるほど。勉強になりました。

783 名前:774です。 mailto:sage [2009/09/17(木) 04:39:15 ]

いろいろとありがとうございます。
先輩にきいて、値を保持したいのであれば、このクラスを移植すれば良いとともらったソースを移植中です。
中身を見ると、シングルトン形式で値を保持しているようです。
C++であれば const NameInfo& Name なので、const NameInfo% Name にしたらコンパイラ君に怒られて
パニックになってしまいました。 
C++の時は、メンバー関数の後ろをはじめ、constをつけるように、強く教育を受けたので、CLIでもかんばって
つけようとするとことごとく怒られて・・・・。
NameInfo という値で渡すのがよさそうなので、これでいって見ようかと・・・。
教えていただいた 機械方式 NameInfo% にしたいですが、先輩に % は関数内で値を変えるとき意外は使うなといわれて・・・。
くそー 何でconst NameInfo%  て読み取り専用にできないだよ!!!!

784 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 07:46:38 ]
constが付いていたら、自動生成した読み取り専用ラッパーに包んで返す。
……とかどうなんだろう。やっぱ駄目かなあ。

785 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 08:47:15 ]
プロパティでgetterのみにすればいいんじゃないか?

786 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 10:14:48 ]
値型^って普通使わないよ
一番効率悪いし他の言語では全く使えない

787 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:24:35 ]
String型だけなんで^なしで宣言出来ないんだろう…
あとshortの列挙型に-32768が使えないのもわからん
C#なら通るのに

788 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:27:32 ]
String型がcharの配列なので。
shortの-32768(全ビットon)は未定義値の代わりなので。

789 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:38:51 ]
即レスありがとう
Stringの内部構造までは見たんだけど、つまりC++/CLIでは配列はスタックに作れないってことなのかな

790 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 04:34:30 ]
動的にサイズを変えられるんだからヒープまたはマネージドヒープと考えるのが妥当なんじゃないの



791 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 07:45:38 ]
^なしに記述しているのだって、別にスタックに配置している訳じゃないし

792 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 15:44:34 ]
String型だけなんで^なしで宣言出来ないんだろう…

ref class だから

793 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 00:51:52 ]
C++のRAIIパターンでDispose持ちの参照型を扱おうって意図だから
参照型でもこれはOKなんよ。
実際はDisposeのシグネチャを持ってる必要もないんだが。

ただ何故かStringとarrayは宣言できんのね。

794 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:13:56 ]
deleteしたオブジェクトのファイナライザって呼ばれないの?
C++/CLIのデストラクタ=C#のDisposeだと思ってたんだけど

795 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:31:17 ]
C#でもDisposeしたときはGC.SuppressFinalizeでファイナライザの呼び出しを抑制するが?

796 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 11:24:38 ]
ファイナライザの呼び出しが有効になってるとGCのパフォーマンスに悪影響を与える。
明示的にDisposeが行われた後はファイナライザ呼び出しは不要なはずなので
ファイナライザを呼び出さないようにGCに指示するようになってる。
アンマネージリソースを直接持ってない限りはファイナライザ(!の方)は定義しない方がよい。

797 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 13:17:58 ]
~ClassA()や!ClassA()はDispose()やFinalizerそのものではない。
正確にこのコードになるわけじゃないのだけれどイメージとして捉えて欲しい。
 ~ClassA() { }
 !ClassA() { }
上2つを使っていると、ここからはコンパイラが生成する。
 void Dispose(bool disposing) {
   if (disposing) ~ClassA(); else !ClassA();
 }
 void Dispose() {
   Dispose(true); GC.SuppressFinalize(this);
 }
 void Finalize() {
   Dispose(false);
 }



798 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:38:36 ]
C/C++室より、案内されてこちらのスレに来ました。


void test(int x[]){cout << sizeof x << endl;return;}

int main(array<System::String ^> ^args)
{
  int x[] = {1,2,3,4,5};
  test(x);
  cout << sizeof x << endl;
}

■出力結果
4
20

なんで両方とも20にならないんでしょうか?

799 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:58:20 ]
CLI一切関係ないな
仮引数が配列表記でも実際はポインタとして渡される

800 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:15:42 ]
>>799
>CLI一切関係ないな
失礼しました。
void test(int x[]) が void test(int* x)として解釈されるという事ですね。
誘導元のほうでも親切な方が教えてくれました。

ありがとうございます。



801 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:32:29 ]
ハンドル使ってるから脊髄反射したんだろう

802 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:37:37 ]
>>801
つーか内部的にMSIL使ってる言語は気持ち悪いんだよ
全部こっちに回すから頼んだ

803 名前:デフォルトの名無しさん [2009/10/10(土) 23:57:23 ]
出力結果から想像できるだろうに。
近頃の子は自分で考えるってこと、しないのかねぇ。

804 名前:デフォルトの名無しさん [2009/10/11(日) 09:13:05 ]
void func(int *a);
とかアドレスを引数にする昔の関数に
int b;
func(&b);
などとすると、
cli::interior_ptr<Type>' から 'int *' に変換できません。
とかいうエラーが出てしまいます。
どうしたらいいでしょうか?

805 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 10:42:48 ]
reinterpret_cast<Int32*>(&b)

806 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:00:48 ]
つーかその例でそのエラー出るか?

807 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:29:34 ]
>>804
pin_ptr<int> p = &b;
func(p);

808 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:03:52 ]
>>804
int bがref classのメンバーなのかな。ローカル変数だったら出ないだろ。

809 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:24:52 ]
C++/CLIの仕様書ってある?
C++で言うとISO/IEC 14882:2003みたいな奴

それがあれば簡単な質問ぐらいならC++スレでレスしてやってもよい

810 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:25:46 ]
仕様書じゃなくて規格票だったorz



811 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:14:27 ]
ぐぐるかecma行って372見てこい

812 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:33:33 ]
blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx

だめじゃんISO規格じゃない
まあecmaのを参考にするか

813 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 15:50:25 ]
>だめじゃんISO規格じゃない 

これが言いたかったのか(笑

814 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:21:26 ]
IETF > Ecma > ISO

815 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:19:51 ]
日本の車もウインカーレバーが右で、ISO規格と違うからな。
イギリスは右ハンドルでもISO通りに左なのに。

816 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:25:50 ]
要するにISOってオナニー規格か

817 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:48:03 ]
そういえばC#のコンパイラの言語バージョンを選ぶオプションは
ISO3.0みたいな表記だったな

818 名前:デフォルトの名無しさん [2009/10/14(水) 09:55:30 ]
現在自民党が民主党を批判していること、
おまえが言うか、とあきれている。

819 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:20:17 ]
ヤトウの仕事だから。

820 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:29:43 ]
>>818
今まで民主党が批判してた事を民主党がやったりもするわけですよ
ヨトウになるとはそういうこと



821 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 22:39:15 ]
>>818
スレタイを読めないおまえが言うか、とあきれている。

822 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 18:55:56 ]
Side-by-sideでexe作ろうとしてるけど
M$っていろんな意味で終わってるなw
保険屋の仕事を作るようにしてあるシステムと同じだろこれw
仕事にしてる奴らは悲惨だろうな。
後には何も残らん。

823 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:11:13 ]
とりあえずMS叩くと出来る奴っぽく見えるよなw

824 名前:デフォルトの名無しさん [2009/10/21(水) 01:14:26 ]
エラーがなくせずに困っています。
関数のポインタを渡すときに
error C3867: 'SM::f': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&SM::f' を使用してください
などとエラーになってしまいます。
Move(f);
のfが関数なのですが・・・。
どうすればよいでしょう?



825 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 09:54:36 ]
ほんとにわかってないのか、これなのかはソース見せてもらわないと判断できないが・・・
ttp://msdn.microsoft.com/ja-jp/library/b0x1aatf(VS.80).aspx

826 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:56:32 ]
ダウンロードの詳細 : Visual Studio International Feature Pack 2.0
ttp://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7d1df9ce-4aee-467f-996e-bec826c5daa2

827 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 18:14:59 ]
1.0系でとりあえず行くのかと思ったらいきなり2.0かよw

828 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 18:34:30 ]
6月の時点で2.0ベータが出てただろ

829 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 12:57:39 ]
てす

830 名前:デフォルトの名無しさん [2009/11/30(月) 21:33:43 ]
TreeViewで追加したノードAとノードAの子のノードBのチェックボックス
にチェックしようと思ったんですが以下のコードではうまくいきませんでした。
各ノードの子が存在するかを調べてチェックする以外の方法でコードがすっきりする方法ありますか?

int countMax = treeView_Action->GetNodeCount(true);
for ( int i = 0; i < countMax; ++i )
{
 treeView_A->Nodes[i]->Checked = true;
}




831 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 21:42:40 ]
> 各ノードの子が存在するかを調べてチェックする
これで十分すっきりすると思うが
再帰を知らないとか言うのか?

832 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 16:21:58 ]
どなたかくだすれスレを立ててくだすれ

833 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 16:33:42 ]
こんだけ過疎ってんだから無駄だろ
聞きたきゃここで聞けばいい

834 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:21:57 ]
失礼します。
Iniファイルの読み書きを行いたいのですが、うまくいきません。
エラーは出ないのですが、ファイルが作成されないので・・・。
すいませんが、どこが間違っているのか教えてください。
よろしくお願いします。

using namespace System::IO;
using namespace System::Text;
using namespace System::Reflection;
using namespace System::Runtime::InteropServices;

[DllImport("kernel32.dll")]
static UInt32 GetPrivateProfileString(String^ lpAppName, String^ lpKeyName, String^ lpDefault, StringBuilder^ lpReturnedString, UInt32 nSize, String^ lpFileName);
[DllImport("kernel32.dll")]
static UInt32 WritePrivateProfileString(String^ lpAppName, String^ lpKeyName, String^ lpDefault, StringBuilder^ lpReturnedString, UInt32 nSize, String^ lpFileName);

// Iniファイル読み込み
private: System::Void IniRead(System::Void){
String^ path = Path::Combine(Path::GetDirectoryName(Assembly::GetEntryAssembly()->Location), L"test.ini");
StringBuilder^ sb = gcnew StringBuilder(1024);
UInt32 ret = GetPrivateProfileString(L"DB_INFO", L"SERVER_NAME", L"default", sb, sb->Capacity, path);
System::Console::WriteLine(sb->ToString());
}
// Iniファイル書き込み
private: System::Void IniWrite(System::Void){
String^ path = Path::Combine(Path::GetDirectoryName(Assembly::GetEntryAssembly()->Location), L"test.ini");
StringBuilder^ sb = gcnew StringBuilder(1024);
sb->Append("TestVal");
UInt32 ret = WritePrivateProfileString(L"DB_INFO", L"SERVER_NAME", L"default", sb, sb->Capacity, path);
}

835 名前:834 mailto:sage [2009/12/12(土) 02:26:25 ]
開発環境を書くのを忘れてました。
WindowsXP SP3
Visual Stadio 2010 Beta2
です。

836 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 02:34:25 ]
C++/CLIでわざわざDllImport?

837 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 08:08:41 ]
/clr:safe なのでは

838 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 08:25:36 ]
WritePrivateProfileStringの引数がなんでGetPrivateProfileStringと同じなんだよ。
MSDNをみろよ。

BOOL WritePrivateProfileString(
  LPCTSTR lpAppName,  // セクション名
  LPCTSTR lpKeyName,  // キー名
  LPCTSTR lpString,   // 追加するべき文字列
  LPCTSTR lpFileName  // .ini ファイル
);

>>833の手前初心者スレに池とはいえんな(笑


839 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 13:48:26 ]
初心者スレではCLIスレへ池と言われ
CLIスレでは初心者スレへ池と言われ・・・

840 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 18:28:17 ]
>>833

斬新だな



841 名前:sage [2009/12/12(土) 20:27:27 ]
今まで

Diagnostics::Debug::WriteLine("文字列");
Diagnostics::Trace::WriteLine("文字列");

の違いで Debug は、Debug版コンパイルのみに出力され、
Traceは Debug/Release版 双方で出力される・・・と思って、

Debug::WriteLine("文字列");

を使ってきました。しかし、先ほど

DefaultTraceListener^ dtl = (DefaultTraceListener^)Debug::Listeners["Default"];
dtl->LogFileName = "C:/debug.txt";

としてみると、Release版でも C:/debug.txt に出力されて
しまいました。

Debug版でのみ、出力させるには

#if defined(_DEBUG)
Diagnostics::Debug::WriteLine("文字列");
#endif

としないとダメなのでしょうか?

842 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:21:48 ]
>>841
Conditional属性ついてるから、その認識で間違ってないはずだが

843 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:25:27 ]
Trace::Listeners
Debug::Listeners
は同じコレクションをポイントしていて、片方を変更すればもう片方も変更になる。


844 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:48:40 ]
>>843
そういう問題じゃないだろ

845 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:52:12 ]
>>841-842
C++/CLIではC#やVB.NEtのようにConditionalAttributeを認識しないから、
自分で#ifdef使って、呼び出しを消す必要がある

846 名前:841 mailto:sage [2009/12/13(日) 01:26:19 ]
>>845

ConditionalAttributeを認識しない・・・んですね。
初耳です。勉強になりました。


>自分で#ifdef使って、呼び出しを消す必要がある

とても面倒ですね。自前のDEBUG関数を定義して、
それでまとめて処理させるべきなんでしょうかね。

847 名前:834 mailto:sage [2009/12/13(日) 02:10:44 ]
>>838
遅くなってすいません。
無事にできました、ありがとうございます。

848 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 09:22:00 ]
>>846
関数を使わなくても、#define でいいじゃないか
#ifdef DEBUG
#define DEBUGOUT Trace::〜
#else
#define DEBUGOUT
#endif


849 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 09:28:22 ]
>>846
ちなみに、.NET2からは(Debug|Trace)::WriteLineよりはTraceSourceを使う方がいいことになってる

850 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:13:09 ]
VS 2005で、System::Windows::Forms::ToolStripを継承して、'MyToolStrip' クラスを実装しました。
ビルドすると、ツールボックスの中にMyToolStripが現れましたが、
Formに貼り付けようとすると、

ツールボックス アイテム 'MyToolStrip' の読み込みに失敗しました。アイテムはツールボックスからから削除されます

と表示され、ツールボックスから消えてしまいます。



それならと、既に貼り付けてあるFormクラスの中のToolStripを、MyToolStripへコードを直接書き換えて
みました。コンパイルも通り、実行もできるのですが、FormのデザインをGUIで開こうとすると

デザイナの読み込み時に 1 つ以上のエラーが発生しました。

C++ CodeDOM parser error: Internal Error

が表示され開けません。.NETの標準クラスを継承して、フォームデザイナで使いたいのですが、
どうすれば良いのでしょうか?



851 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 06:08:01 ]
とりあえず、これで動いてる。どこかで下手打ってるのだろう。
ソースをさらせ。
public ref class MyToolStrip : System::Windows::Forms::ToolStrip { };



852 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 06:10:35 ]
コンストラクタで例外投げてるとかじゃね

853 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 08:35:33 ]
これはC#でも同じだが、Controlのコンストラクタに副作用があると
デザーなーの表示に失敗することがあるよ。

854 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:47:21 ]
まあそういう場合は、親がデザイナかどうか判定して挙動を変える必要があるわな

855 名前:850 mailto:sage [2009/12/16(水) 22:16:49 ]
プロジェクトをWindowsフォームで新規作成して、

>>851

のクラスを定義した所、問題無くツールボックスの中にMyToolStripが現れ、
フォームに貼り付けできました。

プロジェクトのランタイムプロパティが
「純粋 MSIL 共通言語ランタイム サポート (/clr:pure)」の場合問題ありませんが、
当方「共通言語ランタイム サポート (/clr)」で開発をしており、
その場合、850で書いたような状況になります。ノートPCのサブ開発環境でも
再現するので、再現性はあります。

皆さんの所では問題ありませんか?

856 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:18:00 ]
知るか
再現云々言うんだったらまずソースを出せ

857 名前:850 mailto:sage [2009/12/16(水) 22:31:48 ]
>>856

Windowsフォームを新規作成して、ランタイムを
共通言語ランタイム サポート (/clr)に変更するだけなのですが・・・。

ソースを貼ります。

Form1.h

#pragma once


#include "test.h"

namespace test {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;



858 名前:850 mailto:sage [2009/12/16(水) 22:32:30 ]
Form1.hの続き
/// <summary>
/// Form1 の概要
///
/// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた
/// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを
/// 変更する必要があります。この変更を行わないと、
/// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、
/// 正しく相互に利用できなくなります。
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}


859 名前:850 mailto:sage [2009/12/16(水) 22:33:28 ]
Form1.hの続き
protected:
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}

private:
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
System::ComponentModel::Container ^components;




860 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:35:58 ]
Form1.h のつづき
#pragma region Windows Form Designer generated code
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
void InitializeComponent(void)
{
this->components = gcnew System::ComponentModel::Container();
this->Size = System::Drawing::Size(300,300);
this->Text = L"Form1";
this->Padding = System::Windows::Forms::Padding(0);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
}
#pragma endregion
};
}

test.h の中身

#pragma once
public ref class MyToolStrip : System::Windows::Forms::ToolStrip { };

プロジェクトのプロパティでランタイムを共通言語ランタイム サポート (/clr)に変更して
コンパイル。ツールボックスの中にMyToolStripが現れるので、Form1へ貼り付け。

以上です。



861 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 10:41:25 ]
だらだらコピペするんじゃなくて、再現する最小限のソースを作って貼るんだよ

862 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 12:30:50 ]
>>861
最小限を貼っているようにしか見えないが。

863 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:33:13 ]
//
//TODO: ここにコンストラクタ コードを追加します
//

864 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:34:51 ]
つーかここでいう最小限は天順とtest.hを貼ればいいだけじゃないかw

865 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:35:17 ]
天順→手順

866 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:37:25 ]
何で貼るのかというと、レスをみた人が追試するためにはるんで
そもそも見る気失せるような書き方しちゃ手伝ってくれる人が減るだけだな。

867 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 13:39:45 ]
>プロジェクトのプロパティでランタイムを共通言語ランタイム サポート (/clr)に変更して 
ソースが見当たらないが。IDEの制限だったような。pureじゃだめなん?

868 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 17:14:42 ]
MyToolStripにpublicついてねぇぞ

869 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 17:42:56 ]
>>868
refクラスではpublicを付けても付けなくてもpublic継承になる。
msdn.microsoft.com/ja-jp/library/ms235220.aspx

870 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 19:53:29 ]
そもそもデザイナってILONLYじゃないアセンブリ読み込めたっけ



871 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 20:29:01 ]
とりあえずソリューション内に別プロジェクトを作って、
そっちにMyToolStripを作って、メインプロジェクトから参照すれば、
/clr /clr:pure とどちらでもいけた。

872 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:57:12 ]
>>850の問題とは関係ないかも知れないが、
自分もデザイナが見れないエラーに悩まされ、さっき解決したから載せとく。

(12).ToString();

上記のように、ToStringに直値指定するとデザイナが見れなくなる。
コンパイルも通り、実行もちゃんと反映されてるから、見つけるの苦労した

873 名前:872 mailto:sage [2009/12/23(水) 13:56:38 ]
>>872に追加

InitializeComponent関数内でのToString直値がダメな原因だった。
そもそも、InitializeComponent関数はコードエディタで変更してはいけないらしい

InitializeComponent関数外でToString直値は正常に使える。

874 名前:デフォルトの名無しさん [2009/12/29(火) 16:20:36 ]
皆さんはC+/CLIでポインタを宣言する場合、
^や*を型の後ろにつけます?それとも変数名の頭につけます?

書籍等だと以下の形式が多い気がするのですが、
マネージとアンマネージで統一感がとれないような・・

[マネージ]
String^ hoge

[アンマネージ]
char *hoge


875 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:04:35 ]
どっちも型名の直後につけるかな。
アンマネージでは変数の方につける人が多いみたいだけど、
ポインタ型っていう型名だから、変数の側につけるのには違和感があるんだ。

876 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 19:05:33 ]
C#では構文上も型名の一部ということになってる
int *x, y, z;
と書くと全てポインタになる

877 名前:デフォルトの名無しさん [2009/12/29(火) 21:16:52 ]
>>875
>>876
C++/CLIだと型名の一部にはならないよね?
例えば以下のコードはコンパイルエラーとなる。

class Hoge{};

int main()
{
Hoge* x,y;
x= new Hoge;
y= new Hoge;//yがポインタとして認識されないため、コンパイルエラー
return 0;
}

CとかC++と同じ仕様なんだろうけど、
ポインタ型っていう考えでいくとなんでコンパイルエラーとなるのかが説明できない。
C#が特殊な気がする。

878 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 21:33:01 ]
なんかCLIやってる人って可哀想だね

879 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 21:53:43 ]
C/C++の構文がおかしいだけで意味上はポインタ型
不自然なのは誰の目にも明らかだからわざわざC#では変えたんだろ
どっちでもいいけどマネージとアンマネージで変えたりせずにどっちかに統一するべき

880 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 22:33:26 ]
「つもり」は「意味」にならんだろ



881 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 23:18:54 ]
ならんだろうね

882 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 00:11:42 ]
あの記法でポインタを表そうとすると、
関数ポインタ型を表す場合、型の方に*をつけることは出来ないので、
変数の方に*をつけてポインタを表すというのは一定の合理性がある。

883 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:07:27 ]
一定の合理性があるな。

884 名前:デフォルトの名無しさん [2010/01/02(土) 10:56:36 ]
CLIでcallocするとどうなるの?

885 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 11:50:26 ]
普通にアンマネージヒープが割り当てられるだけ

886 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 18:49:18 ]
当初VB.netで作った業務アプリをVC++/CLIに移植したのですが、
実行速度もメモリ使用量も違いがあるようには思えず、
WinXPだとVC++のランタイムが別途必要になった分、劣化したような気にすらなるのですが、
VC++/CLIの利点って、上達すれば業務アプリでもあるものなのでしょうか?

887 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 19:19:16 ]
ない
既存のアンマネージコードをマネージコードと混ぜるためだけに仕方なく使う言語
その場合も使用範囲は最小限に留めて,できるだけVBやC#で書くようにするのが正しい

888 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 20:26:51 ]
gcnewをなめるなよ

889 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 20:49:08 ]
MS自身ですら避けてるからな
マネージからアンマネージ→DllImport
アンマネージからマネージ→CLRのホスティング

890 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:27:46 ]
XNAくらいだっけ、MS製で使ってるの



891 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:01:42 ]
CLI 使ってる時点で速さが変わらないのは当たり前
アンマネージドコードを利用しないと速くなる訳が無い

892 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 22:16:08 ]
新規にアンマネージコード書くなら普通のネイティブなDLLとして作ってC#からDllImportする形の方が扱いやすい

893 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 20:22:39 ]
XNAってなんで早く動くの?

894 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 21:01:54 ]
ゲームってDirect3Dに描画命令を送ってからの内部の処理が重くてボトルネックになるので
C++/CLIを挟もうがゲームロジックがマネージコードで書かれてようがあんまりパフォーマンスに影響しない

895 名前:デフォルトの名無しさん [2010/01/15(金) 20:33:57 ]
ネイティブのアプリケーションがプラグインに飛ばしてくるコールバックを拾って、
それをC#に渡して処理するアプリケーションを書きたいのですが、
その辺のノウハウについてまとまっている情報源をご存知の方はいませんか?

896 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 20:47:27 ]
イベントかインターフェイス経由でC#にそのまま流せばいいだけでしょ
全く悩むところなんかない

897 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:00:14 ]
>>896
C++/CLIで書いたコードって、普通にやるとマネージコードにコンパイルされると
思っていたのですが、ネイティブから呼ばれても大丈夫なのでしょうか。

898 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:05:35 ]
/clr なら相互に呼び出し可
/clr:pure の場合、マネージドコードからネイティブ方向の呼び出しは可
/clr:safe の場合、不可、ただしP/Invokeは可能。

Win32APIのコールバックを直接C#で処理したいなら、
特殊なものでなければ、P/Invoke+Delegateで対応可能。

899 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:11:21 ]
最悪COM経由でどうとでもなる

900 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 21:20:41 ]
>>898
分かりやすい解説感謝します。
そういうことなら、普通にアプリ指定のコールバック関数を定義して、
そこからC#のコードを呼べばよさそうですね。ありがとうございます。



901 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:01:30 ]
教えてください。

まず、VC2003 で作った一部マネージコードの混じったアンマネージの .lib ファイルがあります。
これを(ちょっと事情があって) VC2003 でアンマネージの .dll にくるみました。
で、これを(さらに事情があって) VC2008 の C++/CLI でマネージの .dll に
DllImport を利用してラッピングしようとしています。

ここで、ライブラリとして公開する関数はいくつかあるのですが、その中にパラメータとして
構造体を参照形式で持つモノがあります。
構造体の中には std::string で定義した要素を持つモノもあるのですが、これを先のアンマネージの
.lib の関数内で参照したり変更したりするとアクセスバイオレーションで不正終了することがあります。
同じ構造体内の int 型などの要素の値を参照/変更しても変な値が入ることがあります。
そこで、この構造体の std::string 型の要素を char[] 型に変更して試したところ、特に問題なく期待通りの動作をしました。
マネージ dll を介さずに、アンマネージの .dll を使用する分には元のままでも問題なさそうです。

この原因ってなんでしょうか。
また、回避方法があれば教えていただけないでしょうか。

902 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:03:11 ]
ゲームでCOM経由はどうなんだろう
DllImport、P/Invoke+Delegate とは違うんだよね
どんな時に使うんだろう…どう使い分けるのかの時点で悩みそうだ…

903 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:18:09 ]
>>901
そんな使い方するのがおかしい。
C++/CLIでアンマネージドとマネージドを混ぜたら、あとはマネージド側から使うだけ。

904 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:24:50 ]
>>901
真っ先に思い浮かぶのは、メモリ確保周りの問題。
2つのDLLでstd::stringが同じメモリ確保ルーチンを使うようにしてみたらどうなる?
例えば、両方でグローバルなnew/delete演算子関数を定義するとか。
#include <new>
void* operator new(std::size_t n)
{
if (void* p = HeapAlloc(GetProcessHeap(), 0, n))
return p;
else
throw new std::bad_alloc();
}

void operator delete(void* p)
{
if (p != 0)
HeapFree(GetProcessHeap(), 0, p);
}
std::stringに対して自前のアロケータを指定するというのでもいい。

905 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:42:18 ]
VC2003ってことはManaged C++か

906 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:54:56 ]
>>901
C++/CLI以前の問題じゃないか、それ

基本的にDLL境界をまたいで、FILE*のようなCランタイムオブジェクトや
malloc()/newで確保されたメモリ渡すときは要注意
Aで確保されたメモリをBで開放するときは、モジュールAとBが同一の
ランタイムにダイナミックリンクしてないと即終了
C++のstd::stringなんぞをインタフェースに使ってたらそういうことは
当たり前に起きる

>>904の指摘はそれを前提にしている訳だが、
C++標準ライブラリクラスは、そもそも実装の大半がヘッダにあり、
バージョンが違えばそのバイナリ互換性すら怪しい
俺はそもそも設計として、C++標準ライブラリクラスをDLLインタフェースに
使うことは全くオススメしない
設計を見直すべき

907 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 00:13:38 ]
>>904
developer.apple.com/jp/technotes/tn2007/tn2185.html#TNTAG7
ameblo.jp/woooh-p/entry-10037990751.html

調べてみた。部分的なら書き換えおkだけど
標準部分の書きかえはそれなりに茨の道な気がする…

908 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:48:20 ]
C++/CLIも.NET総合もくだすれが発見出来ないので、おそるおそるここで聞かせて頂きます。

DLLを制作しているのですが、DLL中からフォームを呼び出すレベルで詰まっています。
DLL自体は動的に外部の別のDLLから呼び出され、初期化関数が走らされる感じで、

IDEからWindowsフォーム(CLR)を追加し、フォームを何も弄らない状態で
DLLの初期化関数中で(gcnew hoge::hogeForm())->Show();
しているのですが、Showの呼び出し中に固まってしまいます。
メッセージループが存在しないせいかと思い、Application::Run();してから
Showしても同様です。

通常のexeを作成し、メインウィンドウのインスタンスをもう一つ同様にShowしようとしても
同じく死んだので、何か初歩的なレベルでミスしているのだと思うのですが、
エスパーしていただけないでしょうか……。


909 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:54:28 ]
Application::Run(gcnew hoge::hogeForm());

910 名前:>>901 mailto:sage [2010/01/16(土) 18:05:57 ]
>>903-907 のみなさま、ありがとうございます。

特に >>906 さん。なんとなくわかってはいたのですが、言葉できっちり表現がされていて助かります。
>>904 さんの方法も試した上で、週明けに改めて説明を行って対応方法を変更する方向で動きます。



911 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 19:44:08 ]
>>908
(gcnew hoge::hogeForm())->Show(); じゃフォームのハンドルを押さえているヤツが居ないな

912 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 22:48:45 ]
Formは表示中GCの対象外になるようになってる

913 名前:908 mailto:sage [2010/01/17(日) 04:44:50 ]
>>909
>>911-912
どうもありがとうございます。
Application::Run(gcnew hoge::hogeForm());も試して見ましたが、同様にそこで処理が止まります。
(次の行でデバッグ用の出力を入れていますが、出力されません)

ネイティヴ関数の状態から(CLRでない空のプロジェクトにグローバル関数を置いた状態から)、
/CLRを追加し、Windowsフォーム(CLI)の追加、
グローバル関数を記述したcppからのmscorlib.dllやフォームのヘッダの参照、
Application::Run(gcnew hoge::hogeForm());と、やっていることはこれだけで、
以下のような感じです。

#include <windows.h>
#using <mscorlib.dll>
#include "hogeForm.h"
int __stdcall Init() {
Application::Run(gcnew hoge::hogeForm());
}

ManagedとUnmanagedの区分け等、何か気を遣うところがあるでしょうか。


914 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 05:09:13 ]
>>913
Init()を呼び出す。
フォームが表示される。
フォームを表示したままinit()が終了して呼び出し元に戻ってくる。
というのを期待しているとかしてないよね?


915 名前:908 mailto:sage [2010/01/17(日) 05:15:53 ]
>>914
フォームが表示されることは期待しています。
上のコードでは、フォームを終了しない限り、処理が呼び出し元に返ってくることは期待してません。


916 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 05:18:14 ]
とりあえずこれで動いてる
// testd8.cpp managed
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Windows::Forms;
void Init() {
  Application::Run(gcnew Form);
}
// testd9.cpp native
void Init();
int main() {
  Init();
  return 0;
}

cl /clr /c  testd8.cpp
cl /MD testd9.cpp testd8.obj


917 名前:908 mailto:sage [2010/01/17(日) 18:35:12 ]
>>916
同等の物を書いてみましたが、確かに動作しています。
呼び出し方法やら何やら、片っ端から確認していって、原因を特定しようと思います。
どうもありがとうございます。


918 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:05:10 ]
汎用的なDLLでいきなりApplication::Runとかされたらヤだな

919 名前:デフォルトの名無しさん [2010/01/21(木) 22:57:19 ]
質問ですが、
タイトルバーがなく3Dの縁があるフォームを作るには
どうすればいいのでしょうか。
環境はVC++2008です。
フォームのプロパティ設定の中には見つかりませんでした。


920 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 00:10:35 ]
C# タイトルバー 消す
とかでググれば一発
調べても分からない場合でもそういう質問はC#かVBスレでしたほうがいい



921 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 21:52:51 ]
>>920
なるほど、.NETなら共通なんですね。
わかりました、ありがとうございます!


922 名前:デフォルトの名無しさん [2010/01/23(土) 11:53:50 ]
Visual Stuidion C++ 2008での書き方を教えて。

フォームクラスだと、イベント関数とかすべてヘッダの方に生成されるけど、
独自メソッドもすべてヘッダーの方に書くものなの?
それともプライベート関数はcppの方に書くとかルールがあるの?


923 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:01:29 ]
俺はヘッダは宣言のみにして、ソースファイルに定義。プロパティも同じ。
全部ヘッダに書いて、cpp削除でもいいんじゃね?w

924 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:14:29 ]
自分もそうかな。プロパティはヘッダに書いちゃうこともある。
C# とかは分かれてないからどっちでもいいと言えばいいんだと思うけど、C/C++ の伝統がそうさせる。w

925 名前:デフォルトの名無しさん [2010/01/24(日) 16:24:16 ]
.NET言語って全部コンパイル速いからな〜、ヘッダに書いといて無駄なコンパイル発生しても
ほとんど気にならないレベル

926 名前:デフォルトの名無しさん [2010/01/26(火) 00:04:55 ]
temp_buf[TEMP_BUF_SIZE], temp_buf2[TEMP_BUF_SIZE]は'\0'で初期化されてます。
文字列がtem_bufに格納され、その中から"search"を探索し、文字列が見つかれば
そのsearchのs以降の文字をtemp_buf2にコピーしようとしています。
が、実行すると暴走してしまいます。
*pの使い方がおかしいような気もするんですが、
原因が分かりません。
環境はgccですが手元にpcが無いので詳細は分かりません。
もし必要でしたら調べてきます。ごめんなさい。

char com[] = "search";
char *p = strstr(temp_buf,com);
if( *p != NULL ){
if( sizeof(temp_buf2) - &(temp_buf[TEMP_BUF_SIZE-1])-&(*p)+1 < 0){
fprintf( stderr, " buffer overflow 1\n" );
exit(-1);
}
strcat( temp_buf2, p );
printf("%s",temp_buf2);
 }

よろしくお願い致します。


927 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:13:34 ]
>>926
>>1

928 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:23:02 ]
スレチですね
失礼します

929 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:26:06 ]
>>928 は
>>926
のことです

930 名前:デフォルトの名無しさん [2010/01/26(火) 22:01:38 ]
VC++ 2008 ExpressEdition で Form::Controlクラスを継承した独自コントロールクラスに
枠をつけるにはどうすればいいのでしょうか?
プロパティ設定には境界線の項目がありません。
それらしきメソッドも見当たりません。誰か知っていたら教えてください。



931 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:06:43 ]
>>930
ほい。
uchukamen.com/Programming1/Attributes/index.htm

932 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:14:16 ]
>>930
VisualStyleRenderer使って自前で描画する
プロパティも自分で実装する
あと>>920の3行目

933 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:19:28 ]
要するに、
コモンコントロールのそれぞれは自前で描画していたんですね。。
良く分かりました、ありがとうございます。

934 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:23:25 ]
>>933
Windowsで動作するほぼ全てのウィジェットレンダラーは
Win32GDIをまとめ直したものに過ぎないんだが、
最近の人はWin32APIで直接アプリを作ったりする経験がないから自前で描画する、という感覚がつかみにくいのかもしれんねぇ。

それはそうと、コントロール描画くらいならC#で実装した方が簡単だよ。

935 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:30:26 ]
>>934
動作のコアとなる部分がC++で作ってあって、DLLとしてまとめてあるんだけど、
GUI側をC#で作るとなると、呼び出すのに定義作り直すのがめんどうで、
どうしてもこの言語に手を出さざるをえないのよね。

936 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:32:56 ]
>>935
ええー。今時、WindowsでGUIを書くのにC++を使うなんて、マゾとしか思えん。
逆ならわかるがねぇ。
GUIをC#で書いてモデルや下回りをC++でってなら。

937 名前:932 mailto:sage [2010/01/26(火) 22:36:49 ]
すまん枠描くのはControlPaintだった
よっぽど深い相互運用しない限りはexport/DllImportの手間を差し引いてもC#の方が楽だし
安全だし取り回ししやすいよ

938 名前:935 mailto:sage [2010/01/26(火) 22:44:13 ]
>>936-937
むう、再検討します。


939 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 22:58:32 ]
いわゆる普通の ウィンドウ枠は WS_BORDER だぞと。
普通は CreateParams オーバーライドして Style プロパティに
WS_BORDER のビットフラグ立てたのにするだけ。
3D 枠とかも基本は一緒な

940 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 23:04:22 ]
いやWindowsネイティブのコントロールに対応しない独自描画のカスタムコントロールの場合は
枠も自分で描くべき
標準のコントロールもそうなってる



941 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 10:27:29 ]
そもそもコモンコントロールだってただの画像だしな

942 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 00:20:52 ]
C++/CLI と C# embedded C++ どっちがいい?

943 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 00:48:20 ]
3択な上に比較対象がおかしい。

944 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 02:04:59 ]
何がしたいのかも判らんのに「どれがいい」も糞もないけどな。
WM (CE) の話で C++/CLI or C# or eVC++ のどれか、っていうなら
…いや、やっぱり好きにしろとしか言えないw

945 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 02:46:25 ]
(C++ in C#) の意味では?

946 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 09:39:46 ]
>>942-943
ワロw

947 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 03:31:10 ]
これからはC++0x/CLIの時代だろ

948 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 05:14:01 ]
敵はObjective-C++0xだな

949 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 06:53:39 ]
今までC++とC#ばかりいじくっていたが、Google様にお伺いを立てると
実行速度は

C++ > C++/CLI > C#, VB.NET らしい

C++/CLIの方が効率よく高速なMSILに変換される仕組みでもあるのかな?

950 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:12:50 ]
無いし実際同じ



951 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:22:21 ]
C++/CLI はネイティブコードで書いた部分の実行速度が速いからとかじゃ?

952 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:38:51 ]
ボックス化された値型とかトラッキング参照とか駆使して低レベルな最適化をやれば速くなるかもしれないけど
JITのバージョンアップであっさり逆転したりしそうだ

953 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 22:47:30 ]
検証に使用したコードがないと話にならんだろ。

954 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 22:51:54 ]
C#よりもC++/CLIの方ができることの制限が少ないから、速いコードを書くこと余地は大きいだろうね。
C++はUnsafeだから、こういうのを単純に比較しても意味ないと思うんだけどな。

955 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 23:03:35 ]
一般に将来的な最適化の妨げになるしなあ

956 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 03:06:48 ]
C++/CLIの速さはこの2つを足して2で割ったところとしているんでしょ。
マネージ部分の速さ = C#, VB.NET
ネイティブ部分の速さ = C++

957 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 09:17:41 ]
まあアンマネージだけで書いたらC++もC++/CLIも変わらんわな
マネージだけで書いたらC++/CLIもC#も変わらんわな

測ってないけど

958 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 10:42:19 ]
くだすれ落ちているのでここで失礼します。

unmanagedなバイト配列(unsigned char* byteArray, int len)を
managedな配列(array<Byte>)に変換したいと考えています。
とりあえずインデクサをつけて一個一個代入していったり、
Addしてみたりしたのですが、随分と処理に時間を喰ってしまいます。
そこまで速度に神経質なプログラムでも無いのですが、
もっとスマートに配列を変換する方法は無いものでしょうか。


959 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:29:42 ]
Marshal.Copy(IntPtr, byte[], int, int) とか。

960 名前:958 mailto:sage [2010/02/01(月) 12:04:10 ]
>>959
Marshal探せば良かったんですね。
Managedメモリを固定して確保してからmemcopyとか、明後日の方向に向かって努力していました……。
どうもありがとうございました。




961 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 03:10:27 ]
C++/CLIは/clr /clr:pureでは常にunsafeであり、
Cタイプの配列を使った場合のパフォーマンスが良い。1〜2割程度。
C++/CLIの暗黙のP/InvokeはSuppressUnmanagedCodeSecurityAttributeがデフォルトでオンなので、
C#のP/Invokeに対してパフォーマンスが良い。2〜3倍程度。
C#のP/InvokeにSuppressUnmanagedCodeSecurityAttributeを追加するとその差はなくなる。
またC++/CLIのリンク時に/CLRUNMANAGEDCODECHECKを付けると、
この属性がオフになるためパフォーマンスはC#と変わらなくなる。


962 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:49:51 ]
C#でも一応スタックに配列取ったりマネージ配列やアンマネージ配列にポインタでアクセスしたりできるよ

963 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:10:43 ]
マネージドで書いとけばいいのにやたらアンマネージド呼び出して
結果マーシャリングコストばっかりかかってパフォーマンス悪化とか、ありそうな話






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<214KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef