[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 04/12 03:21 / Filesize : 122 KB / Number-of Response : 487
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

くだすれC++/CLI(初心者用)part2



1 名前:./1256645713/662 mailto:sage [2010/03/15(月) 09:41:19 ]
おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。

前スレッドはこちら
くだすれC++/CLI(初心者用)
pc8.2ch.net/test/read.cgi/tech/1142144110/l1

dat落ち姉妹スレ
C++/CLI part3
pc12.2ch.net/test/read.cgi/tech/1206447234/l1
pc11.2ch.net/test/read.cgi/tech/1142147319/l1
pc8.2ch.net/test/read.cgi/tech/1126450441/l1

managed C++ やろうぜ!! 002
pc8.2ch.net/test/read.cgi/tech/1139043535/l1

335 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 17:47:56.62 ]
C++/CLIがなかったら
どうやってラップするの?

336 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:01:37.46 ]
C#-->C++は簡単だけど、逆は面倒。

337 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:03:44.31 ]
別にスタティックライブラリだろうがC++ライブラリだろうが
なんでもかんでもDLLに包んでP/Invokeでおk

ObjCコンパイラ以上の荒業でラッパーコードが書けるのがC++/CLIの醍醐味だけど
なんか、こう、便利とは違うんだよなあ…

338 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 18:05:53.91 ]
マネージドで、ポインタを使いまくれる。

339 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 19:58:57.49 ]
C#でできなくてC++/CLIでなら可能なポインタ関係の操作ってあったっけ?
C#のunsafeの方が簡潔にCっぽく書けて扱いやすい気がするんだが

340 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 09:14:21.36 ]
C#はMarshal派

C++のUIだけC++/CLIやC#みたいに自動で作ってくれるC++は無い物か
BCBなら出来るけどさ

341 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 21:35:58.12 ]
BCBでやれば万事解決

342 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 14:14:27.30 ]
MSからBCB出してくんねーかな
C++/CLIは無かったことにして、買収しちゃえばそれで済むのに

343 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 23:59:08.75 ]
だからC++/CLIは「WinFormsが使えるC++」なんて生易しいものじゃないと何度言えば



344 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 07:08:43.64 ]
Windowsは、C++でプログラミングが基本。

345 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 08:58:03.95 ]
なぜC++は易しいのにC++/CLIは易しくないのか?
みたいな無神経な言い回しが何度も言われていた時期があった。

聞くほうも同じくらい無神経だから何度言っても通じないことは容易に想像できる。

346 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 09:30:47.84 ]
まあネイティブのC++でGUI作るよりはずっと簡単だけど
C++/CLIでWinForms使うなっていうのは
どうせC#わからないと使えないしC++の経験があってもC#覚えたほうが早いからC#やれってこと
C++の経験があるからC++/CLIがいいだろうと思って始めた初心者が
C#のTIPSサイトですぐ出てくるようなコントロールの使い方を質問してくるとそりゃC#やれと言いたくなる

347 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 09:58:07.10 ]
>>344
Windowsでの基本はC++だが、
WinFormでの基本はC++じゃない件

348 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 16:10:30.57 ]
せめてVB並みのインテリセンスを実装してくれ

349 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 16:29:27.88 ]
2010にインテリセンスのらないの確定か
vNextも最初のバージョンは載らないらしいし

350 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 23:34:53.54 ]
GUIでUI設計ができてネイティブコードその上爆速コンパイル
Borland時代のDelphiはまさに神言語だったんだなぁと思う

351 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 00:31:39.48 ]
C#がネイティブコード吐く言語だったとしてもコンパイルは爆速のはずだよ
C++の言語仕様が糞なだけ

352 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 00:57:16.04 ]
Scalaはコンパイル遅いけど糞なのか?

353 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:30:18.33 ]
C#も多次元配列とか使わなければ速いよ



354 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:37:09.00 ]
Cが速いのは、安全性と裏腹。

355 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 09:53:59.45 ]
Cでも安全性は確保可能

356 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 17:08:23.75 ]
理屈では可能でも
現実の大部分のプログラムはそうなってないんだけど

357 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 20:01:09.19 ]
そうか?
それだと原発事故と飛行機事故と自動車事故と比べて騒いでる連中と同じだぞ

