- 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
- 34 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:46:40 ]
- C++/CLIに書き換えてる奇特なものです
char www[100]; char* ptr; ptr = www + i; array<char>^ www = gcnew array<char>(100); array<char>^ ptr; ptr = www + i; ← ? ?の部分をご教授くださいm(_ _)m
- 35 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 00:53:22 ]
- CLI配列はポインタじゃないから無理
- 36 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:21:40 ]
- pin_ptr してもいいけどさ、www[i] で駄目な理由は何なの?
- 37 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 08:14:59 ]
- C++の感覚なら毎回[i+a]としないで最初からオフセット付けときたいのは当然だろ
無理なので常にwwwとiをセットにして持ちまわるのが普通 メソッドの引数にもオフセットを指定できるようにする
- 38 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 22:43:16 ]
- perlのように return a, b できるようにしてくんないかな
- 39 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 12:07:55 ]
- .NET4ではTuple型自体は導入されたのでC#やVBでは将来的に
言語レベルでサポートされる可能性はある。 C++/CLIはほぼ見捨てられてるので期待するだけ無駄。
- 40 名前:デフォルトの名無しさん mailto:sage [2010/08/17(火) 21:49:08 ]
- >>34
array<char>^ www = gcnew array<char>(100); interior_ptr<char> ptr; ptr = &www[0] + i;
- 41 名前:デフォルトの名無しさん [2010/08/21(土) 06:53:22 ]
- VC2010 EEを使用しています。
RS-232Cで通信を行い、プログラムを終了させようとして this->Close(); を行うと、エラーメッセージも出ないままプログラムが固まってしまいます。 ポートを閉じてないことが原因かと思い、 serialPort1->Close(); を実行してみたところ、今度はここで同じように固まってしまいました。 vsug.jp/tabid/63/forumid/46/postid/9991/scope/posts/Default.aspx を、参考に、BeginInvokeを使用していますが、ダメでした。 この場合、どこを見れば良いのでしょうか? よろしくお願いします。
- 42 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:16:15 ]
- 画像処理を行いたいのですが、
Bitmap、Image、Graphic・・・どのコンポーネントを使うのがお得なのでしょうか
- 43 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:36:42 ]
- >>42
どんな画像処理をするかが分からないと、 えらべないと思われます
- 44 名前:42 mailto:sage [2010/09/18(土) 16:48:33 ]
- カラー画像をモノクロにしたり、コントラストかけたり、拡大縮小したりの初歩的なことがしたいです。
あと、今のところはCUIで行いたいです。
- 45 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 18:01:22 ]
- >>44
俺はあまり詳しくないが、 ぐぐると ttp://msdn.microsoft.com/ja-jp/academic/cc998604.aspx ここで Bitmap クラスを利用することにより、画像に対してピクセル単位で様々な処理を行うことができます と書いてある .netのクラスを使うなら、おそらくやりたいことはこういうことだろう
- 46 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:40:29 ]
- Bitmap使ってみたけれど、画像の保存の仕方がわからない・・・
WriteBitmap("C:\\・・・",data)とかdata.Save(・・・)ってな感じでできないのかな
- 47 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:43:33 ]
- 普通にSaveメソッドあるだろ
- 48 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 05:14:50 ]
- ホントだ。ごめん、見逃してたわ。
- 49 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 03:53:30 ]
- なぜ下記のようなプログラムでエラーが発生するのかわかりますか??
--- プログラム --- #include "stdafx.h" using namespace System; using namespace System::Drawing; int main(array<System::String ^> ^args){ Bitmap^ image = gcnew Bitmap("test.jpeg"); image->SetPixel(0,0,Color::Black); ←ここでなぜかエラー起きます image->Save("test2.bmp"); return 0; } --- エラー内容 --- ハンドルされていない例外: System.ArgumentException: 使用されたパラメータが有効ではありません。 場所 System.Drawing.Bitmap..ctor(String filename) 場所 main(String[] args) 場所 c:\documents and settings\***\デスクトップ\test\test.cpp:行 10 場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\dd\vctools\crt_bld\self_x86\crt\src\mcrtexe.cpp:行 309
- 50 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 07:25:44 ]
- >>49
test.jpegはちゃんとプロジェクトファイルと同じ階層にある? 余計なお世話かも知れないが、.netでやるなら C#で作ったほうが楽なんじゃないだろうか・・・ わざわざマイナーな環境で挑戦するよりもいいと思うんだが
- 51 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 08:08:59 ]
- >>49
落ちてる場所は、その上の行だぞ。
- 52 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 11:32:08 ]
- これだけ利用者に嫌われてる言語も珍しいな
初心者が質問するたびに使うなと勧められる
- 53 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:44:55 ]
- >>50-51
ありがとう。jpegじゃなくてjpgだったという凡ミスしていたことに気づけたわ ・・・一度C#に浮気してみる
- 54 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:53:46 ]
- >>52
嫌われているというか、言語自体が初心者お断りだからな 初心者が無謀なことしようとしていたら、そりゃ止めるだろう
- 55 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 14:01:21 ]
- C++も.NETも使いこなせる人が、止むを得ず使うための物。
使わなくていいなら使いたくない。
- 56 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 15:01:38 ]
- 始めようにも資料が無さ過ぎる
MDI作るときどうするかとか ちょっとしたことの逆引きがネット上で全く出てこない ようやくOpenGL表示できるようになって C++の頃の遺産をつかえると思ったのに
- 57 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 16:33:26 ]
- C#でできるから、それを参照にすればいい
なにもかもC++/CLIで済ませようとしないことをお勧めする
- 58 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 02:27:48 ]
- 嫌ってはいないんだ
ただ何故かこの言語とのファーストコンタクトというか接し方が 一言入れておかないと不幸にしかならなそうな人が多いのよね
- 59 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 09:55:56 ]
- WinFormsデザイナとかC++/CLIにそもそも要らないんだよな
こういうのがあるから「Visual C++ 2008 で簡単GUIプログラミング」みたいな勘違い本やサイトが出て初心者が道を間違える
- 60 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:18:00 ]
- 56ですが自分
C++の文法がある程度使えて フォームデザインが総合開発環境上で扱えて 至れり尽くせりじゃん、と思ってとっかかりました 現実は情報が全く無く よくわからないクラスとかいっぱいあって 解説も無くて どうしようと途方にくれていましたが、QTとかよりは 導入コストも再勉強のコストも無いだろうと信じて使ってます。 だって、CやC++だとGUI作るの辛いんだもん っていう理由だとダメですか
- 61 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:32:23 ]
- まあ正直C++の名前が付いてるだけで
マネージ部分はC++とは直接関係なくて学び直し必要だし それなら素直にC# C#2.0の範囲までなら多分C++/CLIより簡単だし サンプルも多いし将来WPF/Silverlightとかにも応用できるし C#やっとけば逆にC++/CLIを橋渡し用ぐらいなら書けるようになるし
- 62 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 13:44:31 ]
- けっきょくC++風に文法を汚したC#と普通のC++を無理矢理くっつけただけの代物だからな
- 63 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 14:03:20 ]
- >>62
それを一応形にできたところは評価できる。
- 64 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:28:25 ]
- #define健在なり
- 65 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:37:10 ]
- #define private public
- 66 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:31:06 ]
- LPVOIDからarray<String^>^に変換したいのですが、アドバイスください。
//////////Form1_Load////////// HANDLE hMap; LPVOID lpBuf; hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,L"View"); if(hMap==NULL){Form::Close();} lpBuf=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0); if(lpBuf==NULL){Form::Close();} if(GetLastError()==ERROR_ALREADY_EXISTS){//すでに同じ名前のオブジェクトが存在する lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー ///////////ここまで///////////// つまり二重起動時に共有メモリを使いたいのですが、どうしてもできません。 先人方どんなことでもいいので教えてくだせえ。
- 67 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:40:23 ]
- marshal_asとかじゃねえの
- 68 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:51:50 ]
- > LPVOIDからarray<String^>^に変換したい
> lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー コードの方はarray<String^>^からLPVOIDに変換したいように見える
- 69 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:19:27 ]
- >>67
2008 Express Editionを使っていまして・・・ヘッダーがないらしいです。 www.codeguru.com/forum/showthread.php?t=468408 >>68 コマンドライン引数を得た後、array<String^>^に変換しようと思ったのです。 宣言時からarray<String^>^だとMapViewOfFileでつまずいちゃうので・・・。 どちらにせよ、コマンドライン引数を得た後、 共有メモリarray<String^>^として反映できればいいのですが。
- 70 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:50:07 ]
- 全体にコードが滅茶苦茶に見えるし
そもそもLoadイベントなんかでやる処理には見えないけど(mainでやることだろ) 共有メモリにString^を書き込みたいのなら > ttp://www.codeguru.com/forum/showthread.php?t=468408 のリンク先にString^をポインタに変換する方法が載ってるからmemcpyなりなんなりすればいい 複数の文字列を書き込む必要があるなら\0なりなんなりで区切る
- 71 名前:デフォルトの名無しさん mailto:sage [2010/09/29(水) 06:10:09 ]
- 共有メモリをやめてSendMessageに妥協しました
とにかく二重起動時にコマンドライン引数を渡すことができました! 皆様、貴重なアドバイスをありがとねん
- 72 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 12:39:42 ]
- C++/CLIにおけるsafe_cast,static_cast,dynamic_castの違いについて教えてくださいよ
safe_cast :型が合わないと例外が発生、実行コスト中 dynamic_cast:型が合わないとNULLを返す、実行コスト大 static_cast :型が合わなくても何もしない、実行コスト小 この認識であってますか?
- 73 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 16:11:05 ]
- safe_castとdynamic_castのコストはほぼ同じ。
static_castが速くなるのはダウンキャストの場合だけ。静的に解決できる場合はsafe_castと同じ。
- 74 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:39:28 ]
- >>66
いまさらだけど、.NET Framework 4以降ならMemoryMappedFileクラスを使えばいいと思うよ。
- 75 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:52:42 ]
- .NETのハンドルのダウンキャストにstatic_cast使うのは激しく疑問
公式の説明でもパフォーマンスをえらく強調してるが、 そのためにわざわざ検証不能コードにしてまでやるほどのものなのかと
- 76 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:22:23 ]
- www.infoq.com/jp/news/2010/10/Co-Evolution-Doubts
>どうやらそれらは、レガシC++アプリケーションをWindows Phoneに移植したいと考えている多くの開発者にとって、C++/CLIは、ベストなルートに見えるのであろう。 地獄への道は善意で舗装されている
- 77 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:28:08 ]
- 筆者自身は否定的に見えるけど、まだそんなこと考えてる人もいるんだねぇ
- 78 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:52:06 ]
- 筆者ほんとにC++/CLI触ったことあるのかな
Silverlightで使える範囲のC++/CLIはC++とは全く互換性なくてただの汚いC#なんだけど
- 79 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 21:47:31 ]
- 絶対的処理性能が必要な場合か、過去資産使う時以外はメリットよな?
- 80 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 22:05:21 ]
- 検証可能なコードしか使えない場合は処理性能同じだし過去資産も使えないよ
- 81 名前:デフォルトの名無しさん mailto:sage [2010/10/09(土) 21:36:15 ]
- 音の再生ってC++/CLIでできるの?
画像の場合ピクチャボックスみたいな感じに楽に音楽再生させたいのだけど
- 82 名前:デフォルトの名無しさん mailto:sage [2010/10/10(日) 23:03:16 ]
- ネイティブのC++でできるなら同じ方法でできる
.NET使ってもできる どちらにしてもC++/CLIとは直接関係ない話
- 83 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:46:33 ]
- サンクス
これ絶対初心者向けじゃない気がする
- 84 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:49:57 ]
- 「気がする」ではない。
絶対初心者向けではない、その通りだ。
- 85 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 06:02:46 ]
- ですよね
俺みたいな勘違い君が集まるから スレタイ変えると平和になる気がする
- 86 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 11:40:19 ]
- 「C#でアプリを作っているが、C++のライブラリで音を鳴らしたい」もしくは
「C++(非CLI)でアプリを作っているが、.NETのライブラリを使って音を鳴らしたい」 →そこだけC++/CLIを部分的に使おう という風に特別な意図を持って言語であって、 >>81のような質問が出てくる時点でC++/CLIを使うのは間違っている
- 87 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 12:08:45 ]
- 前者はCLIでなくていいだろ
- 88 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 13:10:09 ]
- そんなに大きなライブラリでなければ>>19方式がベターだな
- 89 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 15:50:17 ]
- 初心者用のC++/CLIじゃなくて
C++/CLIの初心者向けのスレなんだよなw
- 90 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 16:27:40 ]
- C++/CLI初心者にクラスチェンジできる条件が、
1) C++習得レベル一定以上 2) .NET習得レベル一定以上 だからな
- 91 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 02:47:19 ]
- C++とC#があった上で補助的に使うもんだからねぇ
みんな言うように初心者が使う物じゃないね。
- 92 名前:デフォルトの名無しさん [2010/10/12(火) 15:18:47 ]
- こんなのに熟練したくないわ
どうしても必要なときにちょっと調べてその場が凌げれば充分
- 93 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 18:55:47 ]
- C++にGCを導入した言語。そう考えれば実用性は高いはず。
- 94 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 19:17:34 ]
- C++と、GCをサポートした別の言語を混ぜた言語。
アンマネージとマネージの境界は常に意識する必要がある。
- 95 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 20:52:46 ]
- 仕事では使いたくないが、趣味でいじるのなら楽しい。
Express Editionだと実行中のプロセスにアタッチできるのが C++しかないってのも使ってる理由のひとつ。
- 96 名前:デフォルトの名無しさん mailto:sage [2010/10/27(水) 21:11:21 ]
- 日経のムックでC++/CLIが宣伝されてるな。
簡単GUIプログラミング!みたいな見事な勘違い記事だった。騙されて道を誤る初心者が不憫でならない。
- 97 名前:デフォルトの名無しさん mailto:sage [2010/10/30(土) 18:38:53 ]
- 道を踏み外しそうになり、C++Builderにシフトできました
- 98 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 02:19:24 ]
- 初心者はC#いじっとけ
- 99 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:54:01 ]
- 増えた言語仕様って、ref, ^, gcnew だけでしょ?
- 100 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:59:30 ]
- ジェネリック,トラッキング参照,ファイナライザ,プロパティ,イベント,デリゲート, etc
CLI拡張の部分だけでも言語仕様書の量がC#並み
- 101 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 00:03:31 ]
- 2種類の言語が同居してる構造だな。
- 102 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 04:25:15 ]
- D言語よりマシ。
- 103 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:45:49 ]
- Z言語になるころには
なんとなくこんな感じ、って思い描いたものが 1行で組みあがるくらいに なるわけねぇ
- 104 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:28:32 ]
- ref classのメンバーに構造体がある場合、その構造体のポインターはどうやって取得すればいいの?
pin_ptr<SCRIPT_STRING_ANALYSIS*> pssa = &(this->構造体型の変数); こういう風にしてもうまくいかないんだが
- 105 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:41:24 ]
- >>104
自己解決した 単にpin_ptrの型を間違っていただけだった
- 106 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:14:40 ]
- これって変数名とかに全角文字がつかえるのだな。
int 数値 = 0; みたいに。 うっかり全角アルファベット混ぜたりしたら大変だな。
- 107 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:26:13 ]
- それCLIでない方のC++でもできるよ
コンパイラが共通なんだから
- 108 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:11:50 ]
- >>106
今のパソコンて、ゼロに斜線が入らないから、うっかり int 数値 = O; とかしてしまうとやばいぜw
- 109 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 04:36:06 ]
- どっかでOが定義済みでないと通らないだろ
- 110 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 13:04:12 ]
- Windows Mobile用のWM_GESTUREが入ったgesture.hは何を入れたら良いんですか?
Windows Mobile 6 Professional SDK Refresh.msiと 試しにVS2010EEを入れてみたけど ダメでした Windows Mobile 6 Professional SDK Refresh.msiは2環境でインストールして いるのでインストーラがコケたとかでは無さそうです 定義だけなのでGoogle Codeとかでも良いのですが、MS系は上手く手に入りません。 くだすれですがよろしくお願いします。
- 111 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 12:22:30 ]
- queue<array<String^>^ > queue_dwnload;
こう宣言すると System.ArgumentException' の初回例外が発生しました。 とイミディエイトウィンドウにメッセージが出るんだけど 宣言の仕方どこが間違ってますか?
- 112 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 17:42:15 ]
- つ STL/CLI
#include <cliext/queue> using namespace System; cliext::queue<array<String^>^ > queue_dwnload;
- 113 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 18:21:47 ]
- すまん書き足りなかった、インクルードはちゃんとしてて
プログラムも正常に動作してます それでもう少しシンプルなコードで試してみたんだけど VS2008で新規作成、プロジェクト、CLRのwindowsフォームアプリケーション のテンプレートでプロジェクトを作成して #include <cliext/queue>を追加 ~Form1(){}の下あたりに cliext::queue<array<String^>^ > queue_dwnload;を追加 デバッグ実行する これだけでメッセージが出ます、キューの宣言は間違ってないみたいだけど 何が原因なんだろう?
- 114 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 19:06:11 ]
- VS2010にしてしまっているので再現できないが、
~Form1()と同じprotectedには出来ないのかコンパイル時に警告がでる。 privateにしたらどう? private: cliext::queue<array<String^>^ > queue_dwnload;
- 115 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 22:52:09 ]
- private:付けてもだめでした
- 116 名前:デフォルトの名無しさん mailto:sage [2010/11/14(日) 14:34:28 ]
- とりあえず問題の切り分けだな。
まずコンパイルが警告なしで通るかどうか。 通るならデバッグ実行とデバッグなし実行で差があるかどうか。 別のPCでも再現するかどうか。
- 117 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 11:27:46 ]
- 使用環境:VS2008 Professional Edition
プロジェクト:CLR クラスライブラリ 目的:コピーコンストラクタ、代入演算子を潰したい エラーの出ないコード。 ref class Hoge sealed { private: Hoge % operator=( Hoge const % rhd ) { return *this; } ; Hoge( Hoge const % src ) {} ; } 実装したいコード。 ref class Hoge sealed { private: Hoge % operator=( Hoge const % ) ; // error LNK2020 未解決のトークン(06000001) Hoge::op_Assign Hoge( Hoge const % ) ; // error LNK2020 未解決のトークン(06000003) Hoge::ctor } C++/CLIでメンバ関数の実装をせずに放置というのは可能でしょうか?
- 118 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:43:31 ]
- そもそもref classは定義しない限りコピーとか無理じゃなかったか
- 119 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 19:44:11 ]
- C#などから使わせるつもりなら演算子のオーバーロードは全部staticにしないといけないし
代入演算子やコピーコンストラクタはそもそもオーバーロードできないし constも使えないし参照渡しや参照返しもダメ(そもそもref classだから無意味) つかまずC#やるべき。.NETの常識が無さすぎ。
- 120 名前:117 mailto:sage [2010/12/02(木) 22:33:30 ]
- >>118
そうなんですか、回答ありがとうござます。 >>119 回答ありがとうございます。 msdn.microsoft.com/ja-jp/library/sy1y3y1t(VS.80).aspx このサンプルコードのコンパイルが通らなかったのですが、そもそもサンプルが間違ってるという事なのでしょうか? あと、.NETの常識を学ぶのにオススメの書籍などあれば教えていただけると幸いです。
- 121 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 11:24:33 ]
- Lock に関係ない実装は省略して書いてるだけでしょ
間違ってると言うより、そこは問題とは関係ない部分なだけ
- 122 名前:117 mailto:sage [2010/12/03(金) 12:41:30 ]
- >>121
回答ありがとうございます。 別途実装をするしか無いという事ですね。分かりました。 そうすると >>119 の回答から考えて、C#などから使わせるつもりが無いなら、 ・演算子のオーバーロードはstaticにする必要はない ・代入演算子やコピーコンストラクタはオーバーロードできる ・constも使えて参照渡しや参照返しもOK ということでしょうか?
- 123 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:36:41 ]
- C++/CLIではref classのメソッドにconstを付けられないから
C#やVBと相互運用しないとしてもconstパラメータは事実上役に立たない。
- 124 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 13:39:31 ]
- 趣旨がわからないね。
C++スタイルでやりたいだけなら、そもそもC++/CLI 使う必要性がないんでない?
- 125 名前:117 mailto:sage [2010/12/04(土) 14:33:18 ]
- >>123
回答ありがとうございます。 Hoge % operator=( Hoge % arg ) { 代入処理の実装 } ; これだと代入元が書き換えられそうで気持ち悪いですけど、そういう流儀なのですね。分かりました。 >>124 >>122 の質問に関しては元々あった疑問ではありません。 >>119 の解答に書かれている内容に関しての事実確認です。 趣旨に関してはスレ違いだと思いますので書きません。
- 126 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 14:48:36 ]
- %もいらん
ref classだから常にポインタ渡し
- 127 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 13:03:24 ]
- >>124
MSのサンプルだか自動生成されるコードだかで、 あんな風にrefクラス上でC++っぽいことをやっているものを見た覚えがある。 元の質問者のコードもそういうのに影響されたのではないかと思う。
- 128 名前:デフォルトの名無しさん mailto:age [2010/12/05(日) 14:36:18 ]
- private ref struct A{
UInt32 data[5]; }; これがコンパイル通らないんだけど、 array<UInt32>^ data;とかにしていちいちgcnewするしかないんですか? データ宣言するだけのためにコードなんて書きたくないので、うまい解決法お願いします。
- 129 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 15:20:34 ]
- うん、array<UInt32>^にしてコンストラクタ書くしかないんではないかなあ。
- 130 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:27:52 ]
- C#では構造体でstackallocが使えるからvalue classならいけるだろうと思ったけど無理なのね
この手の機能でC#に負けてどうする
- 131 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:36:00 ]
- CStringを使うには何をインクルードすればよいの?
atlstr.h、atlbase.h、atlapp.hは入れてるけどコンパイルとまる
- 132 名前:デフォルトの名無しさん [2010/12/06(月) 21:09:33 ]
- VC++2010 ExpressEditionです。
System::windows::form::timer で一秒ごとにlabel->textを更新していますが(要は時計です) 最小化から復帰するとlabel->textが更新されなくなります、何故でしょう。
- 133 名前:デフォルトの名無しさん mailto:sage [2010/12/07(火) 22:12:40 ]
- 最小化したときにとめたタイマーを元に戻すんだキバヤシ
- 134 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 00:35:19 ]
- そもそもUI用のタイマで時計を作るな
MSDNにもはっきりそう書いてあるだろ
- 135 名前:デフォルトの名無しさん [2010/12/08(水) 00:44:46 ]
- >>133
故意に止めるようなことはしていないんですが、そういう仕様なんでしょうか?
- 136 名前:デフォルトの名無しさん [2010/12/08(水) 00:46:00 ]
- >>134
えぇぇぇぇぇ。時間分解能が悪いとかあの辺ですか!ヽ(´Д`;)ノアゥ... スレッドタイマークラスとかに変えます。ご教授ありがとうございます。
- 137 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 00:57:53 ]
- MS公式のガイドラインかなんかで「System.Windows.Forms.Timerで時計を作らないでください」って無かったっけ?
どこだったか忘れたけど
- 138 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 11:59:01 ]
- 一番使い易いところにあるのに、一番性能悪いとかひでー話だよな
俺も最初使ってみて混乱した
- 139 名前:デフォルトの名無しさん mailto:sage [2010/12/08(水) 14:19:36 ]
- 使い方も知らずに使うとか・・・
- 140 名前:デフォルトの名無しさん mailto:sage [2010/12/09(木) 00:12:13 ]
- VS2005です。
C++/CLIでラップしたネイティブのライブラリから例外が発生して、 C++/CLI側でcatchした時に、 ネイティブ側のインスタンスのデストラクタが呼ばれません。 これはバグと考えて良いのでしょうか? VC++2010 expressでは普通に呼ばれたので・・
- 141 名前:デフォルトの名無しさん [2010/12/09(木) 03:14:40 ]
- >>132です。
あれからいろいろいじりまくっていたんだけど、どうもフォームの透過色(TransparencyKey)が特定の色の場合 この問題が発生しているようです。引き続き調べてみます。
- 142 名前:140 [2010/12/10(金) 18:48:44 ]
- 全く相手にされてないようですが、
解決したので適当に報告しときます。 とりあえず、ネイティブのライブラリオプションを /EHscから/EHaに変更することで、デストラクタが呼ばれるようになりました。 どうやらオプションの違いでABIに互換性が無くなり、 例外をハンドルできても、その後のアンワインディングを正常に実行できていなかったようです。 デフォルトのオプション設定だと上記のような状態になるので、 自分みたいに知らずに組んでる人はメモリリークし放題ですね。
- 143 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:48:33 ]
- C++/CLIでSystem::Actionって使えないの?
event Action^ Foo; とやると エラー1error C2955: 'System::Action' : クラス ジェネリック を使用するには ジェネリック 引数リストが必要です って出てくる…
- 144 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:54:33 ]
- Action<T>はmscorlib.dllだがそれ以外はSystem.Core.dllだ
- 145 名前:デフォルトの名無しさん mailto:sage [2011/01/11(火) 22:57:47 ]
- >>144
ありがとう… おまえそんなところにいたのか…
- 146 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 21:22:18 ]
- 聞きたいんだけどスレ住人はVC2010でC++/CLI書いてる?
それともインテリセンス使うために2008書いてる? それともC++/CLI書かない?
- 147 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 21:30:17 ]
- C++/CLI書かない…けど次の案件がVS2010指定でネイティブDLL呼び出す必要があるから
書かざるを得なくなるかもしれなくてちょっと憂鬱
- 148 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:28:46 ]
- .NET用言語で一番の糞言語だからね>C++/CLI
- 149 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:49:37 ]
- >>148
C++自体が言語として糞だから仕方がない。 それと互換性保ちながらここまで実現したということを考えると、かなりすごいと思う。
- 150 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:50:52 ]
- 互換性?ねーよ。
- 151 名前:デフォルトの名無しさん mailto:sage [2011/02/05(土) 22:54:50 ]
- >>150
え。それは、今では使うのは好ましくないとされているレガシー関数群をいまだにお使いになられているからではないですか?
- 152 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 11:47:30 ]
- CとC++に互換性があるとは言わないだろ
CLIの部分については互換性ゼロなんだから
- 153 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 11:51:41 ]
- >>152
> CとC++に互換性があるとは言わないだろ それは上位互換ありでしょ。完全ではないけれども。
- 154 名前:デフォルトの名無しさん mailto:sage [2011/02/06(日) 12:50:45 ]
- boostを完璧にコンパイルできないだろとか言い始めるのかと思ったら
斜め上をいく馬鹿だったか
- 155 名前:デフォルトの名無しさん [2011/02/08(火) 22:27:38 ]
- 初心者です。
ストリップメニューを開くと5個ぐらい項があって 3つチェックされているとして、その3という数字を取りたいのですが どうすれば良いでしょうか? 開く部分の変数はStripMenuItem1です。 for(int = 0;i<StripMenuItem1->項目数;i++){if(StripMenuItem1->子項目->checked == true){temp++;}} みたいなのはありますでしょうか?どうすれば良いでしょうか?よろしくおねがいします
- 156 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 22:55:33 ]
- 自前で数えろよ、毎回書くのがいやなら関数にしとけ。
- 157 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 23:02:04 ]
- >>155
StripMenuItem1.Itemsプロパティで子が全て取得できる 言っちゃ悪いけどそういう意味での初心者がC++/CLIなんか使うもんじゃない 先にC#覚えて
- 158 名前:デフォルトの名無しさん [2011/02/08(火) 23:03:11 ]
- >>156
レスありがとうございます 申し訳ありません。理解できません 何か関数があるのでしょうか? 自前で数えるといっても、2個チェックのときは2と自動で取ってこれるようにしたいのです。 そういえば if(項の変数->checked == true){temp++;} を何行も書けばいいだけですね。ありがとうございました!
- 159 名前:デフォルトの名無しさん [2011/02/08(火) 23:03:52 ]
- >>157
ありがとうございました!
- 160 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 23:11:25 ]
- ときどき勘違いした可哀想な子が紛れ込んでくるな
>>21や>>42はまだC++/CLI使ってるんだろうか
- 161 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 00:53:00 ]
- 次スレでは「初心者用」を消して、
> - C++プログラミング > - .NETプログラミング (C#, VB.NET, etc.) > > に不自由する方はお引き取りください とか若干きつめに書いておけばいいじゃね? 何年先になるかは分からんけどw 4,5年ぐらい?ww
- 162 名前:デフォルトの名無しさん [2011/02/09(水) 06:13:09 ]
- WCHAR f[] = aToolStripMenuItem->Text->ToCharArray();
cli::array<Type,dimension> ^' から 'WCHAR []' に変換できません。 ->ToCharArray();でWCHARが帰ると思っていたのですがなぜでしょうか?どうすれば良いですか?
- 163 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 06:31:17 ]
- そのWCHAR[]をどうしたいかによる
- 164 名前:デフォルトの名無しさん [2011/02/09(水) 06:33:29 ]
- >>163
wcscpyしたいです。 というか元々wcscpyの引数に入れるつもりでしたができませんでした。
- 165 名前:デフォルトの名無しさん [2011/02/09(水) 07:06:40 ]
- >>163
ちなみに、第二引数にその->TEXTの文を入れて 別に用意した第一引数のWCHAR[3][]とかに入れたいのです
- 166 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 07:48:58 ]
- >>161
もともとは初心者お断りスレもあったが、話題があまりなくて落ちた >dat落ち姉妹スレ >C++/CLI part3
- 167 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 09:38:59 ]
- このスレでもC++、.NETの初心者は対象外だけどな
- 168 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 11:16:29 ]
- >162
文字列操作はこれがひっかかったぞ ttp://vene.wankuma.com/prog/CppCli_strings.aspx
- 169 名前:デフォルトの名無しさん [2011/02/09(水) 11:18:17 ]
- >>168
サンクス おせーよ
- 170 名前:デフォルトの名無しさん mailto:sage [2011/02/09(水) 15:36:36 ]
- C++と.NETの両方を極めないとCLIは使いこなせないからな
- 171 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 16:44:50 ]
- Express EditionでもC#プロジェクトと同じソリューションに入れられればいいのになあ
VCのExpress Editionが入門者向けというより達人の縛りプレイ用になってるじゃないか
- 172 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 17:53:40 ]
- CLI使わないという選択肢はないのかw
- 173 名前:デフォルトの名無しさん mailto:sage [2011/02/12(土) 18:35:17 ]
- そんな選択肢があったらこのスレにいない
- 174 名前:デフォルトの名無しさん mailto:sage [2011/02/13(日) 04:23:39 ]
- >>171
金払え
- 175 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 09:47:29 ]
- ダイアログで値を入力させて、その値を親ウィンドウで処理したい場合に
どうやって値の受け渡しをすればいいの? 親にpublic関数を用意して呼び出すのが簡単なわけだけど この.hファイルに親の.hファイルをインクルードすると子のデザイナが壊れる 子ダイアログで親の形を認識させる手段がない
- 176 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 10:00:22 ]
- 子のプロパティを公開して親からアクセスすればいいんじゃねえの?
- 177 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 16:30:00 ]
- 比較関数を書く形式で、リスト(cliext::list)をクラスのメンバで
ソートするにはどうしたら良いでしょうか? こんな感じじゃないかと思うのですが 「関数呼び出しには引数リストがありません。 メンバへのポインタを作成するために '&Test::Form1::less' を使用してください」 とエラーが出ます 以下コードを簡略化して書いてます //クラスTest ref class Test { public: DateTime date; Test(void){}; }; //比較関数 bool less(Test^ lhs, Test^ rhs) { return lhs->date < rhs->date; } //リストの作成 list<Test^> list_item; Test^ item = gcnew Test(); list_item.push_back(item);//(以下省略 //ソートする list_item.sort(less);
- 178 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 17:09:32 ]
- 試してないけど、static にして Test::less じゃね?
- 179 名前:デフォルトの名無しさん mailto:sage [2011/02/18(金) 17:41:53 ]
- レスありがとうございます
Form1クラスの上で定義したらできました いまいちよくわからないですが これからじっくり理由を考えて見たいと思います、感謝
- 180 名前:デフォルトの名無しさん mailto:sage [2011/02/20(日) 21:49:54.49 ]
- VC++のスレでこちらの方がふさわしいのではないかと言うことで移ってきました。
VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を あげる(薄くする)と言うプログラムを組んでいます。フォームのMouseLeaveイベントと、 MouseEnterイベント発生時にOpacityプロパティを変えることで実現を目論んだのです が、ウインドウの外枠(サイズを変えるときにドラッグする部分や、上部のウインドウ名 が書かれている部分)にマウスがあると、MouseLeaveイベントが発生して、薄くなって しまいます。もちろん、ここではたとえ、フォーム外側から移動してきてもMouseEnter イベントは起きません。 フォームから完全にマウスカーソルがそれた時のみ透明度を高めたいのですが、 どういうイベントを用いればよいんでしょうか?
- 181 名前:デフォルトの名無しさん mailto:sage [2011/02/21(月) 01:14:11.85 ]
- で、その質問内容のどこがC++/CLIに関係しているんだ?
- 182 名前:180 mailto:sage [2011/02/21(月) 07:06:34.79 ]
- ってことは、.Net Frameworkのスレ探します。
- 183 名前:180 mailto:sage [2011/02/21(月) 07:08:31.22 ]
- .net Framework関連のスレって見つからないんですが、どこが適切でしょう。
すみません。
- 184 名前:デフォルトの名無しさん mailto:sage [2011/02/21(月) 07:51:25.56 ]
- ふらっとあたりで聞けばいい
- 185 名前:デフォルトの名無しさん mailto:sage [2011/02/26(土) 23:54:49.36 ]
- ref classのメンバー変数にID2D1SolidColorBrush*のようなものがある
template <class T> inline void SafeRelease(T *ppT) { unsigned long refCount; if (*ppT) { refCount = (*ppT)->Release(); *ppT = NULL; } } にID2D1SolidColorBrush*のポインターを渡すことが出来ないからpin_ptrで渡してたんだが、いい加減書くのがめんどくさくなってきた スマートに処理しようと思い、template <class T> inline void SafeRelease(T *%ppT)というパラメーターの関数を定義したんだが、こいつへの渡し方がわからない 誰か教えてくれまいか
- 186 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 02:13:39.66 ]
- あるプロセスをオープンしようとしてます
読み取り専用で試したが結果は同じ CLIとしてコンパイルしたWindowsアプリからOpenProcessを呼び出すとフル権限で開ける C++としてコンパイルしたコンソールアプリからはOpenProcess読み取り専用でもアクセス拒否される OSはWindows7 64bit 内部のことは分からないですが、OpenProcessは同じ標準process.h内のものを使ってると思う 少なくともソース上ではそういう記述をしてますがコンパイラが何をしてるかまでは定かじゃないです 大きな違いはコンソールアプリであることですが、それが拒否の原因になるんでしょうか?
- 187 名前:デフォルトの名無しさん [2011/02/27(日) 18:39:56.37 ]
- VC2010を使用しています。
テキストボックスに文字が入力され、エンターを押されたら動作する処理を行いたいのですが、 TextChangedイベントに if(TextBox1->Text->EndsWith("\r\n")) では、認識出来ないのですが、どのようにすればよろしいのでしょうか? よろしくお願いします。
- 188 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 19:14:15.81 ]
- フレームワークの話しはスレ違い
- 189 名前:デフォルトの名無しさん [2011/02/27(日) 19:44:49.91 ]
- フレームワークの話はどこですれば良いのでしょうか?
- 190 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 19:48:31.21 ]
- C#の質問にして、ふらっとC#で聞くといい
- 191 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 15:45:27.41 ]
- >185
com::ptr で保持して、リリース処理はそっちで対応しちゃあかんの?
- 192 名前:185 mailto:sage [2011/02/28(月) 18:59:52.28 ]
- >>191
ref classにはcom::ptrはおけない思う
- 193 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 19:01:42.54 ]
- >>192
すまん。 CComPtrと勘違いしてた com:ptrはCLRでも使えるのか
- 194 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 19:28:37.85 ]
- >193
それ用のクラスだぜ あとは .net Framework の System::Runtime::InteropServices::SafeHandle を実装したら?
- 195 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 20:58:29.72 ]
- DirectXのリソースの解放にSafeHandleは使えないんじゃなかったっけ
最近のは知らんけど
- 196 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 23:42:18.77 ]
- >187
KeyPress
- 197 名前:デフォルトの名無しさん mailto:sage [2011/03/01(火) 00:17:52.54 ]
- >195
詳しく
- 198 名前:デフォルトの名無しさん mailto:sage [2011/03/01(火) 01:40:02.26 ]
- Direct3D自体の作成/解放が1スレッドに限定されるのに対し
ファイナライザスレッドでどーのこーのみたいな話だったか 使えないというか使う意味がない、みたいな
- 199 名前:デフォルトの名無しさん [2011/03/10(木) 18:48:24.24 ]
- printfとか普通に書いたとき、
なんでprintfがアンマネージのコードって コンパイラは理解できるの? それらしい印になるようなキーワードを 特に書いてないような気がするのだが?
- 200 名前:デフォルトの名無しさん mailto:sage [2011/03/10(木) 18:56:54.84 ]
- 内部的には #pragma managed や unmanaged 指定がされてんじゃね?
#include か #using かで切り分けてるんだと思うけど
- 201 名前:デフォルトの名無しさん [2011/03/15(火) 00:19:49.85 ]
- 失礼します。
Form1からForm2を開き、Form2を表示した状態でForm1のテキストボックスにフォーカスを合わせたいのですが、何か良い方法はありますでしょうか? Form2のShownイベントで、Form1->TextBox1->Forcus();を実行してみましたが、Form1が見つかりませんでした。 よろしくお願いします。
- 202 名前:デフォルトの名無しさん mailto:sage [2011/03/15(火) 14:20:33.94 ]
- 見つかりませんでしたじゃなくて
見つかる様にするんだよ。 作成時にインスタンス渡すとか、間を取り持つ作るとか
- 203 名前:201 [2011/03/23(水) 22:44:49.12 ]
- imagingsolution.blog107.fc2.com/blog-entry-109.html
ここを参考に、Ownerを指定してもダメでした。 と、言うよりサンプル通りに作ってみても 1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2039: 'Form2_Load' : 'Form2Test::Form2' のメンバーではありません。 1> d:\vc2010\test\form2test\form2test\Form2.h(15) : 'Form2Test::Form2' の宣言を確認してください。 1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2065: 'Form2_Load' : 定義されていない識別子です。 (以下略) と、なってしまいました。 Form2.hの宣言 this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 273); this->Name = L"Form2"; this->Text = L"Form2"; this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load); this->ResumeLayout(false); Form2.cppにて #include "Form1.h" using namespace Form2Test; System::Void Form2::Form2_Load(System::Object^ sender, System::EventArgs^ e) { Form1^ PForm; if(this->Owner != nullptr){ PForm = static_cast<Form1^>(this->Owner); } } この記述では間違っているのでしょうか?VC2010を使用してます。 よろしくお願いします。
- 204 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 02:14:35.75 ]
- 本当にForm2はグローバル名前空間なのか?
とりあえずヒントだけ出したけど、C++、.NET、プログラミングの基礎にあたる内容はスレチだから返答は不要 というか、C++/CLIはコンパイル可能なコードすら書けないようなプログラミング初心者が使うものじゃない
- 205 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 04:38:21.64 ]
- VC++2010&CLIで4.0以前(4.0は含まない)のNETを使う方法はありますか?
MSDNには3.5を利用するには2008SP1を入れろとかありましたが NETのバージョンごとに入れるのはさすがに無駄すぎるので。
- 206 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 11:57:27.41 ]
- msdn.microsoft.com/ja-jp/library/ff770576.aspx
プロジェクトファイルをテキストエディタで編集しろということらしい C++/CLIで作った混合アセンブリはCLR2(.NET2.0-3.5)向けにコンパイルすると CLR4では動作しなくなるので注意 インテリセンスも削られてるのでC++/CLIなら2008で作業するほうがいいよ
- 207 名前:デフォルトの名無しさん mailto:sage [2011/03/24(木) 20:41:15.80 ]
- >>206
msdn.microsoft.com/ja-jp/library/47w1hdab.aspx こちらのページを読んだところ 2010は4.0だけ、2008SP1なら3.5だけなのかと思ってしまったのですが 2008SP1は2.0〜3.5まで扱えるんですね 2008を入れることにします ありがとうございました
- 208 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:50:53.88 ]
- 質問です
画面を表示させ、ボタンを押したら表示されている画面をbitmapイメージとして保存(出来れば印刷も)したいのですが、 そういう事は可能なのでしょうか? サンプルソース等探してみたのですが見つからなくて行き詰ってしまいました。
- 209 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:54:32.68 ]
- C# スクリーンショット でググれ
C#だぞ。C++/CLIじゃないぞ。
- 210 名前:デフォルトの名無しさん mailto:sage [2011/04/01(金) 22:57:17.22 ]
- >>209
なるほど、C#で調べれば良かったんですね。。 自身に[Alt]+[Print Screen]を送れば良かったんですね ありがとうございます
- 211 名前:デフォルトの名無しさん [2011/04/02(土) 12:02:12.18 ]
- フォーム上にメニューバーを追加したいんですが
どういうソース書けばいいんでしょうか?
- 212 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 12:06:00.79 ]
- C# MenuStrip でググれ
C#だぞ。C++/CLIじゃないぞ。
- 213 名前:デフォルトの名無しさん [2011/04/02(土) 12:31:38.06 ]
- サンクス
- 214 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:27:27.97 ]
- 質問です。
テキストファイルから設定を読み取り、動的にリンクを生成し、別プログラムを起動するランチャーを作っています。 動的にリンクは生成できますが、イベントハンドラに仕込むコールバック関数を動的には生成できないため、 1つのコールバック関数を呼び出しそのなかで起動するプログラムを判断せざるを得ないと考えました。 gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandlerで登録される関数には、 呼び出し元のリンクが引数に渡されるので、cliext::mapで事前に、リンクとコマンドラインの組を格納して判断に用いよう と考えました。が、リンクのハンドラ( System::Windows::Forms::Label^ )はoperator <が定義されておらず ソートできないため使用できませんでした。 それではcliext::vectorに、リンクとコマンドラインのcliext::pairを格納しようと思いましたが、どうやらムリみたいです。 実際コンパイルエラーになりました。参考ウェブサイト: ttp://blogs.wankuma.com/episteme/archive/2007/11/21/109646.aspx ttp://d.hatena.ne.jp/crimsonwoods/20071130/1196384990 どうすれば、リンクとコマンドラインの型を管理できるでしょうか。 リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、 コマンドラインをメンバ変数として持たせるというのも考えましたがどうも無理やり過ぎる気がします。 何かよい方法はないでしょうか。
- 215 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:39:23.59 ]
- .NETでSTLは使うな
System.Collections.GenericのDictionary<,>使え というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい
- 216 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:45:48.60 ]
- >>215
お早い回答ありがとうございます。 > System.Collections.GenericのDictionary<,>使え どのようなものか、調べてみます。 > というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい C++を既に学習しており、基本C++の文法でいける(と私が思う)C++/CLIのほうが新たにC#を学ぶより よさそうだと考えておりましたが、 今後考えてC#を学ぶことも考えたいと思います。ありがとうございました。
- 217 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 17:58:52.75 ]
- やったらもう戻ってこないだろう
- 218 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 18:01:20.52 ]
- コントロールのTagプロパティを使う手もあるけどね
C++/CLIはC++とC#を理解して その上でもしも両方同時に必要になったときに橋渡しするために嫌々ちょっとだけ使う言語です
- 219 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 18:38:49.60 ]
- >>218
そんな手もあるのですね。 結局>>214で述べた > リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、 > コマンドラインをメンバ変数として持たせると(略 これで作ってしまいました。今回はこれでいいとして、今後はC#を学んでみたいと思います。 ありがとうございました。
- 220 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 17:02:31.86 ]
- >>214
手元にあるvs2010では問題なく動いた
- 221 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 18:14:41.51 ]
- CLIはすぐデザイナが壊れるし
IDEが自動でインデントをぐちゃぐちゃに破壊してくれるので C++をラップするくらいにしか使わない
- 222 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 19:08:09.39 ]
- VSの次のバージョンではC++/CLIのWinFormsデザイナは削除したほうがいいと思う
>>219のようなかわいそうな人を生むだけで害悪しかない
- 223 名前:デフォルトの名無しさん mailto:sage [2011/04/03(日) 21:53:39.15 ]
- C++もかわいそう
別に「統合」してくれと頼んだわけでもないのに へんな統合開発環境の下で働かされてる
- 224 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:32:31.72 ]
- 繰り返しの多い処理をするとメモリオーバーになってしまいます
どのようにメモリを解放するのですか?
- 225 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:42:17.88 ]
- 再現するソース出して
- 226 名前:デフォルトの名無しさん mailto:sage [2011/04/10(日) 21:49:49.30 ]
- こういうこと?
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
- 227 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 05:33:09.44 ]
- C++/CLIのコードをビルドしたアセンブリにアンマネージコードが
含まれてないかチェックする方法って知ってますか? なぜこういうことを聞くかというとこのクラスライブラリをマネージコードから 使う必要が出てきたためです。
- 228 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 10:25:23.73 ]
- /clr:pure
- 229 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 11:04:57.59 ]
- それで分かればいいよねぇ
- 230 名前:デフォルトの名無しさん mailto:sage [2011/04/22(金) 11:11:26.93 ]
- 意味がわからん
混在アセンブリはマネージコードから使えるけど セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら まず間違いなく/clr:pureではダメで/clr:safeでないといけない でも/clr:safeなんて世の中にあるC++/CLIのコードのほとんどがコンパイルできないよw
- 231 名前:227 mailto:sage [2011/04/23(土) 09:53:36.44 ]
- >>228-230
レスありがとう > 混在アセンブリはマネージコードから使えるけど > セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら > まず間違いなく/clr:pureではダメで/clr:safeでないといけない 説明不足でした とにかくC++/CLIのコードのすべてのパブリックなクラスとメンバに マネージコードからアクセスできるようにしたいんです アンマネージコードが含まれてるとそれができないんじゃないかと思って質問しました
- 232 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 11:45:11.72 ]
- アンマネージコードは含まれててもいい
というかそのためのC++/CLI
- 233 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 12:23:54.63 ]
- 何を持って出来ないと思ったかがポイントかな。
とりあえず動くコードを張っとこう。 VS2010だとこのままで動くし、 VS2005-2008の場合はmanifestをちょこちょこいじる必要がある。 // cl /LD /O1 /clr test1s.cpp #include <iostream> class baz { public: void say() { std::cout << "Hello BAZ" << std::endl; }}; public ref class Foo { public: void Say() { std::cout << "Hello FOO" << std::endl; baz b; b.say(); }}; ref class Bar { public: void Say() { std::cout << "Hello BAR" << std::endl; baz b; b.say(); }}; // csc /o /r:test1s.dll test1.cs using System; class Program { static void Main() { new Foo().Say(); // new Bar().Say();// internalは呼び出せない。 } }
- 234 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 12:31:41.38 ]
- clrをマネージだけで使うとかかなりマゾい人だな
- 235 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 14:15:04.04 ]
- そんな有り得ないというか無意味な使い方を想定するのは不毛だし
C++/CLIみたら混在しているものと見なせばいいよ
- 236 名前:227 mailto:sage [2011/04/23(土) 18:24:35.15 ]
- >>232-235
レスありがとう アンマネージが含まれてもマネージから呼び出せるということだけど C++/CLIのソースコードで画像処理とかやってて、 例えばビットマップの構造体をnewして先頭からのバイト数でアクセスするとか、 その情報を渡してWin32APIを呼ぶとかしまくってるんだけど、 これってアンマネージにコンパイルされるよね。 こんなメソッドをC#から呼んでまともに動作するんだろうかって心配なんです。
- 237 名前:デフォルトの名無しさん mailto:sage [2011/04/23(土) 19:13:47.90 ]
- やっぱり、Managed Unmanagedの意味を取り違えてたか。
その程度ならManagedでコンパイルされてるよ。ただしunsafeだけどね。
- 238 名前:227 mailto:sage [2011/04/24(日) 11:33:12.50 ]
- >>237
マネージだけど暗黙的にunsafeとしてコンパイルされるから アンマネージのように構造体やポインタが使えるってことか。 納得した。ありがとう。
- 239 名前:デフォルトの名無しさん [2011/04/24(日) 19:03:40.58 ]
- 文字列を逆順にするプログラムを書こうとした場合、自分で考えると以下のようになりました。
--------------------------- #include <string> string str = "abcde" string new_str; int i; int length = str.size(); for (i=0; i<length; ++i) { new_str[i] = str[length-i-1]; } --------------------------- なにかかカッコ悪い感じがするのですが、 一番スマートな書き方はどのような感じになりますでしょうか? PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、 C++のstringライブラリにありましたでしょうか? あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。 何故でしたでしょうか・・? ご教示いただけますと幸いです。
- 240 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 19:23:40.94 ]
- スレ違い
- 241 名前:239 [2011/04/24(日) 19:27:37.31 ]
- すみません
- 242 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 19:43:51.75 ]
- このスレ的にはこういう回答になる(笑
// cl /FUSystem.Core.dll /clr:safe test2.cpp using namespace System; using namespace System::Linq; int main(array<String^>^ args) { String^ str = "abcde"; String^ new_str = gcnew String(Enumerable::ToArray(Enumerable::Reverse(str))); Console::WriteLine(new_str); } 拡張メソッドは使えなかったっけ?ちとスマートじゃないな。
- 243 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 20:55:50.28 ]
- WCHAR [32]' から 'System::Object ^' に変換できません
というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
- 244 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 21:08:28.84 ]
- System::Object^ v_obj = gcnew System::String(v_wchar);
- 245 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 22:09:06.50 ]
- たぶんこれかな
msclr::interop::marshal_as
- 246 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 22:36:22.37 ]
- >244
ありがとうございました。その逆の変換はどうするんでしょうか?
- 247 名前:デフォルトの名無しさん mailto:sage [2011/04/24(日) 23:47:43.19 ]
- >>242
今時サロゲートペアすら考えないコーディングは絶滅すべき
- 248 名前:デフォルトの名無しさん mailto:sage [2011/04/25(月) 04:59:47.67 ]
- >>246
msdn.microsoft.com/ja-jp/library/ms235631.aspx
- 249 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 16:00:21.03 ]
- >>247
サロゲートペア対応に挑戦しようと思うのだが、VS2010expressのコンパイラでエラーになる。 なんかスマートな対応方法ないすか? literal String^ str = L"「叱る」と「\uD842\uDF9Fる」"; error C3850: '\uD842': ユニバーサル文字名が無効な文字を指定しています。 error C3850: '\uDF9F': ユニバーサル文字名が無効な文字を指定しています。
- 250 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 21:36:58.89 ]
- >>249
ググると𠮟るのユニコードは「20B9F」となってるけど。
- 251 名前:デフォルトの名無しさん [2011/04/27(水) 21:40:24.11 ]
- textBoxに入力した文字を分割して配列に割り当てる方法がわかりません
- 252 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 22:11:33.08 ]
- C# 文字列 分割 でググれ
C#だぞ。C++/CLIじゃないぞ。
- 253 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 23:46:28.19 ]
- >>249
\uxxxxじゃなくて\UxxxxxxxxでUTF-32使って指定するとか?
- 254 名前:249 mailto:sage [2011/04/29(金) 10:49:09.60 ]
- >>250,253
CLRは内部コードが16bitのユニコードなのでこうなちゃうんですね。 C#はこれでいけるのですけどね;; const string msg = "「叱る」と「\uD842\uDF9Fる」"; とりあえず、これで対応しました。 array<wchar_t>^ cmsg = { L'「', L'叱', L'る', L'」', L'と', L'「', 0xD842, 0xDF9F, L'る', L'」' }; String^ msg = gcnew String(cmsg); サロゲート対応のコードを書いてみました。 ideone.com/rXbuf
- 255 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 11:04:15.35 ]
- string.Concat(
StringInfo.GetTextElementEnumerator(s) .Cast<string>() .Reverse() .ToArray() ) でええやん(めんどくさいからC#)
- 256 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 12:57:21.31 ]
- サロゲートと聞くと松田聖子を思い出す
- 257 名前:デフォルトの名無しさん mailto:sage [2011/04/29(金) 13:17:08.71 ]
- .GetTextElementEnumeratorの戻値はIEnumerableじゃくて
IEnumertorだから直接Linqにつなげない。
- 258 名前:デフォルトの名無しさん [2011/04/30(土) 13:14:38.20 ]
- 文字をシフトJISに変換する方法
- 259 名前:デフォルトの名無しさん mailto:sage [2011/04/30(土) 13:32:03.61 ]
- 一行で様々な疑問を出させる才能
- 260 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 13:44:13.14 ]
- C++/CLIの具体的な難点ってなんでしょうか?
少し触ってみたところ、GUIも作り易い感じがするしCライブラリも簡単に使えそうだし、 いったいどういう問題があるのかなと気になりました (VC++2008EEなのでintellisenseもとりあえず大丈夫です)
- 261 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:00:19.76 ]
- C#やVBと比較して生産性が遥かに劣る
それだけ
- 262 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:23:06.33 ]
- >>261
できればもうちょっと具体的にお願いします
- 263 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 21:55:07.50 ]
- ・C++言語ではなくではなくてC++/CLI言語であること、
C++/CLI独特の文法を覚える必要がある。C#との互換性もない。 ・使う人が少ないので情報が少ない ・Intelisenceの不具合が多い(例え2010でも逃れられない) ・中途半端にネイティブなのでCLRとしての最適化も中途半端。
- 264 名前:デフォルトの名無しさん mailto:sage [2011/05/14(土) 22:05:31.03 ]
- Cのライブラリ使うにしても、DllImportの手間を差し引いてもよっぽどでなきゃC#の方が楽なんだよね
- 265 名前:260 mailto:sage [2011/05/15(日) 19:08:05.61 ]
- どうもありがとうございます
Visual C#を試しに入れてみたところ、 何だこれは…ひょっとしてC++/CLIだけでなくVisual C++自体が手抜き…?と思ってしまいました これだとたしかに生産性に差が出るかもと思うと同時にMSの露骨な贔屓に少し閉口してしまいました まだほんの入口ですしCライブラリについて不安はありますが、とりあえず使ってみようと思います
- 266 名前:デフォルトの名無しさん mailto:sage [2011/05/15(日) 23:25:23.90 ]
- VC++はネイティブC++の開発環境としては現在最高だろ
言語そのものがインテリセンスやRADに向いてない C++にはC++にしかできないことをやらせるとMSは言ってるので フォームデザイナを使うような用途へのサポートが強化されるようなことは今後も期待できない C++はネイティブ特化、C++/CLIは橋渡し専用
- 267 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 00:10:28.27 ]
- まだVS2010のC++/CLIのインテリセンスないのか
この分だともうずっと出ないだろうな
- 268 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 09:33:24.32 ]
- 2010で外されたってことは、MSは諦めたってことなじゃないの?
- 269 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 10:32:51.80 ]
- いや、次のバージョンでは復活させるって言ってる。
問題は「次」というのがSP2なのかVS2014とかになるのかが分からないこと。
- 270 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 10:37:08.05 ]
- その前にC++/CLI自体が…
今やMSにとってはATLでCOM触るラッパーを書くためだけの言語だからなあ
- 271 名前:デフォルトの名無しさん [2011/05/24(火) 01:29:53.63 ]
- /*********************************/
/* __finallyブロックは何のために */ /*********************************/ try { throw 128; } catch (int num1) { System::Console::WriteLine("catchブロック: num1 == {0}", num1); } __finally { System::Console::WriteLine("__finallyブロックって何の意味があるのか疑問だな"); } System::Console::WriteLine("__finallyブロックがなくても、throwの有無にかかわらずここで実行できるじゃないか。");
- 272 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 21:38:05.21 ]
- だがその処理の呼び出し元でcatchしたかった時はどうする?
C++なら自分で再throwする必要があるが、 finallyを使えばそういうことを考える必要がない。 ついでに言うと、finallyブロックは 例外が起きようとも起きなかろうとも、 breakやreturnで抜けても必ず実行されるので ファイルの閉じ忘れなどを回避する実に有効な手段である。
- 273 名前:デフォルトの名無しさん mailto:sage [2011/05/24(火) 23:17:43.72 ]
- スタック割当構文じゃだめなの。
- 274 名前:デフォルトの名無しさん mailto:sage [2011/05/25(水) 23:31:46.12 ]
- >>273
だいたいそれで間に合うとは思う。 auto_handleやauto_gcrootの助けもあるしな。 まあ、今までのVisual C++にも__finallyあるし、C#にもfinallyあるし、 あえてC++/CLIに__finallyを搭載しない理由もないと言ったところでは?
- 275 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 01:03:44.37 ]
- 使ったオブジェクトのデストラクタ呼ぶだけでいいケースは確かに多いけどそうじゃないときもあるだろ
その場限りのちょっとした後処理のためにもいちいちクラス作るの?
- 276 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 05:07:03.51 ]
- 超初心者です。
教えてほしいのですが、 hoge(int *piyo)は hoge(int^ piyo)と してるのですが hoge(int **piyo)は どのように書き換えれば良いのでしょうか すいませんが教えてください
- 277 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 12:12:03.85 ]
- array<int^>^ piyo とか?
- 278 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:22:59.15 ]
- /* Hashtableのポインターへのポインターがコンパイルエラー */
using namespace System; using namespace Collections; const char *pc1; const int nmax = 4; // const char * の任意の要素数のデータを動的にメモリを割り当てて使う const char **ppc1 = new const char *[nmax]; int n1 = 0; *(ppc1 + n1++) = "higasi"; *(ppc1 + n1++) = "nisi"; *(ppc1 + n1++) = "minami"; *(ppc1 + n1++) = "kita"; for (n1 = 0; n1 < nmax; ++n1) { pc1 = *(ppc1 + n1); Console::WriteLine(gcnew String(pc1)); } // 同様の手段で、Hashtable ^^ にメモリを動的に割り当てて任意の数 // のHashtable ^ を格納しようとするとコンパイルエラー ArrayList ^pArrayList1 = gcnew ArrayList(); for (n1 = 0; n1 < nmax; ++n1) { pArrayList1->Add(gcnew Hashtable()); } Hashtable ^pHashtable1, ^pHashtable2; Hashtable ^^ppHashtable1 = gcnew Hashtable ^[nmax]; // コンパイルエラー ppHashtable1 = gcnew Hashtable ^[nmax]; for (n1 = 0; n1 < nmax; ++n1) { pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); // ^(ppHashtable1 + n1) = pHashtable1; // コンパイルエラー // pHashtable2 = ^(ppHashtable1 + n1); // コンパイルエラー pHashtable1 = pHashtable2 = nullptr; }
- 279 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:26:26.71 ]
- このコンパイルエラーになる
System::Collections::Hashtable ^^ppHashtable1; って何とかならんかいな。多重ループで毎回dynamic_cast演算子使ってる と効率悪いだろうし。
- 280 名前:デフォルトの名無しさん mailto:sage [2011/05/26(木) 20:45:23.45 ]
- delete [] ppc1; を忘れとった。
それと、ppHashtable1 = gcnew Hashtable ^[nmax]; の行も 「// コンパイルエラー」を忘れ取った。
- 281 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 01:02:41.42 ]
- なんていうか、C++ のことは忘れた方が良いよ
- 282 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 03:30:26.71 ]
- /* cli::array を使ってもコンパイルエラーかいな、難しいもんだな */
cli::array<Hashtable^> ^ppHashtable1 = gcnew cli::array<Hashtable ^>[nmax]; IEnumerator ^pIEnumerator1; pArrayList1->GetEnumerator(); while (pIEnumerator1->MoveNext()) { pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); ^(ppHashtable1 + n1) = pHashtable1; pHashtable2 = ^(ppHashtable1 + n1); pHashtable1 = pHashtable2 = nullptr; } pIEnumerator1 = nullptr;
- 283 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 03:33:53.23 ]
- 間違えた
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]); の行は間違いで正しくは pHashtable1 = dynamic_cast<Hashtable ^>(pIEnumerator1->Current); だった。
- 284 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 04:48:38.33 ]
- using namespace System;
using namespace Collections; typedef Hashtable^ pHashtable; pHashtable pHashtable1 = gcnew Hashtable(); pHashtable pHashtable2 = gcnew Hashtable(); pHashtable pHashtable3 = gcnew Hashtable(); pHashtable *ppHashtable1; ppHashtable1 = &pHashtable1; // 可能 ppHashtable1 = nullptr; // ppHashtable1 = new pHashtable; // コンパイルエラー // delete ppHashtable1; // ppHashtable1 = nullptr; // const int nmax = 3; // ppHashtable1 = new pHashtable[nmax]; // delete [] ppHashtable1; new演算子が使えないならSTLのvectorなら何とかなるんだろうか。 でも、.NET Framework 2.0 SDKをダウンロードしたものでは標準ライブラリの ヘッダーファイルを#includeできないからアンマネージは使えない。
- 285 名前:276 mailto:sage [2011/05/27(金) 05:15:05.02 ]
- 中途半端な質問をしてすいませんでした。
>>277さんレスありがとうございました。 実はDirectXのBaseClassesをCLIで書いてるのですが GetSyncSource( [Out]IReferenceClock** pClock) ; (IReferenceClockはmanagedインターフェイスです) の部分をどう書けば良いかわからないです。 interior_ptrというのを使えと出てきますが、使い方がよくわかりません。 どう書けば良いか、どなたかご教示ください。
- 286 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 05:52:09.46 ]
- 静的配列も作成できないのか。これもエラーになるのか。
typedef System::Collections::Hashtable ^pHashtable; pHashtable pHashtable_hairetu[8]; マネージなクラスというのはどうしようもないな、困ったもんだ。
- 287 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 06:13:49.43 ]
- これもエラーになるのか。
やっぱりArrayListのままで甘んじるしかないようだな。 typedef System::Collections::Hashtable ^pHashtable; pHashtable *pHashtable1 = new pHashtable(); char *pc1 = reinterpret_cast<char *>(&pHashtable1); pc1 = reinterpret_cast<char *>(&pHashtable1); pHashtable pHashtable2 = *(reinterpret_cast<pHashtable *>(pc1)); CLIってぼろいな。
- 288 名前:デフォルトの名無しさん mailto:sage [2011/05/27(金) 23:37:00.98 ]
- マネージドクラスをネイティブクラスでラップしてから配列に入れるとか・・
C++/CLIは異なる言語が同居する2世代住宅言語だからなぁ。 #include <msclr/auto_gcroot.h> using namespace msclr; using namespace System; ref struct Foo { void Say() { Console::WriteLine("Hello World !"); } }; struct Bar { auto_gcroot<Foo^> foo; Bar() : foo(gcnew Foo()) {} }; int main(array<String^>^ args) { Bar bs[] = { Bar(), Bar(), Bar() }; for (int i=0; i<3; i++) bs[i].foo->Say(); }
- 289 名前:デフォルトの名無しさん mailto:sage [2011/05/28(土) 06:57:48.67 ]
- もうちょっと改良
#include <msclr/auto_gcroot.h> using namespace msclr; using namespace System; ref struct Foo { void Say() { Console::WriteLine("Hello World !"); } Foo() { Console::WriteLine("Foo Created"); } ~Foo() { Console::WriteLine("Foo Deleted"); } }; typedef auto_gcroot<Foo^> foo; int main(array<String^>^ args) { foo ag[] = { gcnew Foo(), gcnew Foo(), gcnew Foo() }; for (int i=0; i<3; i++) ag[i]->Say(); }
- 290 名前:276 mailto:sage [2011/05/28(土) 08:14:55.34 ]
- すいませんが再度質問さしていただきます
C++で class Foo{ --色々なメソッドやメンバ-- } である別のクラスのメソッドで void Piyo(Foo **hoge);というのがあり 渡す値がFoo* fooとして Piyo(&foo);とするとします。 これをCLIで実現するにはどのようにすればよいでしょうか どなたかご教示ください。
- 291 名前:デフォルトの名無しさん mailto:sage [2011/05/29(日) 00:06:15.74 ]
- 質問の意図が良く分からないけど、こんな感じの回答でいい?
using namespace System; ref class Foo {}; void Piyo(Foo^ %hoge) { hoge = gcnew Foo(); } int main(){ Foo^ f = nullptr; Piyo(f); Console::WriteLine(f); Foo f2; Piyo(%f2); Console::WriteLine(%f2); }
- 292 名前:デフォルトの名無しさん mailto:sage [2011/05/30(月) 12:26:48.80 ]
- .NET的には単にreturnで返すのが普通
どうしても参照渡しでやりたいなら void Piyo([System::Runtime::InteropServices::OutAttribute]Foo^ %hoge) こう書くのが.NET的には正解 クラスライブラリ作ってるんでなければ好きにすればいいけど
- 293 名前:276 mailto:sage [2011/06/01(水) 06:53:05.38 ]
- ありがとうございました。
たいへん参考になりました。
- 294 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 07:08:44.99 ]
- 教えてほしいんですが。
C,C++なら typedef union { int a; short b; double d; }Union; としたらUnionのサイズはsizeof(double)で Union u = 1;としたら、aに1が入ると思うんですが。 CLIで [StructLayout(LayoutKind::Explicit)] ref struct Union { [FieldOffset(?)]int a; [FieldOffset(?)]short b; [FieldOffset(?)]double d; }; と宣言したとして、?の部分には何の数値を入れればよいのでしょうか。 ヘルプを見ると「フィールドの物理的な位置を示します。」 と書かれているのですが、馬鹿なんでわかりません。 どなたか教えてください。
- 295 名前:デフォルトの名無しさん mailto:sage [2011/06/01(水) 21:57:49.20 ]
- C++/CLIにおけるジェネリックメソッドとテンプレート関数の違いを説明してくださいお願いします
- 296 名前:デフォルトの名無しさん mailto:sage [2011/06/03(金) 21:20:40.48 ]
- >>294
全部0 >>>295 テンプレートはただの言葉遊び ジェネリックは実行時に展開される DLLを作る場合、アセンブリのパブリックメンバにテンプレートを使ってはいけない
- 297 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 14:38:11.46 ]
- DirextXXinputのXInputGetState関数実行の格納先構造体
struct CONTROLER_STATE { XINPUT_STATE lastState; XINPUT_STATE state; DWORD dwResult; bool bLockVibration; XINPUT_VIBRATION vibration; }; をC#で受け取れるようにするにはどうすればいいんですか? ラップというのはどういう流れになるんですか?C++/CLIの本2冊読んだんですが解説コードからちょっとでも違うと全くわからないです 今のところの認識は、 structをそのままrefクラスに入れる>エラー大量 structの前にrefをつける>エラー大量 structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む>これなら当然できる ラップするとはどういうことなんでしょうか
- 298 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 15:04:33.10 ]
- 本二冊読んでvalue classが出てこないってありえるのか…?
- 299 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 15:58:05.32 ]
- どういうことですか?structの前にvalueをつけたら混合型はサポートされていませんというエラーがでます
- 300 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 17:21:15.05 ]
- そりゃ、ref や value をつけたら C++/CLI の管理だからな
通常の C++ のポインタとか持ってちゃ、混合型になるだろ
- 301 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 17:47:19.16 ]
- >>297
> structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む もちろんこれ 単純に書くだけなら直接C#でも大して手間の差はない
- 302 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:50:06.15 ]
- まじですか・・・
何かものすごい事を期待していました・・・
- 303 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:05:39.17 ]
- ってC++CLI使わなくても直接C#からXinput呼べるんですか?
どうやるんですか?
- 304 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 19:19:52.39 ]
- PInvoke で渡す構造体はC#側で用意してあげればいい
- 305 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 20:30:56.92 ]
- ありがとうございます
意味が全く分かりませんがPInvokeを調べてみます
- 306 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 20:31:25.24 ]
- XInputだったらXNA使えよ
- 307 名前:294 mailto:sage [2011/06/05(日) 04:08:13.35 ]
- >>296さん
ありがとうございました。
- 308 名前:294 mailto:sage [2011/06/07(火) 07:00:08.28 ]
- 再度質問さしていただきます
struct Hoge { union { DWORD dwGBitMask; DWORD dwUBitMask; DWORD dwZBitMask; DWORD dwBumpDvBitMask; struct { WORD wFlipMSTypes; WORD wBltMSTypes; } MultiSampleCaps; }; を ref struct Hoge { [StructLayout(LayoutKind::Explicit)] ref struct Union { [FieldOffset(0)]DWORD dwGBitMask; [FieldOffset(0)]DWORD dwUBitMask; [FieldOffset(0)]DWORD dwZBitMask; [FieldOffset(0)]DWORD dwBumpDvBitMask; とまでしたのですが、 struct MultiSampleCaps { WORD wFlipMSTypes; WORD wBltMSTypes; } の部分はどのように書けば良いのでしょうか、すいませんが教えてください。
- 309 名前:デフォルトの名無しさん mailto:sage [2011/06/07(火) 13:08:48.20 ]
- C++/CLIでわざわざマネージ型をP/Invokeに使う意味がわからん。
しかもよりによってなぜ今時DirectDrawなのか。 [StructLayout(LayoutKind::Sequential)]struct MultiSampleCaps { ここは同じでオフセットも不要 } /*Hogeの中*/[FieldOffset(4)]MultiSampleCaps MultiSampleCaps; .NET関連で調べ物するときのキーワードはC++/CLIじゃなくてC#ね。 情報量1000倍だから。アホらしいと思ったらC#へどうぞ。
- 310 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 20:55:56.86 ]
- VC++6.0のMFCなプログラムとVC++2008 Express Edition の.NETなプログラムで
プロセス間通信したいのですがどうすればいいですか。
- 311 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 22:03:55.29 ]
- WM_COPYDATAとか手軽でいいんじゃないか
- 312 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 22:35:11.37 ]
- もしくは共有メモリ。DDEでも動くぜ。
- 313 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 01:29:30.29 ]
- Graphicsをつかって1ドット書きたいのですが方法在りますか?
g->DarwLineだと2ドット最小?
- 314 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 06:08:56.94 ]
- FillRectangle
- 315 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 11:33:33.87 ]
- g->FillRectangle(Brushes::White, 0, 0, 1, 1);
できた! これからc++/cliするのとc#するのどっちがいいですか? GPGPU & direct Xやるとしたらc++の方向のほうがいい?
- 316 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 11:48:19.12 ]
- C++かC#の2択、C++/CLIは無い
- 317 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 12:42:08.36 ]
- ありがと、c++でいく
- 318 名前:デフォルトの名無しさん mailto:sage [2011/06/22(水) 13:44:22.22 ]
- GPGPUやDirectXならC++のみじゃね?
C#だとラッパー使うことになるし まぁ、C++/CLIだけは無いけど
- 319 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:09:33.25 ]
- C++/CLIを使おうとした初心者を思いとどまらせるスレになってるな
- 320 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:20:17.40 ]
- 進む先が地獄であることを知らない奴を追い返してやるのは当然だろう
- 321 名前:デフォルトの名無しさん mailto:sage [2011/06/23(木) 10:50:11.25 ]
- 何も知らないでVisualC++使ってWindowsアプリを作ろうと思うと、
自動的にC++/CLIになるからなー MSは鬼や
- 322 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 00:13:45.93 ]
- .NET FrameworkとC++を知ってればどうって事無い
- 323 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 00:20:14.62 ]
- 333
- 324 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 06:58:51.76 ]
- C++だけよりは、UI作るのは楽。
- 325 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 14:45:59.69 ]
- C++だとUI作り辛いし、C#だとネイティブじゃないから、
C++/CLIを使えば良いんじゃね?
- 326 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 14:52:10.85 ]
- こうしてC++/CLIを勘違いした犠牲がまたひとり・・・
- 327 名前:325 mailto:sage [2011/06/24(金) 15:04:02.96 ]
- と、思っていた時期が俺にもありましたってだけ
MSは頑張って理想通り完成させてくれよう むしろ諦めたっぽいがw
- 328 名前:デフォルトの名無しさん mailto:sage [2011/06/24(金) 23:04:13.78 ]
- 正直、むしろ起動速度や処理の即応性とかの GUI こそ C++ でやって、ロジックとかに
.net fw を使うための言語だと思うんだが
- 329 名前:デフォルトの名無しさん mailto:sage [2011/06/26(日) 11:43:42.77 ]
- C++とC#を使いこなしたうえで両方を使うために
C++/CLIというならいいけど、両者の利点を 生かすためにいきなりこれ、というのは無理w
- 330 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 09:26:00.43 ]
- >>328
起動速度や応答性を気にしないなら、C#で十分ってことだな
- 331 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 10:22:03.55 ]
- いや起動速度はC#と変わらないよ
ネイティブのDLLを読み込む分遅くなることはあっても速くなることはない それからアンマネージコードとマネージコードの境界を越えるオーバーヘッドは馬鹿にならないので 下手するとマネージコードだけの方が速い
- 332 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 10:36:48.76 ]
- さらにC++/CLIの存在価値が下がったw
本当にラッパー専用言語だな
- 333 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 12:13:07.27 ]
- C++にGCを入れろと言う要望への、一つの回答。
D言語も悪いところも見えてくる。
- 334 名前:デフォルトの名無しさん mailto:sage [2011/06/27(月) 15:06:24.73 ]
- ラッパーなら別にネイティブでいいんだよなぁ
- 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>% はできないので、配列 + オフセットの方が便利なのはその通りです。
|

|