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


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

おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!

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

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

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

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

ここまで見た
  • 733
  •  
  • 2013/10/12(土) 16:53:11.84
フォームアプリケーションでの質問だけど、
テキストボックス(名前:textBox1とする)を配置すると、
textBox1->Text
でString型の文字列がとれるんだけど、これをatoiしたいがためにchar型に変換しようとして、
atoi(textBox1->Text->c_str());
って書くと、「c_strはSystem::Stringのメンバではありません」って表示される。
c_strってメンバじゃないの?

ここまで見た
  • 734
  •  
  • 2013/10/12(土) 17:06:19.97
じゃないよ
System::Stringとstd::stringは別物

ここまで見た
  • 735
  •  
  • 2013/10/12(土) 17:12:51.52
VBじゃねえんだから大文字小文字の区別はつけよう

ここまで見た
  • 736
  •  
  • 2013/10/12(土) 17:26:01.80
うおおまじか
紛らわしいな…ありがとう

ここまで見た
  • 737
  •  
  • 2013/10/12(土) 23:00:26.48
C++/CLIでWPFをやろうとしていますが、XamlReader::Load()で自作クラスのインスタンス化に失敗します。
フレームワークに含まれるSystem.Windows.Applicationなら<Application>でのインスタンス化に成功するが、
その派生クラスMyApp.Appをインスタンス化しようとして<Application x:Class="MyApp.App" >としても、
クラス名を間違えたときと同じように下のような例外が出てしまいます。。

指定されたクラス名 'MyApp.App' は、実際のルート インスタンス型 'System.Windows.Application' と一致しません。

クラスを見つけられていないんだと思いますが、これはどこかで設定する必要があるんでしょうか?
プロジェクトの設定は「空のCLRプロジェクト」のサブシステムをWINDOWSにして、WPFに必要な
PresentationCore.dllなどの参照を追加した程度です。

ここまで見た
  • 738
  •  
  • 2013/10/12(土) 23:10:16.98
Applicationを継承しろ
っていうか素直にC#を併用しろ時間の無駄だ

ここまで見た
  • 739
  •  
  • 2013/10/12(土) 23:18:26.35
C#でデザイナ使ったときはXamlってコンパイル時に処理されるからなあ
clr-namespaceとか指定してみたら

ここまで見た
  • 740
  •  
  • 2013/10/13(日) 00:20:33.93
<my:App x:Class="MyApp.App" xmlns:my="clr-namespace:MyApp">としてみると

不明な型 '{clr-namespace:MyApp}App' を作成できません。

というエラーになりますね。やっぱり何か認識できていないのかな。

ここまで見た
  • 741
  •  
  • 2013/10/13(日) 00:25:09.93
ApplicationのXAMLいらなくね?
普通にコードからgcnew AppしてRunしてMainWIndowすればいいじゃん
アプリケーションリソース使うならリソースディクショナリをLoadXamlすればいいし
デザイナがないのにわざわざデザイナ向けの面倒な方法をとる意味がわからん

ここまで見た
  • 742
  •  
  • 2013/10/13(日) 00:51:09.66
App.xamlに限れば省略する手もあるでしょうが、現象としてはMainWindow.xamlも同じなので。
クラスをインスタンス化するという意味においてはApp.xamlもMainWindow.xamlも違いは
ありませんので、例としてApp.xamlを挙げたに過ぎません。

ここまで見た
  • 743
  •  
  • 2013/10/13(日) 08:31:38.34
>>733
やりたいなら、Convert::ToInt32(textBo1x->Text)
だな

ここまで見た
  • 744
  •  
  • 2013/10/13(日) 08:32:40.33
ちとタイプミスったが許せ

ここまで見た
  • 745
  •  
  • 2013/11/10(日) 04:03:56.73
C#のfixedとC++/CLIのpin_ptrって同じものですか?

C#で配列をfixedして処理するより,C++/CLIにマネージ配列で渡した後,C++/CLI内でpin_ptrして処理する方が速いのでしょうか?

初歩的な質問で申し訳ないです.

ここまで見た
  • 746
  •  
  • 2013/11/10(日) 07:13:51.28
ネイティブコードに渡さないときはinterior_ptrで書くんじゃない。
パフォーマンスは大差ないかと…。

ここまで見た
  • 747
  •  
  • 2013/11/10(日) 07:53:22.46
そもそも普通にマネージコードで処理するんならC#で普通にインデックス使って回せば最適化されるから十分速い
ヘタにポインタ使った方が遅くなることもある