358 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 21:01:16.07 ]
Cは標準ライブラリが安全性を確保するのが難しい作りになってるだけで、
使うライブラリによっては安全に書ける、気がする

359 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 21:35:52.26 ]
セキュリティは別にして、.NETはメモリ破壊が起きないのがいい
お前はもう死んでいる的なバグがずっと少ない

360 名前:デフォルトの名無しさん mailto:sage [2011/07/01(金) 22:42:12.30 ]
ガベコレは、理論武装とかしなくても安全性が明らかだから好感を持てるんだが、
逆に言うとガベコレ使わなくても明らかに安全な部分はCで書いていい

361 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 10:04:29.39 ]
C++/CLIはやれば出来る子
計算部分はネイティブで書いて、GUIや描画部分は.NETにやらせることで
高速かつ生産性の高いプログラミングが出来る

・・・と、言う夢だったのさ

362 名前:大天使 ◆uL5esZLBSE mailto:sage [2011/07/05(火) 13:17:03.75 ]
>>357
Cは安全性を捨てて速度得てんだよ バカか?
Cに安全性を追加したら
それは劣化C#になるから、下手に自分でかいた甘いコードで安全性をはかるよりも
C#でやるべき

お前はなんか、C++上で劣化C#作って喜んでそうなバカだな

363 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 15:20:27.62 ]
自演乙



364 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 15:46:40.55 ]
VS2010で作っちゃったんだけど、VS2008に変換することって出来ます?
インテリセンス無いから入力がめんどくさい・・・

365 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 21:56:13.11 ]
無理
一応注意しとくと2008でコンパイルした混在アセンブリは.NET4でロードできなくなるよ?

366 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 22:07:00.37 ]
あとはアドイン購入か。
www.wholetomato.com/default.asp

367 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 23:11:17.61 ]
新規プロジェクトにコードだけ引っ越した方が簡単な気がするけど

368 名前:デフォルトの名無しさん mailto:sage [2011/08/18(木) 15:44:09.37 ]
俺もそう思う
projファイル書き替えでなんとかなるけどね
混在はapp.config無理やりつけてやるとか

369 名前:デフォルトの名無しさん mailto:sage [2011/08/31(水) 22:00:08.56 ]
プロジェクトをいちいち作るのがめんどくさい…

370 名前:デフォルトの名無しさん mailto:sage [2011/09/02(金) 22:58:08.40 ]
MSBuild 用のXMLなんだから、直接修正しろよ

371 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 13:37:36.74 ]
どうでもいい事だよ C++/CLI で better C なんて

372 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 11:52:55.12 ]
msdn.microsoft.com/en-us/library/windows/apps/hh454076%28v=VS.85%29.aspx
なんかわけのわからないことになってるぞ
C++/CLI切ってネイティブのC++にC++/CLI風のCOM拡張を入れるらしい

373 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 13:18:45.29 ]
切るんじゃなくてWinRT API用の拡張。
.net framework用には今まで通りC++/CLIを使う。



374 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 14:44:53.44 ]
.NETとCOMで共通のAPIを用意して、C++は完全ネイティブでCOM使うっていうのは
C++/CLIに比べれば至極真っ当なやり方だと思う
最初からそうしてくれてれば良かったのに

375 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:24:20.48 ]
>>374
それではプラットホームに依存してしまう。

376 名前:デフォルトの名無しさん mailto:sage [2011/09/16(金) 21:42:24.87 ]
C++/CLIってCLI拡張の部分は標準化されてるけど
ネイティブコードとどう結びつけるかは実装依存でしょ
CLIに依存する記述だけ言語仕様から削ればCOMとのバインディングは実装次第ってことで問題ない

377 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 03:32:40.73 ]
Win32アプリケーションとして作成したプロジェクトで、
作成されたウィンドウに.net framework用のコントロールを
貼ることは可能でしようか?

378 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 06:50:32.14 ]
つ CWinForm...

msdn.microsoft.com/ja-jp/library/6xfx8bsa(v=VS.80).aspx

379 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 15:35:43.23 ]
>>378
ありがとうございます。
MFCのCViewの派生なんですね。
CView系は使いたくないのでちょっとソースを読んでみます。

