5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

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

C++/CLI part3

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

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

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

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

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

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

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

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

310 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/30(日) 23:30:57
で、それだけで何も作れなくなるの?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

327 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/12/12(金) 08:05:01
MFC 側で Window Activate 時に Form を前にしてやればいいんじゃね?

330 :デフォルトの名無しさん:2008/12/12(金) 08:07:09
後は、ホストするか
http://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 :デフォルトの名無しさん: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でも無理だったんですが原因わかりますか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

354 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/01/18(日) 05:51:22
はっきり言って全然わかりません。同時に使うのは厳しすぎますね
じっくり解読しますありがとうございます。


357 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/01/30(金) 01:28:02
自分の狭い世界で語られてもな

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

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

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


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

364 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/01/30(金) 22:31:23
cli_str = gcnew String(c_str);


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

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

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

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

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

c_str[0]=cli_str[0];

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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


383 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/02/02(月) 00:27:50
仕事で事前調査用に使ったが、周りに理解されず、本番はVC++6.0でMFC4.2ときたもんだwww

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

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


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

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

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

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




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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


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

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


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

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

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

409 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/02/05(木) 01:18:58
日記もつけたし今日は寝る。お休み。

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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

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

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

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

枚挙に暇がない

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

434 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2009/02/22(日) 12:00:31
>>430
デスクトップでプログラム書く時は、組み込み脳は捨てろ。

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

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

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

438 :434: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 :デフォルトの名無しさん:2009/02/22(日) 14:31:08
C#で試したらLINQに行っちゃう気が

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

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

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

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

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

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

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

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

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


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

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

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

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

453 :450:2009/03/03(火) 23:11:59
>>451

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

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

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

>>451

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)