ここまで見た
  • 748
  •  
  • 2013/11/10(日) 12:45:13.44
パフォーマンス的には対して変わらない,下手な書き方をすればかえって遅くなるということでしょうか?

やりたかったのは,C#からBitmapとint配列を渡して,C++/CLI内でヒストグラムを作るとかそんなところです.
C#側からは,
MakeBrightnessHistogram(Bitmap^ bmp, array<int>^ histogram)
を呼び出して,この関数の内部でFormat32bppRgbのBitmapDataを取得し,histogramをpin_ptrで固定した後,
MakeBrightnessHistogram_Unmanaged(int* data, int size, int* p_histogram)
を呼び出すというような形になっています.(dataはBitmapData->Scan0をint*にキャストしたもの,sizeはbmpの画素数)
ちなみに,MakeBrightnessHistogram_Unmanaged内で,RGBの値をBrightnessに変換する変換テーブル(ネイティブ配列)にアクセスしています.

画像データやヒストグラム,変換テーブルといった配列にアクセスする命令が多いので,C++/CLIを使えば速くなるのかと思ってプログラムしてみたのですが,
こういった処理は,わざわざC++/CLIを使わなくても,C#で高速にできるものなのでしょうか?
最初から素直にこれを質問すれば良かったですね...

ここまで見た
  • 749
  •  
  • 2013/11/10(日) 13:40:47.67
そういうコード書くならCかC++でDLL作って
それを呼び出すようにした方が手っ取り早い気がするのよ

ここまで見た
  • 750
  •  
  • 2013/11/10(日) 13:53:11.58
C#で書いて問題になるほど遅かったら移植すればいいでしょ
実際そんなに変わらないけどな
パフォーマンスの心配は9割無駄だからくだらないこと気にしてないでまずは動かせ
先入観でパフォーマンスを考えるほど無意味なことはない

ここまで見た
  • 751
  •  
  • 2013/11/10(日) 14:12:32.92
とりあえずC#で書いてみて,処理速度がDLLを呼び出す方法と対して変わらないようであれば,
DLL使わずにC#だけで書くようにしたいと思います.

ありがとうございました.

ここまで見た
  • 752
  •  
  • 2013/11/10(日) 19:45:52.63
>>748
lockbits()を使うだけでも相当速くなるぞ
BitMapキャンバスへの描画メソッドは物凄く遅い

http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleBitmapPlus.html
http://tinqwill.blog59.fc2.com/blog-entry-46.html

ここら辺とか

ここまで見た
  • 753
  •  
  • 2013/11/10(日) 23:31:16.11
BitmapDataと言ってるからLockBitsは使ってるんでしょ

ここまで見た
  • 754
  •  
  • 2013/11/11(月) 09:48:07.24
>748
アルゴリズムをunmanagedで書くなら、たしかにSSE2 intrinsicとか使えば圧倒的なスピードが出る。
でも、それならP/Invokeでいいのでは感がある。

ここまで見た
  • 755
  •  
  • 2013/11/11(月) 22:42:22.66
環境に合わせて最適なコード吐くんだろ?違うのか?

ここまで見た
  • 756
  •  
  • 2013/11/18(月) 13:42:22.83
byte[,] bmp = new byte[640,480];

とかやってたりしてw

ここまで見た
  • 757
  •  
  • 2013/11/19(火) 13:06:00.35
>>756
それ自体別に何もおかしくないぞ
必要ならポインタでアクセスすることもできる

ここまで見た
  • 758
  •  
  • 2013/11/21(木) 11:24:38.95
>>757
C#が遅いとか言ってる奴いるけど、C#で多次元配列をこう書くと遅くなるんよ
ジャグ配列を使うか一次元配列で処理すれば、C++とほぼ同じ速度で処理出来るが

ここまで見た
  • 759
  •  
  • 2013/11/21(木) 22:16:01.02
だからポインタでアクセスできると言ってるでしょ
ポインタ使えば多次元配列でも1次元配列をforループで回して最適化が効いた時と同程度には速くなるよ

ここまで見た
  • 760
  •  
  • 2013/11/21(木) 23:39:11.69
あれ?遅いのはジャグ配列じゃなかったか?
最近別言語の案件やってるんで忘れてしまったわ

ここまで見た
  • 761
  •  
  • 2013/11/21(木) 23:47:38.45
bmp[y][x]をx方向に処理する場合は1次元配列の連続アクセスと同じなので速い
y方向だと無茶苦茶効率悪いから多次元配列のほうが有利