380 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 20:45:06.45 ]
別にソース読まなくても、CWinFormsControl じゃ駄目なの?

381 名前:デフォルトの名無しさん mailto:sage [2011/09/20(火) 22:52:53.28 ]
>>380
CWinFormsControl で大丈夫そうですね。
ご指摘ありがとうございます。

382 名前:デフォルトの名無しさん mailto:sage [2011/09/26(月) 15:27:11.67 ]
>>362
多分わかってるだろうけど、おかしいよ。
Cは安全性を捨ててなんていない。安全性なんて無かった。

383 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 15:19:32.05 ]
もともと持ってないものは捨てられないわな



384 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 23:44:09.15 ]
WebBrowserコントロールにNewWindow2イベントを実装する
main.tinyjoker.net/Tech/CSharp/WebBrowser%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%CBNewWindow2%A5%A4%A5%D9%A5%F3%A5%C8%A4%F2%BC%C2%C1%F5%A4%B9%A4%EB.html

これをVC2008でやりたいんですけどどう書けばいいか分かる人いますか・・・

385 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 23:51:00.77 ]
C++/CLIならほとんど何も違わないが
C++/CLIはC++じゃないけどそれはわかってる?
そんな質問するような人がなんでC++/CLIなんか使うのか正直意味がわからない
素直にC#使うか、C++やりたいんだったらネイティブでATLやMFC使ったほうが

386 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 13:53:12.58 ]
初心者用といっても、.NETとC++はマスターしてないと。

387 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 14:51:10.32 ]
>>384>>385の意味がわかるまで精進しましょう

388 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 15:51:31.18 ]
むしろ初心者はC++/CLI使うな

389 名前:デフォルトの名無しさん [2011/10/29(土) 09:05:13.17 ]
今までFormで自動で作る機能でストリップメニューを作ってたのですがそうすると一個づつthis->A = gcnew... this->B = gcnew...
みたいな感じで作られてしまって、ABCのときもあればABCDEの時もあるようにしたいので
ループみたいな感じでまとめたいのですが
array<System::Windows::Forms::ToolStripMenuItem>^ strips = gcnew array<System::Windows::Forms::ToolStripMenuItem>(5); というやり方だとは教わったのですがこれをメニューアイテムに登録するときに
this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・}
と書いてたのですがここはどうすれば良いでしょうか?

390 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:24:47.38 ]
その前にusing namespace System::Windows::Forms;を入れることを激しくおすすめするw

391 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:30:46.12 ]
どういうことですか?わかりやすく説明してください

392 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:50:02.99 ]
array<System::Windows::Forms::ToolStripMenuItem^>^ じゃないの
っていうかC++/CLIなんかやめてC#やれ

393 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 09:53:37.07 ]
>>392
ありがとうございます
そこは直しました
this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・}
ここに何を入れていいのかわかりません
C#もやってますがどちらにしろ初心者でわかりませんし・・・



394 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 10:15:21.39 ]
配列を作ったら次は各要素にToolStripItemのインスタンスを代入する
C#の入門書買って出直してきたら

395 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 16:39:02.97 ]
for i=0 < .. <i++
IntPtr ptr(hoge[i]);
strips[i] = (gcnew System::Windows::Forms::ToolStripMenuItem());
strips[i]->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(ptr);}

hoge[i]はhoge[5][20]のWCHARです
先頭の一文字しかTextに入っていません。どうすれば良いでしょうか?

396 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 16:58:16.15 ]
> Marshal.PtrToStringAnsi メソッド
> アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、
> 各 ANSI 文字を Unicode に拡張します。
何故、WCHAR*を入れられると思ったのだろうか

msdn.microsoft.com/ja-jp/library/bb384865.aspx

397 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 17:13:28.22 ]
>>396
>アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、
> 各 ANSI 文字を Unicode に拡張します。
どの部分がcharって意味なんですか?
ちなみにsize_t wLen = 0;errno_t err = 0;/*ロケール指定*/setlocale(LC_ALL,"japanese");/*変換*/err = wcstombs_s(&wLen, wStrC, 20, charmoji, _TRUNCATE);で直したらできました