ここまで見た
  • 762
  •  
  • 2013/11/22(金) 09:39:48.63
bmp[x + y * bmp.width]
で、ええやん

ここまで見た
  • 763
  •  
  • 2013/12/03(火) 03:37:15.12
スマホで眺めるのによいライブラリリファレンスサイト教えてください

ここまで見た
  • 764
  •  
  • 2013/12/14(土) 00:11:16.35
速度が問題になるとこをCLIで書くなよ。

ここまで見た
  • 765
  •  
  • 2013/12/16(月) 23:15:56.37
ある外部staticライブラリをつかうプロジェクトをVS2008で作ったんですが
それをデバッグリンクすると実行時にランタイムでヒープが壊れてるとか
アサートだします。
出すところは外部ライブラリで
static std::map<>;
してグローバルにmapを作ってるところです。

clrなしのプロジェクトを作ってやってみると問題ないんですがなにが悪いんでしょう?
ランタイムライブラリはどちらも/MDdで外部ライブラリと同じです。

ここまで見た
  • 766
  •  
  • 2013/12/16(月) 23:55:38.87
STLCLIを使えというヘジたんの思し召し

ここまで見た
  • 767
  • 765
  • 2013/12/17(火) 01:47:56.48
http://stackoverflow.com/questions/4928763/mixed-mode-c-cli-crashing-heap-corruption-in-atexit-static-destructor-regist
/ENTRY:mainが悪いみたいだよ
消してWinMainからmainよんだら直った

ここまで見た
  • 768
  •  
  • 2013/12/17(火) 17:35:03.34
OnPaintBackgroundさせないようにするため
Panel継承したMyPanelを作り、
今までgcnew Panelされてた部分をMyPanelに置き換えたら、
デザイン編集する画面がエラーになりました。

継承したコントロールをデザインで使う方法か
Panelコントロールの再描画を継承しないですむ方法ありますか?

ここまで見た
  • 769
  •  
  • 2014/01/29(水) 15:03:47.19
C++/CLIってUNICODE使うのがデフォ?

ここまで見た
  • 770
  •  
  • 2014/01/29(水) 15:11:01.76
System::String^はそうだな
ネイティブ側は好きなのにしる

ここまで見た
  • 771
  •  
  • 2014/02/16(日) 08:13:15.62
VC6以来のWinアプリの仕事何だけど
最近は.net使えばグラフ表示とか簡単にできるようになったの?
それともGDI使うやり方健在?

ここまで見た
  • 772
  •  
  • 2014/02/16(日) 09:39:35.75
市販のかexcel使ったほうが早いという状況は変わらん

ここまで見た
  • 773
  •  
  • 2014/02/16(日) 23:57:23.21
EXCELに描かせるのが一番金がかからない

ここまで見た
  • 774
  •  
  • 2014/02/17(月) 13:02:54.72
エクセル最強すぎる。
C++でエクセル出力したい。
CSV無しで

ここまで見た
  • 775
  •  
  • 2014/02/17(月) 13:47:00.62
POIかNPOIで

ここまで見た
  • 776
  • 771
  • 2014/02/17(月) 18:45:06.84
オシロの画面みたいなのを1秒あたり10フレームくらい表示させたいのですが,,,

ここまで見た
  • 777
  •  
  • 2014/02/18(火) 10:09:25.99
今どうやってんの?
DirectX使ってる?

ここまで見た
  • 778
  •  
  • 2014/02/18(火) 13:15:15.29
WPFなら秒間60フレーム余裕だよ

ここまで見た
  • 779
  •  
  • 2014/02/19(水) 15:44:04.10
C#でも余裕だな
3日もあればそれなりの物作れるし

ここまで見た
  • 780
  •  
  • 2014/02/20(木) 17:38:23.07
今のPCなら10fpsは全くもって問題無い
俺は初めて自力描画したが、25ms間隔でUSB送信+描画が全く問題無かった

ここまで見た
  • 781
  •  
  • 2014/02/22(土) 18:10:01.30
C++プロジェクトとC#プロジェクトからなるソリューションを
作る場合は、DllImport を使うのが正統的なやり方ですか?

ここまで見た
  • 782
  •  
  • 2014/02/22(土) 18:18:26.53
C++/CLIを使うのも別に不当ではないぞ
好きにしろ

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

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

フリックラーニング
フリックラーニング
ここまで見た

★お気に入り追加

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