398 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 18:45:00.94 ]
array<System::Windows::Forms::ToolStripMenuItem^>^ strips = gcnew array<System::Windows::Forms::StripMenuItem^>(5);
のstripsをフォームいじっても消えないところでグローバル宣言したいのですがどうすれば良いでしょうか?

399 名前:デフォルトの名無しさん mailto:sage [2011/10/29(土) 19:27:05.70 ]
>>397
ANSI 文字列って書いてるんだから違うものを入れるなよ

しかも、文字列のマーシャリングとか>>397のリンク先を見れば一発で解決するような超FAQだから、
そんな無駄なコードなんか貼らなくていいよ

400 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:13:45.13 ]
>>398
クラス直下に書いとけば

そんなレベルで試行錯誤してても時間の無駄だよ
悪いことは言わないからちゃんと1から言語を勉強してきたほうがいい(C#かCLIじゃない方のC++を)

401 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:22:47.79 ]
arrayの内1つを消して間を詰めるにはどうしたら良いですか?

402 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:25:17.38 ]
無理。新しい配列を作ってコピーする。

403 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:32:43.14 ]
arrayって使わない方が良いんですか?
vectorとかの方が良いんですか?



404 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:35:25.75 ]
.NETが絡むところでvectorは使うな
動的に要素数を変えたいならSystem::Collection::Generic::List<T>を使う
もういいからC#やれ

405 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:36:42.68 ]
じゃあ最後にC++/CLIのメリットを教えてください

406 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:38:40.01 ]
マゾ御用達

407 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 00:53:12.14 ]
キモかわいい
array<Hoge^>^%はC#だとref Hoge[]で味気ない

408 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 21:28:13.45 ]
for(int i=1;i<5;i++){this->textBox1->Text += (i + ". \n");}
改行しません。どうしてでしょうか?


409 名前:デフォルトの名無しさん mailto:sage [2011/10/30(日) 21:39:23.47 ]
\r\nと書かないといけないのですね
ありがとうございました

410 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 01:30:07.13 ]
WCHAR *g; *g= this->textBox1->Text->ToCharArray()[0] ;
コンパイルは通るし画面のテキストボックスにも文字はちゃんと表示されてるのに
オブジェクト参照がオブジェクト インスタンスに設定されていません とエラーが出て止まります。どうすれば良いですか?

411 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 02:45:15.47 ]
ぬるぽ

412 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 02:53:26.62 ]
ちょwwぬるぽじゃなくて教えれwww

413 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 06:25:43.59 ]
ここまであからさまなぬるぽはないわ



414 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 06:27:02.15 ]
逝ってよし

415 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 08:46:35.87 ]
まぁ、pin_ptr が何のためにあるのか、という話だな

416 名前:デフォルトの名無しさん mailto:sage [2011/10/31(月) 23:46:48.11 ]
C++/CLIのプロジェクトに
C#のソースも追加出来ますが(Prof以上のみ?)、
C++/CLIからそのC#のクラスを使えますか?
C#からC++/CLIのクラスは使えるようですが・・・

417 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:03:00.11 ]
C#のソースは知らんが、C++/CLIから.netのクラスやら機能を使うのは.netの機能使うのと同じ

418 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:03:25.92 ]
プロジェクトに追加するだけなら自由だが。
混ぜてコンパイルは無理。
dllを参照して使用するのは相互に可能。

419 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:35:20.55 ]
やっぱ使えませんか
大人しくプロジェクト分けるしかないのですね・・・

420 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 15:39:11.10 ]
アプリ起動中にpictureBox内に矩形を表示させておきたいのですが
どこにコードを書けばいいですか?
pictureBox_Paint内だと起動直後の一瞬しか表示されません

421 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 15:50:26.29 ]
大方CreateGraphicsとか使ってるんじゃね

422 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 16:39:49.74 ]
その通りでした。ご指摘ありがとうございました

423 名前:デフォルトの名無しさん mailto:sage [2011/11/09(水) 16:12:12.50 ]
インテリセンスマダー?



424 名前:デフォルトの名無しさん [2011/11/10(木) 07:34:24.84 ]
質問です。
ネイティブ(アンマネージド)なC++の静的ライブラリを
C++/CLIでリンクして使うと変な所で死んだりするんだけど、
こういう事しちゃだめなのでしょうか?
一旦ネイティブなDLLを作って、そこを介して呼べば死なないのですが・・・。

そのライブラリは実装を隠蔽するため
クラスのインタフェース部分のみ公開して、
インスタンスの生成と開放を関数化してあるのですが、
つまりはnew/deleteがライブラリ内で実行され、
ライブラリ内でnewした結果を返し、マネージドコード内で保持し、
そのポインタをライブラリに渡してdeleteしてもらう形になっています。

よく分からないのは、わざとnewをせずポインタをNULLで初期化したままにしておき、
「NULLでなければ開放関数を呼ぶ」というコードを書いただけでも、
そこで死んでしまうのです。(NULLなので開放関数は呼ばれない!)
vectorヘッダをインクルードするかしないかで、死んだり死ななかったりと、
挙動がおかしすぎて正直よく分からない状況です。

425 名前:デフォルトの名無しさん mailto:sage [2011/11/10(木) 16:05:38.55 ]
ファイナライザが別スレッドから呼ばれるからとかじゃない

426 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 18:54:13.34 ]
using使ってるのでそこは大丈夫だと思います

427 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 23:05:46.09 ]
(gcnew Form1)->Show();
で作成されたフォームに
元のフォームにある文字列変数を渡す方法があったら教えてください

428 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 23:10:34.52 ]
コンストラクタの引数で渡すかプロパティ定義して渡す
つかそれだとC#もC++もさっぱりだよね? ならまだ遅くないから今すぐC#に乗り換えること。

429 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 20:42:15.74 ]
FindWindow で探すとか、EnumWindow でタイトルを調べるとか?

430 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:12:34.82 ]
Showする前に渡せば良い

431 名前:デフォルトの名無しさん mailto:sage [2011/11/13(日) 21:53:59.80 ]
同じアプリ内でしかも.NETのフォームでFindWindow/EnumWindowとかアホか

432 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 00:53:02.53 ]
オブジェクトとメンバ関数名を与えられたときに、その関数を呼び出すことはリフレクションを介して簡単にできますが、
指定された名前のグローバル関数を呼び出すことは可能ですか?

433 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 01:19:51.91 ]
.NETでグローバル関数なんて使うもんじゃない
クラスの静的メンバにする



434 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 01:37:36.37 ]
ですよねー。

435 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 14:05:35.23 ]
グローバル関数なんて無かったんや!

436 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 22:13:47.85 ]
自作したグローバル関数を書くのはどこが一番よろしいですか?
プロジェクト全体でつかうような関数です。
stdafx.hに書いたら

error LNK2005: "int __clrcall testfunc(void)" (?testfunc@@$$FYMHXZ) は既に stdafx.obj で定義されています。

ってエラーが出るのですが( ;∀;)

437 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 23:10:37.60 ]
そらそうだろ
C++/CLIというか、C++の基本から勉強し直してこい

438 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 06:58:01.68 ]
インクルードガード

439 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 07:29:07.57 ]
関数にstaticかinlineつけて内部結合にするがよろし

440 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 15:36:45.42 ]
ガードしても意味無いだろ。
別々のソースでインクルードされてコンパイルして、
それらをリンクしたら同じ名前の関数が複数出来上がってるわけだし。

と、ついでに質問者に説明してみる

441 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 18:59:29.54 ]
>>440
スマヌ

442 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 18:04:16.59 ]
あるサイトを参考にUnicodeからshift_jisに代えようとしてるんですが以下のコードで
cli::array<unsigned char^>^ ToShiftJis(System::String ^ unicodeStrings)
{
System::Text::Encoding^ unicode = System::Text::Encoding::GetEncoding(1200);
cli::array<unsigned char>^ unicodeByte = unicode->GetBytes(unicodeStrings);
System::Text::Encoding^ s_jis = System::Text::Encoding::GetEncoding(0);
cli::array<unsigned char>^ s_jisByte = System::Text::Encoding::Convert(unicode,s_jis,unicodeByte);
cli::array<unsigned char^>^ s_jisChars = gcnew cli::array<unsigned char^>(s_jis->GetCharCount(s_jisByte,0,s_jisByte->Length));
s_jis->GetChars(s_jisByte,0,s_jisByte->Length,s_jisChars,0);
return s_jisChars;

}
をビルドすると
error C2664: 'int System::Text::Encoding::GetChars(cli::array<Type> ^,int,int,cli::array<wchar_t,dimension> ^,int)' : 4 番目の引数を 'cli::array<Type> ^' から 'cli::array<Type,dimension> ^' に変換できません。
とエラーが出るのですが、どうすればよいのでしょう
どなたかご教示ください。


443 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:18:25.11 ]
MFC の CString 使ったら?



444 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 04:07:52.11 ]
Encoding.GetChars()ってChar[]とるんじゃないのか?
関係ない型をボックス化して何がしたいの?
というか、Encoding.Convert()の時点で既にSJISになっているし

445 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 13:58:16.46 ]
Hoge hoge[x];
の要素数はsizeof(hoge)/sizeof(hoge[0])で取得できますが
Hoge *hoge=new Hoge[x];
の要素数はどうやって取得すればいいですか?

446 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:05:42.47 ]
>>442
unsigned charに ^ は要らないと思うが

447 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 20:58:34.89 ]
>>445
ネイティブ配列のサイズは自分で変数や定数で覚えとくのが基本
というかC++/CLI関係ないだろ

448 名前:デフォルトの名無しさん [2012/01/13(金) 18:39:32.59 ]
System::Stringからchar*に変換する関数を書きました。
半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。
下記をどのように修正すればいいでしょうか?

#include <msclr/marshal.h>
inline char* toPtChar(const String^ Text)
{
String^ temp = (String^)Text;
msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context();
return (char*)(context->marshal_as<const char*>(temp));
}


449 名前:448 mailto:sage [2012/01/13(金) 18:45:03.89 ]
>半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。

半角256文字以上の文字列を投げると、255文字+\0で丸められてしまいます。
2000文字程度変換できれば良いのですが、

の間違いです。すみません。

450 名前:448 mailto:sage [2012/01/13(金) 19:43:34.29 ]
関数を以下のように書き換えてSystem::String→char*しても、
やはり256文字以上は消えてしまいます。
関数ではなく、何か他に原因があるんでしょうか?

#include <msclr/marshal.h>
using namespace msclr::interop;
using namespace System::Runtime::InteropServices;
char* toPtChar(const String^ Text)
{
String^ foo = (String^)Text;
IntPtr ptr = Marshal::StringToHGlobalAnsi(foo);
return (char*)ptr.ToPointer();
}
is.gd/BgDTis


451 名前:デフォルトの名無しさん mailto:sage [2012/01/16(月) 10:35:10.44 ]
ttp://www.cetix.de/DotNetNews/Thread61630-String_to_string_-_truncates_at_255.aspx
これか?
試してないけど。

452 名前:デフォルトの名無しさん [2012/01/18(水) 17:31:31.29 ]
   ◢▀▅     ▃
     ▋    ▋  ◢▀ ▀◣
    ▌     ▌ ▌     ▌
     ▌    ▌ ▌    ▌
    ▐      ▌ ▌     ▌
     ▐     ▀■     ▌
   ◢◤         ▀▃
  ◢◤             ◥◣
  ▌              ▌
 ▐   ●       ●    ▌      馬鹿にはコピペできないの。
  ▌              ▌
  ◥◣      ╳       ◢◤
   ◢▀▅▃▂   ▂▂▃▅▀▅
 ◢◤    ▀▀▀▀▀     ◥◣
▐◣▃▌           ▐▃◢▌
◥◣▃▌            ▐▃◢◤
  ▀▅▃          ▂▅▀
     ▀■▆▅▅▅▆■█▀
     ▐▃▃▃▲▃▃▃◢▍

453 名前:デフォルトの名無しさん [2012/01/18(水) 17:32:09.47 ]
   ◢▀▅     ▃
     ▋    ▋  ◢▀ ▀◣
    ▌     ▌ ▌     ▌
     ▌    ▌ ▌    ▌
    ▐      ▌ ▌     ▌
     ▐     ▀■     ▌
   ◢◤         ▀▃
  ◢◤             ◥◣
  ▌              ▌
 ▐   ●       ●    ▌      馬鹿にはコピペできないの。
  ▌              ▌
  ◥◣      ╳       ◢◤
   ◢▀▅▃▂   ▂▂▃▅▀▅
 ◢◤    ▀▀▀▀▀     ◥◣
▐◣▃▌           ▐▃◢▌
◥◣▃▌            ▐▃◢◤
  ▀▅▃          ▂▅▀
     ▀■▆▅▅▅▆■█▀
     ▐▃▃▃▲▃▃▃◢▍



454 名前:デフォルトの名無しさん mailto:sage [2012/01/18(水) 18:05:42.86 ]
日本の国民の中には、外国の事情がある程度分かっている人を除けば、
放送内容を信頼している人がまだいることは確かだ。一方で、ネット
住民たちのほぼ全員が、放送番組には政府の意図が色濃く反映されて
いることを知っている。自分の国がどういう国かということが、よく
分かるようになってきているのだ。

455 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 23:34:30.86 ]
失礼します。色々まわっていたのですが此方を勧められたので此方でも質問させて頂きます。

VC++でWindowsフォームのプログラムを組んでいるのですが、
別ファイルでextern宣言したクラス(の配列)をform1.h等で参照したいのですがコンストラクタが上手く働いてくれないのか、宣言の場所が悪いのか
ゴミ値ばかりで上手く動作してくれません。
何かヒントもらえませんか?

456 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 02:53:36.13 ]
ソース貼るか
エラー貼るか
何かヒントもらえませんか?

457 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 23:51:21.19 ]
いきなりcharではなくwchar_tに変換
でWinAPI使ってcharに

458 名前:デフォルトの名無しさん mailto:sage [2012/01/22(日) 11:17:33.74 ]
>>455
コードも何も書かれてないから憶測でしかないが、newとgc_newを使い分けてないとか、*と^を使い分けてないとか、その辺じゃない?
後は配列が.netのクラスをちゃんと継承してないとか
生のC++とC++/CLIは全くと言って良いほど別言語で、でも生のC++も使えちゃうからC#とC++の合わせ技より罠が多く、バグが多くなり易いよ



459 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 11:32:22.34 ]
publicにしてないとか

460 名前:デフォルトの名無しさん mailto:sage [2012/01/23(月) 12:35:15.69 ]
dll が違うとか

461 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:29:28.14 ]
VC++のプロジェクトのwindowsフォームアプリでOpenMPって使えないんですかね?
'/clr:pure' と '/openmp' は同時に指定できません
ってエラーが出てるんで、CLIでは使えないのかな?とか思ったりしたんですがどうでしょう

462 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 23:38:46.12 ]
/clr:pureで使えるわけがないだろネイティブコード入れられないんだから
/clrならどう?
っていうかWindowsフォーム使いたいだけだったら終わってるC++/CLIなんてやめて
C#でGUI作って重い計算だけC++(/CLIでない)で書いてC#から呼んだほうがいいよ

463 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:06:17.85 ]
>>461 です
/clrならできました。ありがとうございます。
よくわかっていないのですが、/clr:pureにしていたのはネイティブとごっちゃになって
変なことになるのを防ぐためなんですかね?だから/clrとしてもそこらへんを気をつければ
問題ない、ということでいいんでしょうか?
C++/CLIは初めてなんで、どう”終わってる”のかわかりませんが、C#はやったことが無いので、
できればこっちでやりたいところなんです。



464 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:20:54.26 ]
大丈夫だ、C++経験者からしてもC++/CLIの習得よりC#の習得の方が楽だから

465 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:21:49.18 ]
/clr:pureだとアセンブリにネイティブコードが混ざらない。
ネイティブコードを混ぜないC++/CLIなんて存在価値ゼロだから、C++/CLI使うんなら常に/clrでおk。
C#をやれ。いくらC++の経験があろうが関係ない。間違いなくC#の方が早く使えるようになるし
開発効率に天と地ほどの差がある。C++/CLIはMSに完全に見捨てられている技術。

466 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 20:25:20.13 ]
VS2010ではもうインテリセンスすら付けてくれてないもんね

467 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 21:09:13.08 ]
C#やってみます。
過去のレス見てきたんですけど、ひどい言われようですね
あと、あんま書き込み無いのにレスは早くて面白かったです。

468 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:13:52.05 ]
いろいろと屈折した愛があるからなw

469 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 02:03:40.75 ]
俺はこのスレに張り付いてるけど一応ちょっと待ってからレスしてるわ

470 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 07:33:50.86 ]
呼び出し規約がよくわからないのですが、関数を宣言した場所で明示しない場合
・引数・返り値の型にマネージ型が含まれる→__clrcall になる
・含まれない→__stdcall になる。実装がマネージドコードにコンパイルされると、double-thunkingになる
という理解であっているでしょうか。

また、非マネージ型のメンバ関数においては、
managed-code -> __thiscall stub -> __clrcall のような double-thunking が発生するのでしょうか?

471 名前:デフォルトの名無しさん mailto:sage [2012/03/07(水) 16:17:15.87 ]
VS11βでもインテリセンス無いかな?

472 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 00:59:01.93 ]
今ちょっと打ってみたが効くみたいだよ。

473 名前:デフォルトの名無しさん mailto:sage [2012/03/13(火) 21:11:04.75 ]
C1001 が出た。
みんな報告してる?



474 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 04:07:10.11 ]
可能な限りする

475 名前:デフォルトの名無しさん mailto:sage [2012/03/14(水) 11:15:03.77 ]
やっぱそうだよな。VS11Betaで試してconnect行くわ。

476 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 09:53:47.89 ]
VS11betaでもやっぱりIntellisSense効かなくて
"No additional information available"って言われるんだけど
何が悪いんだろう

ButtonとTextBox置いてButtonのイベントハンドラの中で
textBox1->とかやってるだけなんだけど
最初のt打っただけで上のエラーが出て
->まで打ってもエラー出たままでメンバも表示されない

477 名前:デフォルトの名無しさん mailto:sage [2012/03/15(木) 20:40:01.46 ]
homepage3.nifty.com/ishidate/vcpp10_20/vcpp10_20.htm
ここの一番下の図5は図6用の計算式はどの様に記入すれば良いのですか。

478 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 10:49:25.88 ]
function1のとこだろ
どう考えてもC++/CLIでやるべきことじゃないよなこれ
内容は凄いのに…C#にすれば…

479 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 11:04:51.87 ]
おお、派手だなw
.net framework 使いたいだけならC#でいいなーほんとに

480 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 12:14:54.13 ]
eのこと聞いてんのかな?
Math::Exp() にすりゃいいと思うが、、、、

481 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 20:55:02.08 ]
こういう変に優秀な勘違いがいるからC++/CLIに手を出す奴がいなくならないんだよな
C++/CLIの記事や書籍ってC#やVBに比べて妙に良質だったりするし

482 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 00:15:02.30 ]
C/C++では配列の終端の一つ次を指すポインタは有効なポインタだったのですけど、
マネージ配列の終端の一つ次を指す interior_ptr は配列がGCで移動したときに正常に更新されますか?

483 名前:482 mailto:sage [2012/03/25(日) 13:00:47.00 ]
いまさらですが、試してみたところ正常に移動するようでした。



484 名前:482 mailto:sage [2012/03/26(月) 18:19:27.80 ]
(勝手な推測ですが) interior_ptr はハンドルとオフセットのペアで実装されているのではないかと思います。

array<int> ^a;
auto pa = &a[3]; // { a, 12 }

int *p;
interior_ptr<int> ip (p); // { nullptr, p }

ところで、長さ 0 の配列 (b) に対して &b[0] は IndexOutOfRangeException なんですね…。困った困った。

485 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 21:59:14.05 ]
配列でinterior_ptrなんて必要?
君が言ってるように常に配列のハンドルとオフセットをペアにしとけばよくね
interior_ptrってクラスのインスタンスフィールド指すのに使うやつでしょ

486 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 07:37:57.33 ]
既存コードの一部だけマネージに持っていく実験なので。
*& はできても interior_ptr<T>% はできないので、配列 + オフセットの方が便利なのはその通りです。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<122KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef