C++/CLI について語ろうぜ Part2
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/03/12(日) 16:08:39であろうC++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。
前スレッドはこちら
(p)http://pc8.2ch.net/test/read.cgi/tech/1126450441/l50
姉妹スレ
くだすれC++/CLI(初心者用)
(p)http://pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
(p)http://pc8.2ch.net/test/read.cgi/tech/1139043535/l50
00021
2006/03/12(日) 16:10:10managed C++ → C++/CLI
(p)http://www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic
[特集] Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
(p)http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
Calling Native Functions from Managed Code
(p)http://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx
C++/Cli Essentials
(p)http://www.amazon.com/exec/obidos/tg/detail/-/0321174054/
Shared Source Cli Essentials
(p)http://www.amazon.co.jp/exec/obidos/ASIN/059600351X
C++/CLI設計者のblog
(p)http://blogs.msdn.com/hsutter/
(p)http://blogs.msdn.com/slippman/
STL.NET
(p)http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp
(p)http://www.dinkumware.com/
C++の今後
(p)http://216.55.183.63/pdc2005/slides/TLN309_Sutter.ppt
0003デフォルトの名無しさん
2006/03/12(日) 19:15:06その後いろいろとググってみたところ、あんまり使われていない
みたいですね。というか、このテンプレートって標準なんだろうか。
なんか裏技でそのうちひっそりと使えなくされてしまうなんて
ことないかちょっと不安。
00043
2006/03/12(日) 19:37:30auto_gcroot Class
http://msdn2.microsoft.com/en-us/library/ms177048.aspx
C++/CLI の規格というわけじゃなくて、VC++ の独自な
テンプレートクラスってことらしい。
逆に ref class の中に std::auto_ptr<NativeClass> みたいに
ネイティブクラスへのポインタを持たせられる?とか期待して
みたけど、それらしいのが見つからなかった。
ref class auto_handle なんてのが見つかったけど、
なんか意味あるんだろうか。普通のハンドルとどこが違うんだろう。
http://msdn2.microsoft.com/en-us/library/ms177066.aspx
00053
2006/03/12(日) 19:43:45http://weblogs.asp.net/kennykerr/archive/2005/07/12/419102.aspx
標準的なモノはなくて、 std::auto_ptr もどきの
ref struct AutoPtr を自前で作れ、ってことか。
ハッ!? もしかしてぜんぜん追っかけてなかったけど、
STL.NET には含まれてるのか??
#この程度の話題って、くだスレの方がいい?
#棲み分け具合がまだ把握できてない
0006デフォルトの名無しさん
2006/03/12(日) 19:47:50ここは、C++/CLIのスレだからな。
C#を勧める奴は、C#スレにいけ。
00073
2006/03/12(日) 19:56:27そりゃ System::Runtime::InteropServices::GCHandle を
ラップしてるわけだから .NET Framework とは縁があるけど。
なにか過剰反応してるんじゃないですか?
0008デフォルトの名無しさん
2006/03/12(日) 19:58:01前スレにいたアレなやつだ。
0009デフォルトの名無しさん
2006/03/12(日) 21:33:22auto_handleはauto_gcrootが参照クラスになった感じのようだ。
http://msdn2.microsoft.com/ja-jp/library/ms177069(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/ms177046(VS.80).aspx
生のハンドルと違ってスコープを抜けるときにデストラクタが呼ばれると言う利点は存在するようだ。
http://msdn2.microsoft.com/ja-jp/library/ms177068(VS.80).aspx
自動変数にすることに比べて利点がわからないけど。
00103
2006/03/12(日) 22:15:20使えないんだね。名前空間は msclr::auto_gcroot になってる。
一方 gcroot の方は #include <vcclr.h> で自動的に
#include <gcroot.h> されて使えるようになる。
名前空間はグローバルになってる。
う〜む、なんで扱いが違うんだろう。というか、gcroot が
グローバルな名前空間で宣言されているのが気持ち悪いな。
00113
2006/03/12(日) 22:18:24gcroot.h のコメントでは次のように書かれているし。
Use this class to declare gc "pointers" that live in the C++ heap.
Example:
struct StringList {
msclr::gcroot<String^> str;
StringList *next;
StringList(); // should have ctors and dtors
~StringList();
};
0012デフォルトの名無しさん
2006/03/12(日) 22:39:08直接<msclr\gcroot.h>をインクルードすればよい。
<vcclr.h>の中では<gcroot.h>がインクルードされていて、
<gcroot.h>が<msclr\gcroot.h>をインクルードしている。
<msclr\gcroot.h>は<gcroot.h>からインクルードされると名前空間を使わないようにされている。
直接ヘッダを見てみたらそうなっていた。
00133
2006/03/12(日) 22:56:32msclr\gcroot.h っていうディレクトリと名前空間 msclr から
考えて C++/CLI の標準仕様には gcroot, auto_gcroot は
入れないつもりなのかな。しかしこれが無いと困る場面も
あるんだけどなぁ。標準に入れてくれ>MSの人
0014デフォルトの名無しさん
2006/03/13(月) 00:32:58言語上の本道は混合型の導入になるから、正式仕様にはならないんじゃないかな
STL/CLIも混合型が使えるようになったら正直いらないし
0015デフォルトの名無しさん
2006/03/13(月) 01:35:07まじかよ
0016デフォルトの名無しさん
2006/03/13(月) 02:47:59ぱちっと切り替えられるほうがいいな。
逝ったりきたりすると遅くなりそう...
0017デフォルトの名無しさん
2006/03/13(月) 02:54:26マジなんだよ。C#とか言うヤツの気がしれんわ。
00183
2006/03/13(月) 04:27:03今の ECMA の規格じゃぁ mixed type はダメなんだったっけ。
Mixed type に言及してる文献はあるけど、標準化には入ってこないのかな。
http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf
http://www.gotw.ca/publications/C++CLIRationale.pdf
0019デフォルトの名無しさん
2006/03/13(月) 05:06:370020デフォルトの名無しさん
2006/03/13(月) 05:19:37あんたのほかにも代わりはいくらだっているんだから!!!
0021デフォルトの名無しさん
2006/03/13(月) 08:39:23だめっつーより、開発予定なんだろうけど
ttp://signe.japan.webmatrixhosting.net/ecma372/23_mixed_type.aspx
実際のスケジュールはどうなんだろうね。デリゲート・コンストラクタの方が先に実装
されそうだよ
0022デフォルトの名無しさん
2006/03/13(月) 08:55:22ttp://blogs.msdn.com/branbray/archive/2005/07/20/441099.aspx
0023デフォルトの名無しさん
2006/03/13(月) 09:11:100024デフォルトの名無しさん
2006/03/13(月) 09:37:421)マネージドなオブジェクトへのハンドルを
ネイティブクラスのメンバに
2)ネイティブなオブジェクトへのスマートポインタを
マネージドクラスのメンバに
の相互通行ができれば便利なんじゃないかな。
それは gcroot/auto_gcroot と >>5 の AutoPtr 的な
スマートポインタクラスを使えば VC++ 2005 でも
可能なんだけどできれば何か標準があったほうが安心だよなぁ。
0025デフォルトの名無しさん
2006/03/13(月) 09:50:54Winの良さが丸消えじゃん。
0026デフォルトの名無しさん
2006/03/13(月) 10:03:56抜け道をネイティブ側に用意して、マネージドを操作したり、本格的に混合型をサポート
してくれれば、使い方に夢が広がるんだけどねSTLだって、ネイティブとしてキャストして
保持させれば、混合型でマネージドを操作できるだろうし
ただ、相互のデータメンバを保持するだけなら、作りで回避できるからあまり混合型の
メリットは感じないなぁ
0027デフォルトの名無しさん
2006/03/13(月) 12:54:590028デフォルトの名無しさん
2006/03/13(月) 13:30:460029デフォルトの名無しさん
2006/03/13(月) 13:57:590030デフォルトの名無しさん
2006/03/13(月) 15:12:340031デフォルトの名無しさん
2006/03/13(月) 15:14:550032デフォルトの名無しさん
2006/03/13(月) 15:29:360033デフォルトの名無しさん
2006/03/13(月) 15:52:520034デフォルトの名無しさん
2006/03/13(月) 16:12:100035デフォルトの名無しさん
2006/03/13(月) 17:13:50TRONとかいろいろ環境はあるわけで、その中でWinだけ C++/CLIだけでは組めないよ。
0036デフォルトの名無しさん
2006/03/15(水) 20:32:140037デフォルトの名無しさん
2006/03/15(水) 20:42:36乙
0038デフォルトの名無しさん
2006/03/15(水) 20:49:330039デフォルトの名無しさん
2006/03/15(水) 21:15:380040デフォルトの名無しさん
2006/03/15(水) 23:27:13キチンと消せよ
0041デフォルトの名無しさん
2006/03/16(木) 22:50:30せめてWeb Archiveに残るまでは消さないで。
0042http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 20:53:45もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0043デフォルトの名無しさん
2006/03/24(金) 07:19:400044デフォルトの名無しさん
2006/03/24(金) 10:22:50でもネイティブなコードとマネージドなコードが
仲良くできるってビジョンを示した点ではC++/CLI
ってのはかなり意味があるんじゃないかな。
さらに Managed C++ から C++/CLI への移行劇を
見せ付けられて、その道程が険しいってこともわかったし。
0045デフォルトの名無しさん
2006/03/24(金) 12:17:380046デフォルトの名無しさん
2006/03/24(金) 12:30:23COM つかうのに言語仕様上の制約ってあったっけ?
0047デフォルトの名無しさん
2006/03/24(金) 12:41:13サーバにはATLがあればまあいいやと思うのだが。
0048デフォルトの名無しさん
2006/03/25(土) 00:47:410049デフォルトの名無しさん
2006/03/25(土) 09:01:080050デフォルトの名無しさん
2006/03/25(土) 11:57:40http://blogs.msdn.com/mswanson/archive/2006/03/23/559456.aspx
それに対するQ&Aのようなコメントは
http://blogs.msdn.com/briankel/archive/2006/03/20/555488.aspx
0051デフォルトの名無しさん
2006/03/26(日) 01:53:09http://msdn2.microsoft.com/ja-JP/library/ms177101(VS.80).aspx
0052デフォルトの名無しさん
2006/03/29(水) 07:48:03検索しても見つからないorz
解説されてそうなところ知ってる方いませんか?
0053デフォルトの名無しさん
2006/03/29(水) 07:52:220054デフォルトの名無しさん
2006/03/29(水) 08:13:34#using <microsoft.dirextx.direct3D.dll>
using namespace microsoft::directx::direct3d;
と入れても
アセンブリ 'microsoft.dirextx.direct3D.dll' がみつかりませんでした:
って言われちゃうんだよねorz何がいけないんだろう・・・
0055デフォルトの名無しさん
2006/03/29(水) 08:21:080057デフォルトの名無しさん
2006/04/07(金) 02:18:210058デフォルトの名無しさん
2006/04/07(金) 02:35:530059デフォルトの名無しさん
2006/04/07(金) 02:55:280060デフォルトの名無しさん
2006/04/07(金) 10:58:30/|[]::::::|_ / \/\\ /
./| ̄ ̄ ̄ ̄ //\ \/ \ // ___
| |:::「「「「「「 / \/\ /\\ /:::/ ./| |__
_..| |:::LLLLL//\ \/ \/\\/::::::/ / | ロ .|lllllllllllll
/ llllll| |:::「「「「 / \/\怒/\ .\/ ./::::::::/ / ./ .| |lllllllllllll
__ llllll| |:::LLL.//\ \/涛\/\ /::::::::/ | / .| ロ .|lllllllllllll
llllll| |:::「「「/ \/\熱 /\ \/ /::::::::/ | ||/ ..| |lllllllllllll
llllll| |:::LL//\ \/ \/\ ./::::::::/ .| ||/ ..|
| |:::「./ .\/\ 湯/\ \/ /::::::::/⌒ヽ、 .| ||/ ..|
| |:::l//\ \/ \/\_, -― 、 ''"⌒ヽ,_
(⌒ヽ、_,ノ⌒Y" Y .....⌒) どーーーーーん
(⌒ヽー゙ ....::( ..::....... .__人.....::::::::::::::::::::
_ノ⌒ヽ Y⌒ヽ;;:::::"'::::::::::::::::::::::::::::: ___
___( ゙ ....:::..... Y" ∧_∧ /
// ll__ヽ_::::::::::::::::::::::::::::::ヽ....( ´Д`)<逃げろ逃げろ!
「 ヽO≡≡O:::::::::::::::::::::::::::::::::::/ つ _つ \____
゙u─―u-――-u 人
0061デフォルトの名無しさん
2006/04/09(日) 19:51:41って糞じゃない?
仮想関数使えないじゃん。
0062デフォルトの名無しさん
2006/04/10(月) 00:35:310063デフォルトの名無しさん
2006/04/11(火) 10:09:41Managed C++ → C++/CLI
くらいしか認識してなかった。
0064デフォルトの名無しさん
2006/04/15(土) 12:35:08マダー?チン、チン。
//GCCもCLI対応するんだろうか?
0065デフォルトの名無しさん
2006/04/15(土) 12:39:11C++ は C++ でそれなりに Objective だからな
0066デフォルトの名無しさん
2006/04/15(土) 12:44:48Objective-C 言語
+
C++ 言語
||
Objective-C++
0067デフォルトの名無しさん
2006/04/15(土) 15:00:18ここらを見ると、いろんな苦労が共有できる気がするな
0068デフォルトの名無しさん
2006/04/16(日) 15:02:33Sutterも嫌々やってるんですよ
0069デフォルトの名無しさん
2006/04/22(土) 01:05:39Visual Studio2005ですが、MFCのプロジェクトで、
Windowsフォームデザイナで貼り付けられるような
コントロールは使用できるのでしょうか?
またWindowsフォームデザイナで開発した場合は、
.NetFrameworkが必要となり、Windows2000では動作できないなどありますか?
0070デフォルトの名無しさん
2006/04/22(土) 01:23:131.使用できなくはないかもしれないがそれなら正攻法で使ったほうが多分楽
2..NET Framewokは98でも動く。一部2kで使えて98で使えない機能もあるがそれはたいていSDKに依存する問題。
0071デフォルトの名無しさん
2006/04/22(土) 01:23:210072デフォルトの名無しさん
2006/04/22(土) 01:25:33正攻法とはどのような方法でしょうか?
また、.NETFrameworkがインストールされていないと
動作しないのですよね?
※すみません。.NETFramework初体験です。
0073デフォルトの名無しさん
2006/04/22(土) 01:44:20>正攻法
SDKを使う方法。
>.NE(r
もちろん動作しない。OSがインストールされていないようなもんだ。
0074デフォルトの名無しさん
2006/04/22(土) 01:49:18SDKはどのように使えばよいのでしょうか?
お手数ですが、簡単なサンプルとかってありませんか?
もう少し詳細を教えていただけるとたすかります
何しろMFCの標準コントロールは古臭くて。。
0075デフォルトの名無しさん
2006/04/22(土) 01:53:10Win32API質問箱 Build42
http://pc8.2ch.net/test/read.cgi/tech/1144962549/
0076デフォルトの名無しさん
2006/04/22(土) 08:53:14CWinFormsControl を使え
ttp://msdn2.microsoft.com/ja-jp/library/8z4d86s2(VS.80).aspx
0077デフォルトの名無しさん
2006/04/22(土) 08:56:000078デフォルトの名無しさん
2006/04/22(土) 10:15:560079デフォルトの名無しさん
2006/04/22(土) 17:27:33ご名答!!
そもそもVisualStudioの統合環境のツールバーや
メニューバーはどうやってるんだろうと。。
0080デフォルトの名無しさん
2006/04/22(土) 17:34:21混ぜることそのものが目的になってしまってる、みたいな。
0081デフォルトの名無しさん
2006/04/22(土) 17:48:480082デフォルトの名無しさん
2006/04/22(土) 18:24:55さすがに、ユーザーに .net Framework 2.0 を要求できなくてやってないけど
0083デフォルトの名無しさん
2006/04/23(日) 12:49:49コントロールは単なるウィンドウを子ウィンドウにしてるだけ。
って言うのは解ってる?
0084 ◆GjPgyWFPCM
2006/04/23(日) 13:24:210085デフォルトの名無しさん
2006/04/23(日) 18:16:210086デフォルトの名無しさん
2006/04/23(日) 18:53:21災いと引き換えの美しさなんぞいらん。
0087デフォルトの名無しさん
2006/04/23(日) 19:37:17むしろこれからはそれを意識したマクロ定義を心がけるべき?
0088デフォルトの名無しさん
2006/04/23(日) 19:46:140089デフォルトの名無しさん
2006/04/24(月) 01:40:490090デフォルトの名無しさん
2006/04/24(月) 09:08:11美=C++
0091デフォルトの名無しさん
2006/04/24(月) 19:36:55C++ だって C とは完全互換性がなくて非互換性の項目作ってるのに、C++/CLI は完全互換じゃ
ないから C++ の名前を使うな、なんて、馬鹿馬鹿しい
0092デフォルトの名無しさん
2006/04/24(月) 19:51:220094デフォルトの名無しさん
2006/04/25(火) 01:16:21んなーことはない。互換のない箇所があまりにも C++ を越えてるからな。
誰もが、「C++であれは不味いよ」という実装。
C++の名前は使ってもいいが、正直、ISOにはなって欲しくない。
0095デフォルトの名無しさん
2006/04/25(火) 05:32:35MSのサイトの記述にけちつけて、こいつら営利企業に何求めてるんだ、とか思っちゃったけどな
0096デフォルトの名無しさん
2006/04/25(火) 08:02:46名前に C++ が入ってるのがまずいダロってことになってんの?
まぁ確かにもう少し検索エンジンフレンドリーな名前でもいいかもって気はする。
0097デフォルトの名無しさん
2006/04/25(火) 09:42:19Windowsのネーミングからはじまり、
J++、J#、managed C++、STL.NETとか、
一般的なものを汚し杉。
0098デフォルトの名無しさん
2006/04/25(火) 09:59:29Bjarne Stroustrup のFAQになってるところがワラタ
ttp://www.research.att.com/~bs/bs_faq.html#CppCLI
ISO UK が強硬に反対していて、その下に ECMA からの回答書も公開されている
ECMA じゃ C++/CLI と C++0x にどうやって巻き込まれないようにするかの調査も
始めてるってさ
0099デフォルトの名無しさん
2006/04/25(火) 10:06:02ねえんだよ、って答えてるとこが笑える
0100デフォルトの名無しさん
2006/04/25(火) 10:43:04VC++が吐き出すMFCコードからして何語?って感じだった。
ユーザーに変なもん使わせながらM$は別のクラスライブラリ使ってるらしいし。
0101デフォルトの名無しさん
2006/04/25(火) 15:28:250102デフォルトの名無しさん
2006/04/25(火) 15:52:08C#の地位を着々と上げていく作戦なんだな。
0103デフォルトの名無しさん
2006/04/25(火) 17:10:510104デフォルトの名無しさん
2006/04/25(火) 17:41:48ISOにする前に、Mac用の C++/CLIでも出してから言ってくれ、という気分だ。
>>100
おまえさん、そんなこと言ったら、COBAとかCOBA真似 IIS C++ソースなんて見たら目がつぶれるぞ。
MFCなんかは、独自仕様として実装されてるからいいよ。アンダーバー定義でその世界だけで収まってるからな。
しかし、今回の C++/CLI での文字列の扱いはそんなレベルじゃないだろ。
C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。
C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。
0105100
2006/04/25(火) 19:08:19見たい。URL教えれ。
>C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。
なるほど、ISO化が嫌われてるのね。
>C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。
知らなかった。KWSK
0106デフォルトの名無しさん
2006/04/25(火) 19:50:18>見たい。URL教えれ。
断る。
comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。
後は自分で探せ。
>なるほど、ISO化が嫌われてるのね。
C++という名前を使うな、という気持ちも理解できるが…、ISOにする必要性は全くない。
MS以外誰も望んでいないからな。
>知らなかった。KWSK
C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。
Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。
そのとき、名言。「すみません。Perl風に作り替えます。」
MSは既に梶を切ってるのに、古い方針の独善的な仕様でISO化してどうするよ。
0107100
2006/04/25(火) 20:01:59おもしろい情報一杯持ってるね。そういう情報好き。
>comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。
こういうの面白い。さらにCOMのトンデモ文法で作ったM$のアプリサーバなんて装飾子があったら爆笑。
>C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。
方向転換したのはゲイツ氏?
Longhorn@マネージド→Vistaの方向転換のこと?
>Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。
あの、WinFXスレでマンセーされてたシェル言語?スゲ
0108デフォルトの名無しさん
2006/04/25(火) 21:23:310109デフォルトの名無しさん
2006/04/26(水) 00:58:33だから、corbaを元にしたと言ってるのによ。おかげでIISとC++で組むのは無駄に知識が必要だったりするわけだが。
DON BOXとかsoapに絡んでるから余計に…。
.Netで楽にはなったらしいが。
方向転換したのはゲイツメールじゃない。10年前か!?はゲイツだったけどね。
たしか、そんなに古株じゃないヘッドハンティングされてきた人物だったはず。
方針転換はな、いま口癖のように言ってる Live って奴だ。MSは毎日かかさず Live関連の新機能を発表してるって知ってたか?
まあ、何でもかんでも Live と言ってるって事だけどさ。
とにかく、4/1にエイプリルフールでLiveネタででたジョークでは。shellで ls うつと、存在するファイル名に対応した広告が
ファイル一覧と共に表示される。という奴だった。
マネージド -> Vista なんていう程度の石頭じゃ、これからの10年食っていけないぞ?
0110デフォルトの名無しさん
2006/04/26(水) 01:10:43俺はなんだかんだ言っても最後は.NETに落ち着くと思うけどな。
エイプリルフールネタはおもしろい。
0111デフォルトの名無しさん
2006/04/26(水) 08:49:41いや、M$がドトネトに決定するかもしれんが、落ち着いたことは過去一度も無いお。
DDE(Win3.1or3.0 1993)
↓
NET DDE (Win3.1 1994)
↓
埋め込みしたいなぁ...
↓
OLE1.0(DDE使用)
↓
OLE2.0=COM ただし目的はインプレースドキュメント。しかしその背景には本質としてバイナリオブジェクト標準あんどオブジェクト通信の思想あり。この辺で名慮or迷著 InsideOLEあんどIsideOLE2。死者多数。
部品としてVB用のVBX (VB2.0からVB4.0 1995あたり)
↓
COMを使ったOCX (1996あたり)結局コンポーネントビジネスはやんなかったな...
ゲイツがインターネットに熱上げあんどJAVA Appletはやる (1995)
↓
COMつかってActiveX(1996)
だんだんオブジェクトはやってくる。 (UMLなど1997)オブジェクトもでるとしてCOMの宣伝開始 DCOMなどCORBAとがっぷり。この辺でMTSではじめ
↓
マーケティングてきなWindowsDNA 。MTS2.0それなりに使えそう。つか使った。DCOM糞。(1999)
↓
COM+ (Win2000、2000)In-MemoryDBどこいったゴラァ
COM Runtimeの情報漏れ始め (2000〜)
↓
セキュリティ→ファイアーウォールのためCOM全滅。しばらくしてから.NETとしてCOMじゃないものに...
↓
.NET流行らず(〜2006)
↓
WinFX完成(2007)
↓
オブジェクトベースプログラミングにより、OSは関数コールに戻る(2008)
WinFX下位互換へ
0112デフォルトの名無しさん
2006/04/26(水) 13:23:510113デフォルトの名無しさん
2006/04/28(金) 11:50:510114デフォルトの名無しさん
2006/05/11(木) 19:07:00ややこしいっつーの
0115デフォルトの名無しさん
2006/05/11(木) 20:16:13ボタンを設置してダブルクリックして、イベントハンドラのスケルトンができるまでが明らかに遅い。
0116デフォルトの名無しさん
2006/05/11(木) 22:07:380117デフォルトの名無しさん
2006/05/12(金) 22:24:270118デフォルトの名無しさん
2006/05/12(金) 22:45:13……ネイティブとCLIの縮図のようだ
0119デフォルトの名無しさん
2006/05/15(月) 20:37:12System::Runtime::InteropServices::OutAttributeに変えてもいいの?
0120ヽ(゚∀。)ノうぇね ◆xOFicusMP.
2006/05/19(金) 23:03:00消す必要はなくなったから、安心してくり
0121デフォルトの名無しさん
2006/05/20(土) 07:40:11おお、めちゃ乙。
0122デフォルトの名無しさん
2006/05/20(土) 11:58:590123デフォルトの名無しさん
2006/05/30(火) 14:20:070124デフォルトの名無しさん
2006/06/02(金) 13:29:200125デフォルトの名無しさん
2006/06/02(金) 14:05:470126デフォルトの名無しさん
2006/06/02(金) 14:12:41出てもJavaの新しいcollectionみたいな仕様のクラスライブラリで、
method等の名前がSTL風になっているだけだろうけど。
STLはC++の言語仕様にかなり依存しているから。
なんにしてもそれどころじゃないみたい。
http://blogs.msdn.com/nikolad/archive/2006/02/07/527193.aspx
0127126
2006/06/12(月) 08:21:100128デフォルトの名無しさん
2006/06/18(日) 20:33:44正直、STL/CLI は C++/CLI にとって不要な要素だと思ってる
作るだけ、無駄。だから、あまり力を入れていないのは正解じゃないかな
0129デフォルトの名無しさん
2006/06/18(日) 21:06:52ManagedなobjectをSTLで扱う時のTIPSでいいかな。
0130デフォルトの名無しさん
2006/06/18(日) 23:35:16それらの要素をどう C++/CLI に持ち込むかの方が重要だと思う
0131デフォルトの名無しさん
2006/06/19(月) 16:02:04最初はそのイテレータも参照型にしたんだけど、Visual C++付属の<algorithm>の関数は、
デバッグ用か何かの仕掛けがあって、ネイティブ型しか受け付けてくれなかった。
結局そのイテレータに対するネイティブ型のラッパを作ってやったんだ。
逆に言えばマネージ型のイテレータがVC++付属の標準ライブラリで使えれば、
STL/CLIなんてなくても自分たちで勝手にイテレータを作ったりして使うことは容易だと思う。
0132デフォルトの名無しさん
2006/06/25(日) 01:03:260133デフォルトの名無しさん
2006/06/27(火) 10:39:540134デフォルトの名無しさん
2006/07/03(月) 22:36:31ttp://www.amazon.co.jp/gp/product/4797336277/249-7078532-9380326?v=glance&n=465392
を買った人いる? どんな感じ?
0135デフォルトの名無しさん
2006/07/04(火) 07:53:180136デフォルトの名無しさん
2006/07/04(火) 22:51:530137デフォルトの名無しさん
2006/07/07(金) 00:43:47本の後半で、Visual Studioのダイアログでの指定方法とか書かれてる。
つーか、最近、ソフトバンククリエイティブの本はタイトル詐欺が多すぎ。
噂の真相うんちゃらかんちゃらも、タイトル買いしたら内容は単なる手記だったしよ。
0138デフォルトの名無しさん
2006/07/08(土) 12:51:240139デフォルトの名無しさん
2006/07/08(土) 13:18:39C++/CLI に踏み込んだ記述は少なく、既存の VC++ の開発者向けに .net を使うための
チップス集といった感じだった
記述するべき知識が広範囲すぎて、なるべくいろいろ網羅しようとがんばっているのは
感じたが、前提知識があるものと記述されている部分が多くて、これはさらりと書かれている
部分がわからないのでは、と疑問に感じた
0140デフォルトの名無しさん
2006/07/08(土) 13:43:06> 最近
笑うところ?
0141デフォルトの名無しさん
2006/07/09(日) 13:17:190142デフォルトの名無しさん
2006/07/23(日) 00:28:010143デフォルトの名無しさん
2006/07/23(日) 02:07:360144デフォルトの名無しさん
2006/07/24(月) 05:00:40みようと思って買ってみたよ。
ダイヤモンド継承の問題点とかでてきてちょっとなえるが、まあ
もうちょっと読んでみるよ。
Win32と.NETが同時に使えるのはツールとかちょっと作るのには
便利なのかなあくらいに思ってるよ。製品開発に使えるとはまだ
ちょっと思えないけど。。
0145デフォルトの名無しさん
2006/07/27(木) 04:12:28去年、C#の案件をやったんだが「ああ、あの時C++/CLIが出てればなぁ」とは思う。
0146デフォルトの名無しさん
2006/07/31(月) 20:51:05ttp://www.amazon.com/gp/product/1590596404/ref=sr_11_1/104-8510614-7138345?ie=UTF8
0147デフォルトの名無しさん
2006/08/01(火) 10:00:59C++ > (壁) > C丼
ということ?
0148デフォルトの名無しさん
2006/08/01(火) 19:12:10ヒント:DllImport
今は逆にC++(ただしネイティブ)の案件やってるが「これがC#だったらもっと楽なのに」と思いながらコード書いてる。
0149デフォルトの名無しさん
2006/08/01(火) 20:31:57ググっても、ひっかかりもしねぇっす。
0150デフォルトの名無しさん
2006/08/09(水) 16:31:51VC++EE使ってます。
system以下のライブラリを網羅したページってないですか?
C#やVBで解説されててもかまわないのでどこかご存知ありませんか?
0151デフォルトの名無しさん
2006/08/09(水) 16:50:500152デフォルトの名無しさん
2006/08/09(水) 17:51:19なんでMFCなのかわからんけど、見つかってよかった。
ttp://msdn2.microsoft.com/ja-jp/library/ms306608.aspx
0153デフォルトの名無しさん
2006/08/10(木) 00:00:25>MSDN ライブラリ > .NET 開発 > .NET Framework SDK > MFC リファレンス
うは、ほんとだwww
0154ヽ(゚∀。)ノうぇね ◆xOFicusMP.
2006/08/26(土) 23:01:19引っ越したので、こちらを参照してください
ECMA-372仕様書
ttp://mdjowbnb.sv05.fsdotnet.net/ecma372/StartingState.aspx
0155デフォルトの名無しさん
2006/08/27(日) 17:51:15乙です。お世話になってます。
0156デフォルトの名無しさん
2006/09/05(火) 18:17:53CLR Profiler いつも落ちるんだけど。
0157デフォルトの名無しさん
2006/09/08(金) 00:40:070158デフォルトの名無しさん
2006/09/08(金) 11:33:09『〜〜用にネイティブ コードの生成が発生します』
と自動的に適用される場合と、
『この関数はマネージとしてコンパイルできません。#pragma をアンマネージで使用してください』
と明示しなければエラーになる場合があるんだけど、
両者の違いって分る人居ますか?
0159デフォルトの名無しさん
2006/09/14(木) 00:40:150160デフォルトの名無しさん
2006/09/14(木) 01:05:14くわしく。
0161デフォルトの名無しさん
2006/09/14(木) 08:25:11ttp://blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx
0162デフォルトの名無しさん
2006/09/14(木) 08:27:22http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42926
0163デフォルトの名無しさん
2006/09/14(木) 08:31:29http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=43913&scopelist=PROGRAMME
0164デフォルトの名無しさん
2006/09/14(木) 08:52:400165デフォルトの名無しさん
2006/09/14(木) 09:03:55仕様が汚すぎる。上位互換じゃないのも(C++を名乗るには)問題。
0166デフォルトの名無しさん
2006/09/14(木) 13:57:570167デフォルトの名無しさん
2006/09/15(金) 01:56:050168デフォルトの名無しさん
2006/09/15(金) 02:18:450169デフォルトの名無しさん
2006/09/15(金) 04:19:04C#をアンマネージ拡張して欲しいと思うときがある。
まあ、DllImportすればいいんだけど。
0170デフォルトの名無しさん
2006/09/16(土) 01:34:15でもMSが持ってるNativeMethods.cs公開してくれたら、それでいい気がする。
0171デフォルトの名無しさん
2006/09/16(土) 01:44:50PInvoke.net が不要になっちゃう
0172デフォルトの名無しさん
2006/09/16(土) 02:03:510173デフォルトの名無しさん
2006/11/18(土) 10:46:540174デフォルトの名無しさん
2006/11/19(日) 03:51:20@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
これとか見ると随分興奮しているけど
0175デフォルトの名無しさん
2006/11/19(日) 12:02:38ヒント: 川俣 晶
0176デフォルトの名無しさん
2006/11/20(月) 16:15:430177デフォルトの名無しさん
2006/11/20(月) 19:51:22そうなんかぁ〜?
0178デフォルトの名無しさん
2006/12/03(日) 02:17:55>>145
(言語熟練度はプロジェクト要員の平均レベルでC++/C#ができるものとして)
Manageなコード中に簡単にネイティブっぽいものが書けちゃうと逆にメンテし辛いものにならないのかな。
ところで、C++/CLIってC#3.0みたいな機能って予定されてるの?
0179デフォルトの名無しさん
2006/12/03(日) 03:11:41XP用のポーティングをしたり、
いろいろ便利なケースは想定できるでしょ?
どこまで厚くサポートされるかは分からない。
STL.NETみたいに辞めちゃったプロジェクトもあるし、
C++/CLIの人員削減はあり得ることだと思う。
0180デフォルトの名無しさん
2006/12/03(日) 08:56:56OrcasのCTPにSTL/CLRが入っている。
どんなもんかまだ俺は試していないけど。
0181デフォルトの名無しさん
2006/12/04(月) 15:49:06String* str;
str = System::String::Concat( str, str1 );
str = System::String::Concat( str, '\0' );
str = System::String::Concat( str, str2 );
str = System::String::Concat( str, '\0' );
str = System::String::Concat( str, str3 );
str = System::String::Concat( str, '\0' );
str = System::String::Concat( str, '\0' );
}
func("aaa","bbb","ccc");
上記で、"aaa\0bbb\0ccc\0\0"という値を期待していたのですが、\0が消えて"aaabbbccc"となってしまいます。
助けてください
0182181
2006/12/04(月) 15:57:05string ret = "";
ret = System.String.Concat( ret, a );
ret = System.String.Concat( ret, '\0' );
ret = System.String.Concat( ret, b );
ret = System.String.Concat( ret, '\0' );
ret = System.String.Concat( ret, c );
ret = System.String.Concat( ret, '\0' );
ret = System.String.Concat( ret, '\0' );
}
func("aaa","bbb","ccc");
あと、C#で上記のようにやった場合は期待通りの値になっているようです。
本当はC#で全部やろうと思ったのですが、C#でWin32APIの呼び出しが解らなくてC++/CLI使ってみました。
そのAPIの引数が、"aaa\0bbb\0ccc\0\0"という形式で指定しろとなっているのですが、
今度は引数が生成できなくて填ってます。
0183デフォルトの名無しさん
2006/12/04(月) 16:07:42やったこと無いんだが、
見た感じ、strcatと同じ動作に見えるね。
オペレータの+ってないの?
0184デフォルトの名無しさん
2006/12/04(月) 16:18:11ret += a;
今、上記のようにやってみたのですが、下記のエラーになってしまいました。。。
error C2297: '+=' : 無効な右オペランドです。
error C2845: '+=' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。
0185デフォルトの名無しさん
2006/12/04(月) 16:47:32で、これ通ったよ。
using namespace System;
int main(array<System::String ^> ^args)
{
String^ A="Hello";
String^ B="World";
String^ C="";
C=A+B;
Console::WriteLine(C->ToCharArray());
return 0;
}
と、ここまで書いて見落とし発見・・・。
なんだ、普通のstd::stringか?
ちょっとまってて。
0186181
2006/12/04(月) 17:03:45下記のようにして何とか動きました。
voidfunc(String*str1,String*str2,String*str3){
LPTSTRpArg;
LPTSTRpStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer();
LPTSTRpStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();;
LPTSTRpStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();;
intlen=0;
len+=lstrlen(pStr1);
len+=1;
len+=lstrlen(pStr2);
len+=1;
len+=lstrlen(pStr3);
len+=1;
len+=1;
pArg=(LPTSTR)malloc(len);
len=0;
memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],"\0",1);len+=1;
func(pArg);
free(pArg);
}
0187デフォルトの名無しさん
2006/12/04(月) 17:04:51voidfunc(String*str1,String*str2,String*str3){
LPTSTR pArg;
LPTSTR pStr1=(LPTSTR)Marshal::StringToHGlobalAnsi(str1).ToPointer();
LPTSTR pStr2=(LPTSTR)Marshal::StringToHGlobalAnsi(str2).ToPointer();;
LPTSTR pStr3=(LPTSTR)Marshal::StringToHGlobalAnsi(str3).ToPointer();;
int len=0;
len+=lstrlen(pStr1);
len+=1;
len+=lstrlen(pStr2);
len+=1;
len+=lstrlen(pStr3);
len+=1;
len+=1;
pArg=(LPTSTR)malloc(len);
len=0;
memcpy(&pArg[len],pStr1,lstrlen(pStr1));len+=lstrlen(pStr1);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],pStr2,lstrlen(pStr2));len+=lstrlen(pStr2);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],pStr3,lstrlen(pStr3));len+=lstrlen(pStr3);
memcpy(&pArg[len],"\0",1);len+=1;
memcpy(&pArg[len],"\0",1);len+=1;
func(pArg);
free(pArg);
}
0188デフォルトの名無しさん
2006/12/04(月) 17:10:58とりあえず、こうすると.NET 2003の/clrと2005の/clr:OldSyntaxで動く(実行するとaaaしか表示されない)。
#using <mscorlib.dll>
#include <vcclr.h>
#include <windows.h>
#pragma comment(lib, "user32.lib")
void func (System::String* str1, System::String* str2, System::String* str3) {
using System::String;
String* str;
str = String::Concat(str, str1);
str = String::Concat(str, S"\0");
str = String::Concat(str, str2);
str = String::Concat(str, S"\0");
str = String::Concat(str, str3);
str = String::Concat(str, S"\0");
str = String::Concat(str, S"\0");
const wchar_t __pin* p = PtrToStringChars(str);
::MessageBoxW(0, p, L"", MB_OK);
}
int main()
{
func("aaa","bbb","ccc");
}
まあAPIの相手をするならchar配列のほうが楽。
>>187 せめてsprintf使え。あとLPTSTRをマルチバイト文字列に使うな。
0189デフォルトの名無しさん
2006/12/04(月) 17:11:030190デフォルトの名無しさん
2006/12/04(月) 17:14:530191188
2006/12/04(月) 17:22:28動きました!
0192181
2006/12/04(月) 17:22:510193デフォルトの名無しさん
2006/12/04(月) 17:30:11方法は幾通りもある。あんマネージ文字列への変換はCString (ATL/MFC 7以上)使うのと結構楽。
TCHARも適当にやってくれるし。
#using <mscorlib.dll>
#include <atlstr.h>
#include <windows.h>
#pragma comment(lib, "user32.lib")
void func (System::String* str1, System::String* str2, System::String* str3)
{
using ATL::CString;
CString cs1(str1), cs2(str2), cs3(str3);
CString arg;
arg.Format(TEXT("%s\0%s\0%s\0"), static_cast<PCSTR>(cs1), static_cast<PCSTR>(cs2), static_cast<PCSTR>(cs3));
::MessageBox(0, arg, TEXT(""), MB_OK);
}
0194185
2006/12/04(月) 17:37:49ほかの方法があったか。
色々考え出したら止まらなくって困ってたとこだった。
役に立てなくてすまない。
#include <string>
#include <iostream>
int main(array<System::String ^> ^args)
{
std::string A="BMP",B="Wav";
std::string C="";
C=A+'\0'+B+'\0'+'\0';
std::cout<<C<<std::endl;
//std::cout<<C.c_str()<<std::endl;
return 0;
}
こういう感じの想定してた。@VC2005EE
0195デフォルトの名無しさん
2006/12/04(月) 17:44:41色々勉強になりました
0196デフォルトの名無しさん
2006/12/04(月) 17:56:57std::string func(String^ str1, String^ str2, String^ str3)
{
IntPtr ptr1 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str1);
IntPtr ptr2 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str2);
IntPtr ptr3 = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str3);
std::string result = std::string()
+ reinterpret_cast<const char *>(ptr1.ToPointer()) + '\0'
+ reinterpret_cast<const char *>(ptr2.ToPointer()) + '\0'
+ reinterpret_cast<const char *>(ptr3.ToPointer()) + '\0'
+ '\0';
System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr1);
System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr2);
System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr3);
return result;
}
0197デフォルトの名無しさん
2006/12/04(月) 18:23:57せめてStringBuilder使え。
0198デフォルトの名無しさん
2006/12/04(月) 23:45:050199デフォルトの名無しさん
2006/12/04(月) 23:49:360200デフォルトの名無しさん
2006/12/05(火) 00:23:34>>193で出たものの、>>195で却下された。
0201デフォルトの名無しさん
2006/12/05(火) 11:03:39色んな選択肢を使える懐の深さが C++/CLI の一つの魅力なわけだし、
最速/高効率よりも、本人が理解/吸収しやすい手法を取るのが最良だと思う。
0202デフォルトの名無しさん
2006/12/05(火) 16:10:02言いたいことはわかるが、言葉の選択を誤ってるね。
0203デフォルトの名無しさん
2007/01/03(水) 23:36:10PASS: CLI
0204デフォルトの名無しさん
2007/01/06(土) 00:27:15これってなんだったの?
0205デフォルトの名無しさん
2007/01/06(土) 00:31:070206デフォルトの名無しさん
2007/02/24(土) 01:07:330207デフォルトの名無しさん
2007/02/24(土) 18:54:270208デフォルトの名無しさん
2007/03/01(木) 04:46:460209デフォルトの名無しさん
2007/03/01(木) 20:21:140210デフォルトの名無しさん
2007/03/01(木) 21:27:14どうせUIはC++じゃなくてXMLで書くんだし
0211デフォルトの名無しさん
2007/03/01(木) 21:27:510212デフォルトの名無しさん
2007/03/03(土) 19:31:33constでいいじゃん。
0213デフォルトの名無しさん
2007/03/04(日) 16:28:43よく知らんが、名前の通りリテラルの為なんじゃないのか?
0214デフォルトの名無しさん
2007/03/04(日) 17:59:550215デフォルトの名無しさん
2007/03/04(日) 22:20:440216デフォルトの名無しさん
2007/03/06(火) 23:10:16出来るだけ違う名前を付けるようにしたとかそんなのじゃないの?
参照周りとかgcnewとか見ててもそういう思想に見えるんだが
0217デフォルトの名無しさん
2007/04/09(月) 19:24:28C++/CLIで、既存のネイティブ関数をラップして、
public ref class Test
{
public :
static void show( System::Int32^ x ) {}
static void show( System::Double^ x ) {}
};
というようなクラスを作って、C#から
static void main()
{
Test.show( 1 );
Test.show( 2.0 );
}
という風にオーバーロードして呼び出たんですが、
次のメソッドまたはプロパティ間で呼び出しが不適切です: 'Test.show(System.ValueType)' と 'Test.show(System.ValueType)'
というエラーがでて、コンパイルできませんでした。
エラーをみると、引数のSystem::Int32とSystem::DoubleがSystem::ValueTypeになってる
っぽいんですが、正しくラップするにはどういう風に書くんでしょうか?
0218デフォルトの名無しさん
2007/04/09(月) 19:34:180219デフォルトの名無しさん
2007/04/09(月) 20:42:10そういうこと。値型はハンドルを使わず生の型を使え。
C++/CLIで値型へのハンドルはボックス化の扱い。
IL上の引数・戻り値は、System.ValueType(これ自体は参照型)となる。
http://vene.wankuma.com/ecma372/33_cli_library.aspx#SS.33.1.5.1
基の型の情報も記録しているので、IL上は多重定義可能で、
C++/CLIでもコンパイラがそれを認識して多重定義解決を行う。
しかしC#コンパイラはそれを知らないので、
単にSystem.ValueTypeを1つ引数に取るメソッドshowが2つあるとしか認識できない。
0221デフォルトの名無しさん
2007/05/09(水) 18:06:56StreamReader^ FormDataReader = gcnew StreamReader("FormData.txt", System::Text::Encoding::GetEncoding("shift-jis"));
String^ locationX = MainFormDataReader->ReadLine();
String^ locationY = MainFormDataReader->ReadLine();
String^ SizeW = MainFormDataReader->ReadLine();
String^ SizeH = MainFormDataReader->ReadLine();
locationX = locationX->Substring(locationX->IndexOf("=") + 1);
locationY = locationY->Substring(locationY->IndexOf("=") + 1, locationY->IndexOf("}") - locationY->IndexOf("=") - 1);
SizeW = SizeW->Substring(SizeW->IndexOf("=") + 1);
SizeH = SizeH->Substring(SizeH->IndexOf("=") + 1, SizeH->IndexOf("}") - SizeH->IndexOf("=") - 1);
this->SetDesktopBounds(int::Parse(locationX), int::Parse(locationY), int::Parse(SizeW), int::Parse(SizeH));
MainFormDataReader->Close();
//最初の表示位置を記録
this->OnResizeEnd(nullptr);
○デストラクタ
StreamWriter^ FormDataWriter = gcnew StreamWriter("FormData.txt", false, System::Text::Encoding::GetEncoding("shift-jis"));
MainFormDataWriter->WriteLine(this->WindowState);
MainFormDataWriter->WriteLine(LocationString->Replace(",", "\r\n"));
MainFormDataWriter->WriteLine(SizeString->Replace(",", "\r\n"));
MainFormDataWriter->WriteLine(splitContainer1->SplitterDistance);
MainFormDataWriter->WriteLine(splitContainer2->SplitterDistance);
MainFormDataWriter->Close();
0222デフォルトの名無しさん
2007/05/09(水) 18:09:35String^ LocationString;
String^ SizeString;
this->ResizeEnd += gcnew System::EventHandler(this, &MainForm::MainForm_ResizeEnd);
○フォームのサイズと位置を取得する
private: System::Void MainForm_ResizeEnd(System::Object^ sender, System::EventArgs^ e) {
LocationString = "" + this->Location;
SizeString = "" + this->Size;
}
長かったので分割してカキコしました
今日出された課題でフォーム位置を記録するという物があったのですが、どうしても汚くなってしまいます。
もう少し効率の良いフォーム位置の記録方法はありませんか?
0223デフォルトの名無しさん
2007/05/09(水) 21:05:32Hashtableに格納してシリアライズするとか、
シリアライズ可能な構造体を定義してそれを保存するとか、
自前で読み書きするにしても、せめて、生の整数値で保存しろよ。
0224デフォルトの名無しさん
2007/05/09(水) 22:03:19ご指摘ありがとうございます
>自前で読み書きするにしても、せめて、生の整数値で保存しろよ。
苦肉の策で、無理矢理保存してました(汗
0225デフォルトの名無しさん
2007/05/10(木) 08:14:13String^ b = a;
a = "b";
これでbが"b"にならないのはどういう仕組みなんでしょうか?
いろいろ調べましたが結局わかりません。
0226デフォルトの名無しさん
2007/05/10(木) 08:18:49int* a = &n;
int* b = a;
int m = 2;
a = &m;
で b が 2 になりません、って言ってるのと同じこと。
0227デフォルトの名無しさん
2007/05/10(木) 08:19:260228デフォルトの名無しさん
2007/05/10(木) 08:44:36ありがとう。なんかぼけてました。(;´Д`)
0229デフォルトの名無しさん
2007/05/15(火) 21:09:570230デフォルトの名無しさん
2007/05/17(木) 01:46:32という警告がデザイナーで急に頻繁に表示されるようになってしまったのですが、
どなたか解決策をご存じありませんか?
コンパイルはちゃんとできるんですけど...
0231デフォルトの名無しさん
2007/05/17(木) 18:01:240232デフォルトの名無しさん
2007/05/17(木) 22:56:540233デフォルトの名無しさん
2007/05/18(金) 16:56:09云々の間違いなんだろうが、どうすればそんな間違いが起こるんだw
0234デフォルトの名無しさん
2007/05/18(金) 17:16:41思わずふいてしまた
0235デフォルトの名無しさん
2007/05/25(金) 16:01:130236デフォルトの名無しさん
2007/05/25(金) 17:22:17今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?
また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?
0237デフォルトの名無しさん
2007/05/26(土) 00:24:49止めたいときだけ無視する。
0238デフォルトの名無しさん
2007/05/26(土) 00:28:12>>また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?
treeView->BeginUpdate();
キャレットが出無くなればいいわけです
Win32 APIにHideCaretという関数があるのですが、C++/CLIではどうしても見つけることができませんでしたorz
0239デフォルトの名無しさん
2007/05/27(日) 15:49:02この関数のinbufにString^を渡したいのですがうまくキャストできません。
pin_ptr<const wchar_t> pIn = PtrToStringChars(in);
pin_ptr<const char> pInPass = pin_ptr<const char>pIn; // error
iconv(cd, &pInPass, &inlength, pOutPass, &outlength) )
どうやってキャストすればいいのでしょうか?
0240デフォルトの名無しさん
2007/05/27(日) 20:26:06const char* pInPass = reinterpret_cast<const char*>(pIn);でいいと思う。
0241かも
2007/05/27(日) 23:33:120242デフォルトの名無しさん
2007/05/28(月) 02:05:15http://msdn2.microsoft.com/ja-jp/library/1b4az623(VS.80).aspx
String^からstd::stringにしてc_str()で渡せば。
0243デフォルトの名無しさん
2007/05/28(月) 10:20:36できました。ありがとう。
>242
できればコピーしないでやりたかったので。
0244デフォルトの名無しさん
2007/05/29(火) 18:10:26志ねMS
0245デフォルトの名無しさん
2007/05/29(火) 19:22:060246デフォルトの名無しさん
2007/05/29(火) 19:25:48でもってC++/CLIも世界標準規格のわけだが
0247デフォルトの名無しさん
2007/05/29(火) 20:05:06ちょっとまえにISOに蹴られたばっかじゃん。
0248デフォルトの名無しさん
2007/05/29(火) 22:43:180249デフォルトの名無しさん
2007/05/30(水) 00:09:220250デフォルトの名無しさん
2007/05/30(水) 00:14:38だから一つしかないんだろ?
0251デフォルトの名無しさん
2007/05/30(水) 00:14:440252デフォルトの名無しさん
2007/05/30(水) 00:17:410253デフォルトの名無しさん
2007/05/30(水) 00:20:26はあ? ISOに蹴られてるだろ? どこが世界標準規格なんだよ。
嘘もいい加減にしろ。
0254デフォルトの名無しさん
2007/05/30(水) 00:23:11無知は黙っとけ
おっとお子ちゃまに英語は読めないかなw
0255デフォルトの名無しさん
2007/05/30(水) 00:27:19あれ? なにそれ? なんで普通になんの制限もないPDFがダウンロードできるの?
単にECMA規格がそーゆーもんなの? それともドラフトかなんか?
0256デフォルトの名無しさん
2007/05/30(水) 00:28:470257デフォルトの名無しさん
2007/05/30(水) 00:28:480258デフォルトの名無しさん
2007/05/30(水) 00:29:58IEEE
0259デフォルトの名無しさん
2007/05/30(水) 01:00:15C++0xへの叩き台なので問題ない
0260デフォルトの名無しさん
2007/05/30(水) 01:45:36ISO も JIS も普通に金取られるぞ
0261デフォルトの名無しさん
2007/05/30(水) 02:35:210262デフォルトの名無しさん
2007/05/30(水) 22:01:33コストはともかくトラフィックで死ねるからやらないんだろうけど
0263デフォルトの名無しさん
2007/05/31(木) 00:15:280264デフォルトの名無しさん
2007/05/31(木) 01:02:170265デフォルトの名無しさん
2007/05/31(木) 07:02:19禿は「ライブラリで出来るところはライブラリでやれよ。
テンプレートで出来るだろ」という見解だったな。
というわけで、ISOでは蹴られ続けるだろうな。
実際5月のミーティングでも駄目だったし。
0266デフォルトの名無しさん
2007/05/31(木) 11:19:11メインフォーム上に置いたコントロールのWndProcをオーバーライド
したいんですが。普通に継承して、メインフォームのコードを書き換えると、
フォームデザイナーがうまく機能しなくなってしまいます。
フォームデザイナをちゃんと動かすためにはいろいろ大変みたいで
できればやりたくないです。もっと簡単にWndProcをオーバーライド
する方法はないでしょうか?
0267デフォルトの名無しさん
2007/05/31(木) 11:34:27C++/CLI側は「まだ実装するべき機能はあるから、追加しちゃうよ」とかほざいてるし、
標準じゃないのはいらねぇよ。
0268デフォルトの名無しさん
2007/05/31(木) 15:51:15Mono C# compiler version 1.2.2.1
C# Language Specification ECMA-334
Common Language Infrastructure (CLI) ECMA-335
Home Page: http://www.mono-project.com/
Download: http://www.mono-project.com/Downloads
0269デフォルトの名無しさん
2007/05/31(木) 17:26:090270デフォルトの名無しさん
2007/05/31(木) 18:51:50君さ、何か勘違いしてる気がするよ。
0271デフォルトの名無しさん
2007/05/31(木) 20:47:230272デフォルトの名無しさん
2007/05/31(木) 21:16:150273デフォルトの名無しさん
2007/05/31(木) 23:26:57using namespace System;
using namespace System::Collections::Generic;
ref class HogeItem;
generic<typename CItem>
where CItem : HogeItem
ref class HogeList;
public ref class HogeItem abstract {
internal:
HogeList<HogeItem^>^ list;
};
generic<typename CItem>
where CItem : HogeItem
public ref class HogeList abstract : IList<CItem> {
public:
virtual void Insert(int index, CItem item) {
item->list = this; ←ここでエラー
}
};
HogeItem::list の型は HogeList<HogeItem^>^ なんですが、this が HogeList<CItem>^ なので
変換できないって怒られます。
IList<HogeItem^>^ とかにしてもだめでした。
generic の宣言のほうを変更しても良い方法が見つからず、困っています。
item 側にどの List に格納されたのか知らせる手段がほしいのですが、
うまい方法は無いでしょうか?
0274デフォルトの名無しさん
2007/06/01(金) 08:39:29>C++/CLIで作ると移植性が落ちる。
だから世の中の0$や重要なソフトはC++なのさ。
0275デフォルトの名無しさん
2007/06/01(金) 11:56:46item->list = (HogeList<HogeItem^>^) this;
HogeListは事実上HogeItemの派生クラス専用なのだから、
IList<T>の継承じゃなくてListを包含してしまったほうが楽だと思うけどな。
0276デフォルトの名無しさん
2007/06/04(月) 00:21:360277デフォルトの名無しさん
2007/06/04(月) 11:19:470278デフォルトの名無しさん
2007/06/04(月) 14:38:46それは織り込み済みです。
0279デフォルトの名無しさん
2007/06/04(月) 15:13:160280デフォルトの名無しさん
2007/06/04(月) 15:50:030281デフォルトの名無しさん
2007/06/04(月) 18:39:41ネイティブクラスのインスタンスは、マネージヒープ・スタック以外に作られる可能性がある
しかし、CLRのGCは、自身が管理するメモリ以外を見ない
だからネイティブクラスはハンドルを持てない
おとなしくmsclr::gcrootを使いなさいということ
0282デフォルトの名無しさん
2007/06/04(月) 18:49:32ありがとう。
つまりネイティブヒープ上にあると、ハンドルがGC対象にしていいか追跡
できなくなるって理解しました。
gcrootなんてあったんですね。調べてみます。
0283デフォルトの名無しさん
2007/06/04(月) 18:49:500284デフォルトの名無しさん
2007/06/04(月) 19:00:12∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
0285デフォルトの名無しさん
2007/06/04(月) 19:16:51つーか、ECMAに最初だけ登録しておいて、
以後のバージョンアップは放置ってのがMSの手法。
で「仕様は公開されてますよ、オープンです」って言う。
0286デフォルトの名無しさん
2007/06/04(月) 19:33:120287デフォルトの名無しさん
2007/06/04(月) 19:37:410288デフォルトの名無しさん
2007/06/04(月) 21:02:25なんで?
0289デフォルトの名無しさん
2007/06/05(火) 01:13:42ソースが転用できねーじゃねーか。ぼけ、死ね、くたばれ。
って言われる。
0290デフォルトの名無しさん
2007/06/05(火) 05:53:23があり、ファイル名は日本語とします。
また、ファイル名としてconst char*を受け取るライブラリの関数libfuncがあります。
これは変更不可です。
英語XPでこのlibfuncにパスを渡すいい方法はないでしょうか?
以下のようなコードだとconst char*に変換するとき X:\??????などと
なり、読み込み不可になってしまいます。
String^ filename = L"X:\\あああああ\\いいいいい.txt";
System::IntPtr pp = StringToHGlobalAnsi(filename);
const char* afilename = (const char*)pp.ToPointer();
libfunc(afilename);
FreeHGlobal(pp);
shortpathを使う方法も思いついたのですがGetShortPathNameWで変換しても
X:\ああ~1\ などとなり日本語が残ってしまうためconst char*にうまく変換
できません。
0291デフォルトの名無しさん
2007/06/05(火) 05:54:24さらにもし可能なら、英語版windows98でも動くようにしたいです。
0292デフォルトの名無しさん
2007/06/05(火) 08:28:02自分でWideCharToMultiByteやその他の手段でマルチバイト文字列へ変換
その際マルチバイト文字列の文字コードにShift_JIS (CP932)を指定
XP (NT)なら、Unicode対応でないプログラムの言語の設定(コントロールパネル→地域と言語のオプション→詳細設定)
で日本語を選んでおけばこれで動くと思う。あるいはAppLocaleで個別指定する手もある
98 (9x)は無理
0293デフォルトの名無しさん
2007/06/05(火) 23:56:10^って、なんの意味があるんですか?
0294デフォルトの名無しさん
2007/06/05(火) 23:58:150295デフォルトの名無しさん
2007/06/05(火) 23:59:010296デフォルトの名無しさん
2007/06/06(水) 00:10:54ポインタ?
String* temp;
はなくなったんですか?
>>295
すいません、よくわかりません。
0297デフォルトの名無しさん
2007/06/06(水) 00:14:050298デフォルトの名無しさん
2007/06/06(水) 00:55:44有難う御座います。
そのように思っておきます。
0299デフォルトの名無しさん
2007/06/06(水) 02:46:37C++/CLI の変更点くらい確認しようぜ
ヘルプで C++/CLI Version 2, マネージ拡張 から
変更の概略を見れば出ている
0300デフォルトの名無しさん
2007/06/06(水) 10:33:560301デフォルトの名無しさん
2007/06/06(水) 11:32:38DLLをまたいでオブジェクトが行き来しても、
メモリアロケータが違ってあぼんとかしないのはイイよ。
もちろんネイティブC++だってわかっている人が使えば問題ないんだけど。
ヘッダファイルにnew書いててそれがDEBUG_NEWに置換されて死亡とかイヤ過ぎる。
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1641869&SiteID=7
0302デフォルトの名無しさん
2007/06/06(水) 13:21:26その為に共有メモリってのがあったわけだが…。
ちょっとコスト対効果のバランスが悪い理由な気がする。
0303デフォルトの名無しさん
2007/06/06(水) 13:25:03共有メモリはプロセス間でメモリ共有したいときのものだと思うけど。
DLLはもとからメモリ空間共有してるわけだし、
メモリ共有で何を解決するつもりなのかサパリワカラン
0304デフォルトの名無しさん
2007/06/06(水) 14:29:10DLLのスタティック領域がプロセス間で共有されてたのはWindows 3.1時代の話だぜ
0305290
2007/06/06(水) 19:50:35ありがとう。
しかし290の例の日本語は他の言語の場合もあり、またはUnicodeでしか
表わせない混合型の場合もあるので、もっと根本的な解決法があれば
いいんですが。
0306デフォルトの名無しさん
2007/06/07(木) 00:18:32ハンドルやファイルポインタ・ストリーム辺りが渡せればだいぶましなんだが
0307デフォルトの名無しさん
2007/06/13(水) 07:45:40どうすればいいのでしょうか?
int size = 1024;
byte *buf = new byte[size];
cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size);
System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size);
//ここでエラーになる。
0308デフォルトの名無しさん
2007/06/13(水) 17:50:08実際試しに動かしてみても問題なかったぞ
0309デフォルトの名無しさん
2007/06/14(木) 01:37:21ありがとうございます。
すみません。問題は別のところにありました。
実際は*bufは関数でネイティブに渡していて、そこにそのまま渡していたという初歩的なミスです。
void nativefunc(byte **buf_p, size_t *size) {
//--- nativefunc(byte *buf_p, size_t *size) これで宣言していた
*size = bitmap.size;
byte *data = new byte[*size];
memcpy(//--- データ書き込み
*buf_p = &data[0]; //--- cliのbufのアドレス書き換え
}
void clifunc() {
size_t size;
byte *buf;
(new NativeCls)->nativefunc(&buf, &size);
//--- nativefunc(buf, &size); そのまま渡していた
cli:array<unsigned char,1> ^arr = gcnew cli:array<unsigned char,1>(size);
System::Runtime::InteropServices::Marshal::Copy((IntPtr)buf, arr, 0, size);
}
0310デフォルトの名無しさん
2007/06/21(木) 00:39:09これがコンパイルできないのはなぜですか?
error C3149: 'System::String' : トップレベルの '^' なしに、この型をここに使用することはできません
0311デフォルトの名無しさん
2007/06/21(木) 00:46:210312デフォルトの名無しさん
2007/06/21(木) 01:45:46その理由を聞いています。
0313デフォルトの名無しさん
2007/06/21(木) 07:33:410314デフォルトの名無しさん
2007/06/21(木) 08:49:15Stringのみ特別な事情があると理解すればいいでしょうか?
0315デフォルトの名無しさん
2007/06/21(木) 09:20:15The following reference types are not available for use with stack semantics:
delegate / array / String
予想だけどこれらはIDisposableでないので出来ても意味が少ない。
出来たとしてもハンドルに変換しないと使えない。
String s("A");
String^ x = "abcd" + %s;
String^ x = "abcd" + s.ToString();
0316デフォルトの名無しさん
2007/06/21(木) 10:55:52ありがとう。
使い道がないということで理解しようと思います。
0317デフォルトの名無しさん
2007/06/22(金) 17:45:520318デフォルトの名無しさん
2007/06/24(日) 09:16:58さしてしまう場合があってデバッグしづらいんですが
直す方法はありますか?
nop命令があってそこでへんなとへこいきます。
0319デフォルトの名無しさん
2007/07/06(金) 05:55:39C#の「Windowsアプリケーション」プロジェクトでいくか
C++/CLIの「Windowsフォームアプリケーション」プロジェクトで行くか悩む。
アンマネージドなC++クラス(とboost)で書かれたCUI
アプリケーションのGUI版を作ろうとしています。
C# でもアンマネージドな DLL のエントリを呼び出すことできますし。
でもアンマネージドな C++ のクラスを使いまくりたいんだけど
どうしたものか・・・ COM コンポーネントとして作られていれば
容易に扱うことができたのかもしれないけど。
アンマネージドな C++ で書かれたクラスのインスタンスを
生成したい時って、そのクラスのファクトリメソッドを
用意しておいてそれを C# 側から呼び出すということになるんですかね?
C++ 特有の複雑な(引数の型を反映した)関数名とかどうなるんだろう。
extern "C" つかうのか。
0320デフォルトの名無しさん
2007/07/06(金) 05:56:100321319
2007/07/06(金) 06:41:49.NET 環境で使うためには C++/CLI でラッパークラスを書けば
いいのでしょうか?そうするとマーシャリングなども自動で
やってくれるということなのでしょうか?
DLL は C++ にやさしくない、かといって COM コンポーネント
として書いてしまうとプラットフォームに強く依存しすぎるので
一般的な用途のクラスライブラリには向かない、
でもアンマネージドな C++ のクラスを .NET と仲良くさせたい、
という課題をどう解決すればいいのかを教えてください。
0322デフォルトの名無しさん
2007/07/06(金) 08:19:58> やってくれるということなのでしょうか?
そういうことになるが、ある意味自分で
マーシャリングコードを書く補助をしていると言ってもいいかもしれない。
アンマネージクラスをC#(やその他.NET言語)から呼び出したければ、
C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、
他の言語から参照設定して使うのが一番率直な手段。
そもそもC#でアンマネージDLLのC++クラスを操作するなんて不可能だぞ。
(COMインタフェース経由を除く)
0323319
2007/07/06(金) 10:57:16>他の言語から参照設定して使うのが一番率直な手段。
やっぱそうですか、ある意味安心しました。
System.Runtime.Interop 以下にいろいろあるのを眺めてて、
もしかしてマネージドからなんかうまい具合にごにょごにょ
できる方法が用意されてるのかなぁ、などと疑心暗鬼になってました。
0324デフォルトの名無しさん
2007/07/07(土) 13:26:04CLRサポートを/clrにして以下のインクルードを追加すると
実行時ヒープエラーみたいなのが出ます。
#include <comdef.h>
#pragma comment(lib, "oleaut32.lib")
どうやって直したらいいのでしょうか?
0325デフォルトの名無しさん
2007/07/24(火) 03:07:410326デフォルトの名無しさん
2007/07/24(火) 03:13:360327デフォルトの名無しさん
2007/07/24(火) 23:16:420328デフォルトの名無しさん
2007/07/24(火) 23:50:23#include <cstdlib>
int main()
{
System::Void* pv = std::malloc(256);
std::free(pv);
}
0329デフォルトの名無しさん
2007/07/25(水) 02:28:580330デフォルトの名無しさん
2007/07/25(水) 13:29:14.NETのSystem::Windows::Forms::Application::ExecutablePathなど。
0331デフォルトの名無しさん
2007/07/25(水) 22:11:43ありがとう。
ずっとProcessとかを探してたよ
Win32APIのときGetModuleDirectoryとかなんとかだったから
0332デフォルトの名無しさん
2007/07/25(水) 22:51:56その線も惜しい。
Win32はGetModuleFileNameだったでしょ。
.NETだとモジュール (EXE/DLL)に対応するものはアセンブリだから、
その方向でやるならAssemblyクラスが正解だった。
http://www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html
0333デフォルトの名無しさん
2007/07/27(金) 12:14:00std::vector<System::String^> のように標準のSTLのコンテナには
ハンドルを格納することはできないのでしょうか?
C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
用意されているのでしょうか?今の自分は array<String^>
しか使えずさみしい毎日を過ごしています。
std::vector<System::String^>^ lines;
try{
for(;;)
lines->push_back(stream_reader->ReadLine());
} catch
以下略
のようにぶん回してファイルを行単位で全行
読み込みたいだけなのですが・・・
0334デフォルトの名無しさん
2007/07/27(金) 12:19:12>C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
つSystem::Collections::Generic
STL.NET構想はどっかいっちゃったけどな
0335デフォルトの名無しさん
2007/07/27(金) 12:26:29おお、「コレクション」というのですか。
どうりで C++ CLI コンテナ で検索していても
昔の managed C++ の資料や gcroot でがんばる
という方法しか見つからず難儀していました。
しかも cliext::vector なんかも見つかってしまい、
余計に混乱していました。cliext 名前空間以下の
識別子ってのが STL.NET なんですかね?
0336デフォルトの名無しさん
2007/07/27(金) 12:42:30STL.NET は STL/CLR という名前で VS2008 に同梱
ただ、.net fx 2.0 では動かない
こういう後方互換性がないものを C++/CLI で出してほしくなかった
0337デフォルトの名無しさん
2007/07/27(金) 12:47:04上位互換が無いってことか?
0338デフォルトの名無しさん
2007/07/27(金) 12:49:22それで困るやつはどれだけいるんだ
0339デフォルトの名無しさん
2007/07/27(金) 12:51:290340デフォルトの名無しさん
2007/07/27(金) 12:55:13それ本当?
.NET Framework 3.0も3.5もCLRのバージョンは2.0のままだろ。
0341デフォルトの名無しさん
2007/07/27(金) 13:07:083.5 が必要になるのは嫌じゃね?
前のCTPの頃はライブラリだけ持って行けばよかったんだが
0342デフォルトの名無しさん
2007/07/27(金) 13:22:05Beta1 で Microsoft.VisualC.Stlclr.Dll +ヘッダ抜き出しで駄目だったという報告があった
とりあえず、Beta2 が来てるんで、入れて試してみる
一応、「Microsoft.VisualC.Stlclr.Dll は .net fx 3.5 の一部ではない」はずなんだが
0343デフォルトの名無しさん
2007/07/27(金) 13:47:59>.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に
>3.5 が必要になるのは嫌じゃね?
>前のCTPの頃はライブラリだけ持って行けばよかったんだが
コンパイルし直すんだろ?
どうせmsvcp90.dllとか増えてるんじゃないの?
VC++のランタイムライブラリに同梱ってのが幸せになる道かねぇ。
まあ3.5のサイズにもよるな。
0344デフォルトの名無しさん
2007/07/27(金) 14:43:50客先に説明するのが面倒なんだよね。でも、STL/CLR は使いたい
できれば、CTP同様に VS2005 + ヘッダ + Microsoft.VisualC.Stlclr.Dll で STL/CLR を
使った開発ができる方がうれしい。SP2 で来ないものかな
0345デフォルトの名無しさん
2007/07/27(金) 17:14:22:
for each(int i in v)
{}
for eachでbegin(), end()が呼ばれているようですが
ECMA-372にはこの振る舞いの記述が見あたりません。
MSの独自拡張なのでしょうか?
0346デフォルトの名無しさん
2007/07/28(土) 00:28:26これでも行けますね
int vec[] = { 1, 2, 3, 4, 5 };
for each ( int num in vec )
{
std::cout << num <<std::endl;
}
配列アクセスが可能なものは Array のラップを掛けて渡されているのでは
ないでしょうか。Array は IEnumerable ですし
0347デフォルトの名無しさん
2007/07/28(土) 00:34:44ごめん。これはできて当たり前だわ
array<int>^ vec = { 1, 2, 3, 4, 5 };
と同等だもんな
0348デフォルトの名無しさん
2007/07/28(土) 07:12:42Cタイプ配列とarray<T>は同等じゃないから346は通らないのでは?
0349デフォルトの名無しさん
2007/07/28(土) 07:20:17/Zeで拡張構文を抑制するとeachが構文エラーになった。
// cl /EHsc hoge.cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> v; v.push_back(1); v.push_back(5);
for each (int i in v) std::cout << i << std::endl;
return 0; }
0350デフォルトの名無しさん
2007/07/28(土) 18:16:58Cタイプ配列は C++/CLI では array<Type> でラップされるよ。だから、346 は動く
>347 がそれを言ってる
ヘッダ見たけど、特に ecma-372 で必要とされている IEnumerable の定義も
見あたらないから、CLR・・・で定義されている所に、拡張構文で潜んでるっぽい
0351デフォルトの名無しさん
2007/07/28(土) 18:24:102.0, 3.0 を選んだとき、STLCLR.dll は使えなかった
STL/CLR を使いたかったら、3.5 を普及させろと言うことらしい
( ゚д゚) Feedback マンドクサ
_(__つ/ ̄ ̄ ̄/_
\/ /
 ̄ ̄ ̄
( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ /
 ̄ ̄ ̄
0352デフォルトの名無しさん
2007/07/28(土) 19:47:41C#のCタイプ配列はCLR配列だが、C++/CLI のCタイプ配列はCLR配列じゃないぞ。
>>346を実際にコンパイルしてみろ、C3285でしっかりコンパイルエラーが出る。
0353デフォルトの名無しさん
2007/07/28(土) 23:12:16当たり前だけど、boost::arrayはOK。
どうせならレンジに使えればいいのに、
ってそれなんてBOOST_FOREACHなんだけどね。
0354名無しさん@そうだ選挙に行こう
2007/07/29(日) 14:40:44悪禁食らっていたので返答が遅れた
ごめん。漏れが試したのは、VS2008 Beta2 だった。こちらは >346 でコンパイルできるし
動く。また、ecma-372 でも、仕様上 346 で正しいから、VC8 で取りこぼしてた仕様が
いくつかあったやつを VC9 で準拠したんだと思う
/clr の有無に関わらずって、/clr なくて for each が使えるの?
0355名無しさん@そうだ選挙に行こう
2007/07/29(日) 19:24:33349でネイティブでも使えるという報告があるよ。
0356デフォルトの名無しさん
2007/07/30(月) 14:40:51比較にStringComparer:::CurrentCultureIgnoreCaseを指定してるのですが
全角アルファベットの大文字・小文字も同一視されてしまいます。
要するにNTFSやFATと同じようなファイル名の比較をしたいのですが、どうすればいいんでしょうか?
0357デフォルトの名無しさん
2007/07/30(月) 15:16:490358デフォルトの名無しさん
2007/07/30(月) 15:50:00WindowsのNTFSファイルシステムドライバは"A"と"a"は同じ文字とみなしてるよ?
0359デフォルトの名無しさん
2007/07/30(月) 16:11:47あ、ほんとだ。区別されるものと思ってた。
0360デフォルトの名無しさん
2007/07/31(火) 10:22:34カーネルの中には比較する関数あるんだけどね・・・
なんでユーザーモードに無いのかは謎
まじめにやると日本語やアルファベット以外の文字(ヨーロッパ圏など)でも
全角半角を問わず大文字小文字を区別しないので
割と面倒だった気がする。
0361デフォルトの名無しさん
2007/08/01(水) 04:25:12フォームデザイナの機能で C++/CLI と C# の間に
違いはあるのでしょうか?
つまり C# でのフォームデザイナと、C++/CLi での
フォームデザイナの間に、利用できるコントロールの
種類などで違いがあるのでしょうか?
.NET Framework で用意されている機能なら言語によらず
利用可能だとおもうので差はないと思っているのですが。
0362デフォルトの名無しさん
2007/08/01(水) 04:54:480363デフォルトの名無しさん
2007/08/01(水) 08:38:47これってメリットある?
いや、一般論じゃなくて実際のところ。
0364デフォルトの名無しさん
2007/08/01(水) 09:07:420365デフォルトの名無しさん
2007/08/01(水) 09:14:120366デフォルトの名無しさん
2007/08/01(水) 11:44:46自分専用ツールにはクラスライブラリが充実しているので便利。
0367デフォルトの名無しさん
2007/08/01(水) 12:01:52それにしては、Win32で出来るものが出来なかったり、中途半端。
だったらVCLみたくネイティブクラスライブラリ充実させろよ。
0368デフォルトの名無しさん
2007/08/01(水) 12:05:21これって、ネイティブ版クラスライブラリを作成すれば完璧だおね。
M$のドトネト囲い込み戦略に嵌められてるだけじゃないの?
ドトネトは終焉したわけだし、無視した方が良いよ。
0369デフォルトの名無しさん
2007/08/01(水) 12:37:37飽きないの?
0370デフォルトの名無しさん
2007/08/01(水) 13:00:03つ ttp://gigazine.net/index.php?/news/comments/20070801_will_not_move_to_vista/
企業ユーザーの大多数はVistaへの移行を考えていない
0371デフォルトの名無しさん
2007/08/01(水) 16:47:45企業ユーザが使おうとするわけがない。 >> VISTA
0372デフォルトの名無しさん
2007/08/01(水) 17:10:29kwsk
0373デフォルトの名無しさん
2007/08/01(水) 17:12:17ttp://d.hatena.ne.jp/NyaRuRu/20070731/p2
0374デフォルトの名無しさん
2007/08/01(水) 22:23:38てか、なんでForm.hに実装させるような仕組みにしたんだろう?
0375デフォルトの名無しさん
2007/08/01(水) 23:02:470376デフォルトの名無しさん
2007/08/01(水) 23:59:06これをcppにということになると、たとえば、フォームデザインの変更を
ちょこちょこやる場合、Formのデザイナとヘッダとcppを行ったり来たりでは
やっぱり大変だよね。
0377デフォルトの名無しさん
2007/08/02(木) 00:59:040378デフォルトの名無しさん
2007/08/02(木) 04:03:150379デフォルトの名無しさん
2007/08/02(木) 09:44:370380デフォルトの名無しさん
2007/08/02(木) 18:35:26デサイナが生成するコードに何か大きな変化は有りましたか?
0381デフォルトの名無しさん
2007/08/02(木) 21:36:340382デフォルトの名無しさん
2007/08/02(木) 22:27:36思うんだが。結局、ネイティブ・アプリの ClickOnce 対応もしていないし
0383デフォルトの名無しさん
2007/08/02(木) 22:53:420384デフォルトの名無しさん
2007/08/03(金) 01:11:20むしろ、2種類のライブラリに混乱しかねない
0385デフォルトの名無しさん
2007/08/03(金) 01:41:52標準C++ & boost萌えな俺には、C++/CLIやC#はきついんだが…
0386デフォルトの名無しさん
2007/08/03(金) 08:17:10確かに。少なくともクラス定義だけでも、
ネイティブクラスと値クラスに違いがなければいける。
前にも書いた気がするけど、ハンドル用のアロケータ書いてみたが、
ネイティブクラスはハンドルを持てないのでだめだった。
0387デフォルトの名無しさん
2007/08/03(金) 08:27:310388デフォルトの名無しさん
2007/08/03(金) 10:16:370389デフォルトの名無しさん
2007/08/03(金) 11:18:520390デフォルトの名無しさん
2007/08/03(金) 11:21:41テンプレートで実装してるしね
0391デフォルトの名無しさん
2007/08/03(金) 11:22:360392デフォルトの名無しさん
2007/08/03(金) 11:33:200393デフォルトの名無しさん
2007/08/03(金) 16:46:48インタフェースを実装しているのが強みと言えるかもしれない。
0394デフォルトの名無しさん
2007/08/03(金) 16:51:410395デフォルトの名無しさん
2007/08/03(金) 17:49:380396デフォルトの名無しさん
2007/08/04(土) 00:58:40コンパイル時のコード生成であるC++テンプレートをサポートするってのが
端から無茶やってるとは思うけどねぇ。
0397デフォルトの名無しさん
2007/08/04(土) 13:00:12stringstream
に相当するものは用意されているのでしょうか?
0398デフォルトの名無しさん
2007/08/04(土) 13:03:09でもstringstreamだって使いたければ使えばいいし。
0399デフォルトの名無しさん
2007/08/04(土) 15:31:510400デフォルトの名無しさん
2007/08/04(土) 23:23:24勝手になる?
0401397
2007/08/04(土) 23:41:29System::IO::Streamとしても使いたかったんで
MemoryStreamから派生することにした。
順序つきで使える operator >> は面倒だからやめた・・・。
generic <typename T> MyStringStream% operator << (T x)
{
cli::array<unsigned char>^ buffer = System::Text::Encoding::Unicode->GetBytes(x->ToString());
this->Write(buffer,0,buffer->Length);
return *this;
}
0402デフォルトの名無しさん
2007/08/05(日) 00:21:56ポインタを使った場合だと、virtual 付けないとダメね
ハンドル型だと、virtualなしでもいける
0403デフォルトの名無しさん
2007/08/05(日) 00:23:24へえ、boost::shared_ptrみたいだな
0404デフォルトの名無しさん
2007/08/05(日) 00:26:44目指してるものが同じだからな。
0405デフォルトの名無しさん
2007/08/05(日) 00:54:52トンクス!
0406デフォルトの名無しさん
2007/08/05(日) 01:28:41マネージドヒープにある実体を指すポインタなんだろうか?
0407デフォルトの名無しさん
2007/08/05(日) 01:35:030408デフォルトの名無しさん
2007/08/05(日) 02:07:15デストラクタってDisposeじゃなかった?
だからvirtualにならないとつじつまが合わない気が・・・
0409デフォルトの名無しさん
2007/08/05(日) 05:28:45ref classのデストラクタはDispose()ナマじゃなからvirtualかどうかは意味がない。
デストラクタを宣言すると暗黙でDispose(bool)とDispose()とFinalize()が定義されて、
デストラクタはDispose(bool)から間接的に呼ばれるので、
結果、継承ツリーの下位のほうから順にデストラクタが呼ばれる形になる。
0410デフォルトの名無しさん
2007/08/05(日) 08:36:27ようするにそういうこと。ただしポインタ演算禁止で、演算子多重定義が使える。
ポインタ演算がやりたければinterior_ptr<>。
0411デフォルトの名無しさん
2007/08/05(日) 13:26:15> マネージドヒープにある実体を指すポインタ
が含まれてます。ハンドルには。
そのポインタ(あるいはID)を直接操作するのは危険なので、
(たとえばGCで、場所を移動されるかも知れないので)
ハンドルを介して、その対象を操作するのです。
用語としては、車を運転する時に、直接タイヤを動かすのではなくて、
ハンドルを回して、タイヤを動かすあのハンドルと同じです。
CでFILE型がファイルハンドルと呼ばれるのと同じ。
0412デフォルトの名無しさん
2007/08/05(日) 17:38:01thx
引数にint^で受け取ると勝手にSystem::Int32^になってるんだな。
int main(){
int x=10;
plusA(x);//値は変わらない
plusB(x);//値が変わる
}
void plusA(int^ x){
((int)x)++; //int型へのキャストが必要
}
void plusB(int% x){
x++; //いまいち理解できない
}
ところでConsole::WriteLineっていうのがあったと思うけど、
どうなったのでしょうか?VS2005のどこにも出力されないんですけど。
0413デフォルトの名無しさん
2007/08/05(日) 18:48:52%は参照&のマネージド版。
ハンドルは、一応ポインタになぞらえられることを示すとするとこんな感じ。
値型をボックス化したハンドル絡みではこういうことになる。
void plusA(int^ x) {
(*x)++;
}
int x = 10;
int ^h = x;
plusA(h);
std::cout << x << ' ' << *h << '\n';
0414デフォルトの名無しさん
2007/08/06(月) 00:13:39(*x)++;
}
int ^x=10;
plusA(x); //書き換わる
plusA(*x); //そのまま
ようするに参照ということかな?VBのByrefみたいな。
std::coutもprintfもWriteLineもどこにも出力されないんだが、
どうやって出力結果を見てるの?
0415デフォルトの名無しさん
2007/08/06(月) 00:48:01Console::ReadLine();などででプログラム止めてる?
plusA(*x); って、*xがplusA関数に渡されるときに、
*xのコピーオブジェクトが作成され、そのハンドルがplusA関数の仮引数に
格納されるから、値が変わらないってことでいいのかな?
そうそう、
(10).Equals(11);
みたいに定数もオブジェクトとして扱われるんだね。
0416デフォルトの名無しさん
2007/08/06(月) 01:21:27コンソールプログラムのプロジェクトにしている?
そうしないと、cout, printf, WriteLineの出力先は現れないよ。
コンソールプログラムのプロジェクトでなかったのなら、
プロジェクトのプロパティのリンカのシステムか何かのとこにサブシステムの設定があるから、
その中のコンソールを選べばいい。
http://msdn2.microsoft.com/ja-jp/library/fcc1zstk(VS.80).aspx
>>415
plusA(*x);でコピーが作成されるのはそのとおり。ボクシングとは、
結局マネージドヒープに新しくオブジェクトを作って、そこへコピーすること。
値型のハンドルを引数に受け渡しすること自体はVBのByRefや
Cのポインタ渡しそっくりでいいんだが、ボクシングという
暗黙のオブジェクトのコピーが働くから話が少々厄介になっている。
0417デフォルトの名無しさん
2007/08/06(月) 21:48:15非侵入型のシリアライズはないのでしょうか?
0418デフォルトの名無しさん
2007/08/07(火) 19:32:08都合により2005のC++/CLIに移ることにした。
プロジェクトを変換してコンパイルエラーを片付け、
いったんは動くようになったんだが
しばらくしてリビルドしようとすると
リンクエラーLNK2020「メタデータの操作に失敗しました」
が発生する。
今環境がないんで詳しいエラー内容は書けないんだが
「プロパティの数が違う」みたいなことを言われていた。
LNK2020にはいろいろ種類があるらしく、
「重複する型に、適合しないフィールド宣言があります」なら
リビルドすればいいらしいんだが、リビルドしてみても直らなかった。
プロジェクトを新規作成してファイルを全部入れても同じエラー。
ググっても英語のページすら出てこなかった。
誰か対処方法知ってたらplz
0419デフォルトの名無しさん
2007/08/07(火) 19:38:500420デフォルトの名無しさん
2007/08/07(火) 19:42:36stdafx.h
stdafx.cpp
main.cpp
resource.h
だけの状態?
0421デフォルトの名無しさん
2007/08/07(火) 20:48:110422デフォルトの名無しさん
2007/08/07(火) 23:26:280423418
2007/08/08(水) 20:34:16もう一回プロジェクト変換しなおして
ソースとヘッダ入れたら動いた。
お騒がせスマソ
>>422
なかった
0424デフォルトの名無しさん
2007/08/18(土) 04:43:41C++/CLIを使うときの制限事項ってどんなのがありますか?
0425デフォルトの名無しさん
2007/08/18(土) 12:05:300426デフォルトの名無しさん
2007/08/19(日) 05:45:05デバッグ機能とかGUIのデザインあたりが
はしょられてるんかと思ってた
0427デフォルトの名無しさん
2007/08/19(日) 08:36:21http://msdn2.microsoft.com/ja-jp/library/hs24szh9(VS.80).aspx
0428デフォルトの名無しさん
2007/08/19(日) 21:32:30普通のC言語のようにただのキャストじゃ変換できない?
どうもできていないような気がするんだが。
0429デフォルトの名無しさん
2007/08/19(日) 22:09:33enum classじゃないenumはC++のそのままですよね?
単に使い方がおかしいだけでは。ソースを示してみたらどうです。
0430デフォルトの名無しさん
2007/08/19(日) 22:34:08D3DFORMAT fmt = (D3DFORMAT)21;
0431デフォルトの名無しさん
2007/08/19(日) 22:38:04ユーザの入力。
0432デフォルトの名無しさん
2007/08/19(日) 22:44:360433デフォルトの名無しさん
2007/08/19(日) 23:03:15typedef enum _D3DFORMAT
{
(省略)
D3DFMT_A8R8G8B8 = 21,
(省略)
} D3DFORMAT;
0434デフォルトの名無しさん
2007/08/19(日) 23:05:14fmtが「未定義の値」になってる。
0435デフォルトの名無しさん
2007/08/19(日) 23:48:25int val = 21;
D3DFORMAT fmt = (D3DFORMAT) val;
std::cout << fmt << std::endl;
VS 2008 Beta2 なんで、2005でも大丈夫かわからんが
0436デフォルトの名無しさん
2007/08/19(日) 23:52:560437デフォルトの名無しさん
2007/08/20(月) 00:53:44これでリリース・ビルドしていたせいで変数がデバッガ上で正常に表示されていなかった
なんてオチだったら指さして笑うが
0438デフォルトの名無しさん
2007/08/20(月) 23:24:440439デフォルトの名無しさん
2007/08/21(火) 01:02:330440デフォルトの名無しさん
2007/08/21(火) 06:26:53俺仕事で使ってる
ただのラッパークラスだが
0441デフォルトの名無しさん
2007/08/21(火) 09:18:49ネイティブのライブラリをドトネトから使うため?
0442デフォルトの名無しさん
2007/08/21(火) 20:54:43前の製品の再利用可能な部分
GUIはC#になっちまった
0443デフォルトの名無しさん
2007/08/21(火) 20:55:14>>441な
0444デフォルトの名無しさん
2007/08/21(火) 23:01:14enumは int だし。ってのはCの仕様だっけか。
0445428
2007/08/22(水) 21:45:58直接D3DFMT_R8G8B8を入れても
<未定義の値>になる。
デバッグにはなってるんだが。
0446デフォルトの名無しさん
2007/08/22(水) 22:32:240447デフォルトの名無しさん
2007/08/23(木) 08:38:13直接、D3DFORMAT の enum 値を出力してみたら?
TRACE でも cout でも何でもいいけど
ちなみに、コンパイラは VC8 なんだよな?
0448デフォルトの名無しさん
2007/08/23(木) 21:02:06ちゃんと21が出たw
VC8です
デバッガがミスっただけかな。
0449デフォルトの名無しさん
2007/08/29(水) 18:29:40設定した値が元に戻ったりするんですが、これについて何かご存じな方
いらっしゃいますか?
0450デフォルトの名無しさん
2007/08/29(水) 18:35:42VS2005上での話です。
0451デフォルトの名無しさん
2007/09/01(土) 15:44:350452デフォルトの名無しさん
2007/09/01(土) 20:26:10だって既存の C++ のライブラリの
ラッパーとしての存在価値は少なくともあるから。
で、.NET というか CLR ってこれからはやるのかね?
mono でも ASP.NET をはじめとしていろいろ動く
ようになってるし、.NET Compact Framework も
広がりを見せているようだけど。
0453デフォルトの名無しさん
2007/09/01(土) 21:22:06あくまでもC++の資産を.NETで利用するためのツール。
0454デフォルトの名無しさん
2007/09/01(土) 22:30:15.net が COM 拡張として発生したように、外部管理オブジェクトのハンドリング用言語として
C++ を拡張したものだから
Windows 用の Objective-C みたいなものなんだけどなぁ
0455デフォルトの名無しさん
2007/09/01(土) 23:46:120456デフォルトの名無しさん
2007/09/01(土) 23:48:420457デフォルトの名無しさん
2007/09/02(日) 14:31:020458デフォルトの名無しさん
2007/09/02(日) 14:47:34STL/CLRとこれまで規格に非準拠だった部分の対応。
例えばC型配列がarrayと同等に扱えるようななった。
0459デフォルトの名無しさん
2007/09/02(日) 16:07:580460デフォルトの名無しさん
2007/09/02(日) 16:09:48また、いろいろと言われるから(w
0461デフォルトの名無しさん
2007/09/02(日) 16:50:15無理矢理.netに対応させた文法を追加せずに、
C++にライブラリで誤魔化したほうがマシな気が・・・
.netに最適化した言語、とかならC#ってのをやってるのだし、
あんまりC++/CLIの存在意味がないような・・・
0462デフォルトの名無しさん
2007/09/02(日) 18:05:21明示的に分離するように変更したんだよ
C++ は既存のままで、CLI を追加構文で、これでようやく見通しが良くなったのさ
oldSyntax で一度書いてみると、ライブラリで対応って言うのが以下に非現実的か
よくわかるよ
0463デフォルトの名無しさん
2007/09/02(日) 20:13:36感じだったからな。マネージドな部分とそうでない部分が
明確に分かれている C++/CLI のほうがわかりやすい。
確かに上にあった Objective C の Microsoft 版だという
たとえは的を射ていると思う。
0464デフォルトの名無しさん
2007/09/02(日) 21:16:36実装を作ってみるのになぁ
0465デフォルトの名無しさん
2007/09/07(金) 18:04:21設定情報をapp.comfigから読みだすために
app.config(appはプログラム名へ後に変換)へ例えば
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="HOGE" value="ほげほげ" />
</appSettings>
</configuration>
と書いて、C++/CLIのコード(フォームアプリ)からは、
MessageBox::Show(System::Configuration::ConfigurationSettings::AppSettings[ "HOGEHOGE"]);
MessageBox::Show(System::Configuration::ConfigurationManager::AppSettings[ "HOGEHOGE"]);
と呼び出して表示しているのですが、OSがXP(SP2)だとうまくいき、
Win2000(SP4)だと表示が空文字になってしまいます。
MSDNにはWin2000(SP4)もサポートしているように書いてありますし、
vcregist_x86.exeやdotnetfx.exeも実行してあるのですが。。。
このあたりの情報(こうすれば動く、実はサポート外など)を
お持ちの方、いましたら教えていただけませんか。
ネットで散々探しましたが、意外とこの話題少ないんです。
よろしくお願い板します。
0466465です
2007/09/07(金) 18:08:54<add key="HOGE" value="ほげほげ" />
は
<add key="HOGEHOGE" value="ほげほげ" />
の間違いです。
0467デフォルトの名無しさん
2007/09/08(土) 09:39:160468デフォルトの名無しさん
2007/09/08(土) 12:14:40うちの環境だと正常に読めてる。Vertual PCでWin2k(SP4)。
xx.exe.configの名前はあってる?
0469デフォルトの名無しさん
2007/09/11(火) 02:02:27>xx.exe.configの名前はあってる?
それ、ビンゴです!
C#やVBはビルド時に自動でファイル名つけてくれるのに。。。
0470デフォルトの名無しさん
2007/09/22(土) 02:10:50やっぱりC++/CLIは
流行らないってことでおk?
0471デフォルトの名無しさん
2007/09/22(土) 03:07:290472デフォルトの名無しさん
2007/09/22(土) 10:36:17組めばいいんじゃね
テキスト描画すんのもGDIのが楽なような
0473デフォルトの名無しさん
2007/09/22(土) 11:09:00VistaでDDBの速度的有利さは事実上消滅したけどな
0474デフォルトの名無しさん
2007/09/22(土) 12:22:140475デフォルトの名無しさん
2007/09/22(土) 13:28:37.NETがのろくて誰も使ってくれないから全員平等にのろくしたって感じだな
0476デフォルトの名無しさん
2007/09/22(土) 15:55:560477デフォルトの名無しさん
2007/09/22(土) 20:13:300478デフォルトの名無しさん
2007/09/22(土) 20:14:39Direct3DとWPFは仲間はずれ?
0479デフォルトの名無しさん
2007/09/23(日) 04:10:23まぁそうなんだろうけど、そういう言語が CLI 上にちゃんと
用意されているところが Java VM とは違うところだよな。
といってドトネトを擁護してみる。
いや、漏れは好きだよ C++/CLI。というかこれがないと困る。
研究用のシミュレータをC++で boost とかのライブラリ使って
書いてるけど、フロントエンドの GUI が Windows Forms で
組めるのは楽だよ。
0480デフォルトの名無しさん
2007/09/23(日) 07:26:580481デフォルトの名無しさん
2007/09/23(日) 08:18:37シミュレータ自体はライブラリ化していて、コマンドライン版は
Linuxクラスタで動かしているんだけど、同じライブラリを
リンクしてWindowsで動くGUI版を作れるというのはかなり便利。
C# と C++/CLI と両方使って思うんだけど、 Windows Form デザイナ
って両者の言語でかなり安定感ちがわないか?
C++/CLI だとちょっとでも自動生成されたコードいじると
もうデザイナが発狂してしまう感じ。どの程度いじってもOKなのか
基準がよくわからない。C# のほうも基準がわからないという点では
同じなんだけど、結構いじっても Windows Form デザイナが
ちゃんと認識してくれる気がする。気がするだけか?
0482デフォルトの名無しさん
2007/09/23(日) 12:28:250483デフォルトの名無しさん
2007/09/23(日) 12:57:210484デフォルトの名無しさん
2007/09/23(日) 13:05:020485デフォルトの名無しさん
2007/09/25(火) 14:00:50C++/CLIで使えるのでしょうか?
0486デフォルトの名無しさん
2007/09/25(火) 17:51:400487デフォルトの名無しさん
2007/09/26(水) 23:29:570488デフォルトの名無しさん
2007/09/27(木) 01:24:24GUIをもっとバリバリやりたくなってきたんですが
かといってMFCは嫌い。
C#は書き直すのがめんどいし
そんな漏れはC++/CLIがいい?
0489デフォルトの名無しさん
2007/09/27(木) 06:58:21Win32
0490デフォルトの名無しさん
2007/09/27(木) 09:23:42結果をグラフィカルに表示するなんてことができます?
ネイティブの_begin_thread 関数を呼び出す必要が有りますか?
それともドトネトのなにかを呼び出すべきなんでしょうか?
0491デフォルトの名無しさん
2007/09/27(木) 09:42:20どちらでも可能だが、
マネージドのスレッドを使ったほうが取り扱いが楽だと思う。
0492デフォルトの名無しさん
2007/09/27(木) 09:44:110493デフォルトの名無しさん
2007/09/27(木) 09:47:20C++/CLIスレでそれを言うなよ。/safeにどの程度の意味があるんだ?
0494デフォルトの名無しさん
2007/09/27(木) 11:09:31ネイティブってどういう意味で使ってるの?
0495デフォルトの名無しさん
2007/09/27(木) 11:10:25マネージドアプリをアンマネージドアプリにする混ぜ物。
0496デフォルトの名無しさん
2007/09/27(木) 12:42:32pureでやりたいなら C# で十分じゃん
C++/CLI はそれだけじゃ物足りない人向けだろ
0497デフォルトの名無しさん
2007/09/27(木) 12:50:000498デフォルトの名無しさん
2007/09/27(木) 15:31:12<funcional>すら駄目ってことになるが…
0499デフォルトの名無しさん
2007/09/27(木) 15:41:05だんだん拡張されてキモクなってるよな。
0500デフォルトの名無しさん
2007/09/27(木) 16:21:170501デフォルトの名無しさん
2007/09/27(木) 18:14:050502デフォルトの名無しさん
2007/09/27(木) 18:18:33楽したいならC# + C++/CLIとかWPFとか
厳しい道を行きたいなら DirectX Graphics
0503デフォルトの名無しさん
2007/09/27(木) 20:00:150504デフォルトの名無しさん
2007/09/28(金) 01:23:51○ちスレッド処理って、同様のことは C++/CLI では
できないのかな。そもそも delegate がないから無理か。
0505デフォルトの名無しさん
2007/09/28(金) 01:25:43それに、そもそも C++/CLI にも delegate はあるんだった。
0506デフォルトの名無しさん
2007/09/28(金) 01:44:230507デフォルトの名無しさん
2007/09/28(金) 06:58:38なるものを使うべきなんですか?それとも .NET Framework
にはほかにも(言語独立の)コンテナが用意されていて
そちらを使うべきなんですか?
0508デフォルトの名無しさん
2007/09/28(金) 09:23:21C# で慣れてるなら .net の Collections を使えばいいし、違和感がないなら STL.NET で
いい。格納するものがネイティブだったら、既存のライブラリでもいいだろうし
0509デフォルトの名無しさん
2007/09/28(金) 21:18:24あと、配列の持つ Clone メソッドっていわゆる浅いコピー
しか作ってくれないんですよね?ハンドルを深くたどって
完全にコピーを作ってくれるようなメソッドはありませんか?
自分でディープコピーしないとだめ?
0510デフォルトの名無しさん
2007/09/28(金) 21:32:100511デフォルトの名無しさん
2007/09/29(土) 00:18:26Primitive型と値型は初期化される
0512デフォルトの名無しさん
2007/09/29(土) 09:20:50自動的にディープコピーまでやってくれるなんてことは
ないんですかね。Microsoft では「簡易コピー」と「詳細コピー」
って呼んでるみたいですが、たとえば System::Array の
Clone は簡易コピーですよね?
0513デフォルトの名無しさん
2007/09/29(土) 15:17:17ArrayのCloneは簡易コピーだけど、
一般的にICloneableインターフェース実装が
簡易コピーでないといけないということはない。
Cloneメソッドが簡易と詳細どちらのコピーをするかは、
実装者に任せるというのが一般的じゃない?
だから、既存のコピー実装が気に入らなければ、
外部で独自のコピー方法を定義するしかないよ。
0514デフォルトの名無しさん
2007/09/30(日) 16:50:243ds maxは、C++/CLI使ってるようなこと言ってた。
プラグインもC++/CLIだし
0515デフォルトの名無しさん
2007/09/30(日) 17:49:500516デフォルトの名無しさん
2007/09/30(日) 18:17:40ネイティブなクラスのインスタンスを格納するか
マネージドなクラスのインスタンスへのハンドルを格納するかに
よるんじゃね?boost::shared_ptr で格納するなら
また話は発散する。
0517デフォルトの名無しさん
2007/09/30(日) 19:02:28(libcmtd.lib等とぶつかる系も回避しました)
DotNetTest2003_00 error LNK2020: 未解決のトークン (0A000013) exception.__ctor
DotNetTest2003_00 error LNK2020: 未解決のトークン (0A000030) exception.__dtor
DotNetTest2003_00 fatal error LNK1120: 外部参照 2 が未解決です。
って出ました。
これは何が原因なのでしょうか?
0518デフォルトの名無しさん
2007/09/30(日) 19:52:08それは C++/CLI なの?
0519デフォルトの名無しさん
2007/09/30(日) 23:09:35stdafx.hに
#include <windows.h>
#pragma comment(lib, "user32.lib")
書いてます
ライブラリのほうは、C++/CLIじゃありません
0520デフォルトの名無しさん
2007/09/30(日) 23:37:16ライブラリは /MDでコンパイルしてます?
0521デフォルトの名無しさん
2007/09/30(日) 23:42:45/ ヽ
/ >~~~~~~~~/
| ∠ \ / |
| √ ⌒ <⌒ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(6 ≡ \| | やる前から負けることを
≡ ┌ __「| <
\ \_( | | 考えるバカがいるかコノヤロー!
\ ー | |
\___| \_____________
0522デフォルトの名無しさん
2007/09/30(日) 23:44:190523デフォルトの名無しさん
2007/10/01(月) 12:13:110524デフォルトの名無しさん
2007/10/01(月) 12:15:210525デフォルトの名無しさん
2007/10/01(月) 13:00:020526デフォルトの名無しさん
2007/10/01(月) 17:40:21おおおお
いけました。
ありがとうございます。
ありがとうございます。
ありがとうございます。
0527デフォルトの名無しさん
2007/10/01(月) 18:04:15修行するぞ。
修行するぞ。
0528デフォルトの名無しさん
2007/10/01(月) 18:17:04いや、C++/CLIをC++に含めるのは問題だと、ISOにバッサリ斬られたけど。
0529デフォルトの名無しさん
2007/10/01(月) 18:22:300530デフォルトの名無しさん
2007/10/01(月) 19:11:490531デフォルトの名無しさん
2007/10/01(月) 20:59:18右を向けば変態的な0x
振り返っても変態的なC++
0532デフォルトの名無しさん
2007/10/01(月) 21:01:04ウホッ! 最高だな(w
0533デフォルトの名無しさん
2007/10/02(火) 16:13:500534デフォルトの名無しさん
2007/10/02(火) 16:31:05CLI もネイティブも多重継承してやるぜ
0535デフォルトの名無しさん
2007/10/02(火) 17:49:09boost::any とか?
boost::optional とか?
0536デフォルトの名無しさん
2007/10/02(火) 18:13:20ネイティブクラスがマネージ型のメンバを持ったり、
マネージクラスがネイティブクラスから派生したりするなど。
0537デフォルトの名無しさん
2007/10/02(火) 18:26:010538デフォルトの名無しさん
2007/10/03(水) 20:17:09ネイティブのライブラリの中で、純粋仮想関数を持つ
クラス X があるんだけど、そのライブラリを /clr なアプリから
リンクすると X のインスタンスなんて一切生成しようと
していないにもかかわらずリンカに怒られるんだよ。
なんでだろう。わかる人いる?
0539デフォルトの名無しさん
2007/10/03(水) 20:30:520540538
2007/10/03(水) 20:47:24よく考えたらコンストラクタの中で巡り巡って
純粋仮想関数が呼び出されているところがあった。
コンストラクタの中で仮想関数を呼ぶようなコードは
実際には仮想関数テーブルを見に行くようなバイナリが
生成されるわけじゃなくて静的に解決された _thiscall
を呼びに行くバイナリが生成されるわけだけど、
純粋仮想関数だとそれは定義されてないから
リンカに怒られているだけだった。
0541デフォルトの名無しさん
2007/10/03(水) 22:05:05ちょっとカッコ悪いよね。
0542デフォルトの名無しさん
2007/10/04(木) 18:59:17Initialize()でないと
0543デフォルトの名無しさん
2007/10/05(金) 13:18:06もっと、こう、いい名前を考えてやらないか?
記号を含まずに検索エンジンでインデックス化しやすく、
かつ独創的で他の言語とは差別化できそうな名前。
しかも人間にとっても発音しやすい名前。
俺は卑猥な名前しか思いつかない。
0544デフォルトの名無しさん
2007/10/05(金) 14:28:390545デフォルトの名無しさん
2007/10/05(金) 15:08:340546デフォルトの名無しさん
2007/10/05(金) 15:19:30巣に(・∀・)カエレ!!
0547デフォルトの名無しさん
2007/10/05(金) 15:37:040548デフォルトの名無しさん
2007/10/05(金) 15:44:200549デフォルトの名無しさん
2007/10/05(金) 15:55:360550デフォルトの名無しさん
2007/10/05(金) 16:55:58Googleって形態素解析してないと思ったたんだけど、
いつの間にかリッチな辞書使ってるんだなぁ。
0551デフォルトの名無しさん
2007/10/05(金) 18:39:540552デフォルトの名無しさん
2007/10/07(日) 13:27:430553デフォルトの名無しさん
2007/10/07(日) 13:31:570554デフォルトの名無しさん
2007/10/07(日) 23:08:41爆破すれ
0555デフォルトの名無しさん
2007/10/08(月) 02:30:34ECMAに通報しました(・∀・)
0556デフォルトの名無しさん
2007/10/08(月) 07:26:390557デフォルトの名無しさん
2007/10/08(月) 07:45:17存在するの?
0558デフォルトの名無しさん
2007/10/08(月) 10:43:310559デフォルトの名無しさん
2007/10/08(月) 11:16:37多重継承ができないじゃん。
0560デフォルトの名無しさん
2007/10/09(火) 13:57:190561デフォルトの名無しさん
2007/10/09(火) 14:08:140562デフォルトの名無しさん
2007/10/10(水) 07:33:540563デフォルトの名無しさん
2007/10/10(水) 10:38:200564デフォルトの名無しさん
2007/10/10(水) 16:33:13/clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall' が無効です
言われた。
仲直りするにはどうしたらいいですか?
stdcallは譲れない
0565デフォルトの名無しさん
2007/10/10(水) 17:01:070566デフォルトの名無しさん
2007/10/10(水) 17:36:17これって、価値ある?
0567デフォルトの名無しさん
2007/10/10(水) 19:05:030568デフォルトの名無しさん
2007/10/11(木) 02:43:15に変更したら、
d3d9.lib系エラーが出まくったった
1>d3dx9.lib(cfont.obj) : error LNK2019: 未解決の外部シンボル __imp__GetGlyphOutlineA@28 が関数 "private: int __thiscall D3DXCore::CFont::ValidGlyph(unsigned int)" (?ValidGlyph@CFont@D3DXCore@@AAEHI@Z) で参照されました。
1>d3dx9.lib(cfont.obj) : error LNK2019: 未解決の外部シンボル __imp__DeleteDC@4 が関数 "public: __thiscall D3DXCore::CFont::~CFont(void)" (??1CFont@D3DXCore@@QAE@XZ) で参照されました。
...
/clr:pure
で
STDMETHOD
は、使えないんですか?
0569デフォルトの名無しさん
2007/10/11(木) 10:09:14/clr をつけたら、必要なライブラリは明示的に追加しろや
それか MDX か XNA でも使うんだな
0570デフォルトの名無しさん
2007/10/11(木) 18:22:36手順4だけでいいからやれ。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
0571デフォルトの名無しさん
2007/10/11(木) 22:06:35生成したクラスから生成元のクラスへコールバックしたいと思ってます。
AsyncDeligateを使えばいいのかと思うんですが、
この関数って実は、自クラス内のメソッドのコールバックにしか使えないの
でしょうか?
ref class MyClass{
void Method{
AsyncDeligate^ asyncDeligate = gcnew(this, &MyClass::Func);
}
void Func(IAsyncResult ar)
{
}
};
と自クラスでAsyncDeligateは使えそうだけど、生成したクラス→生成元
クラスへのコールバックを実現するために、生成元のクラスで、どのように
関数を渡したらいいのか(AsyncDeligateをどのように使うのか?)が
不明です。
そもそもAsyncDeligateでこれを実現することはできるのでしょうか?
0572デフォルトの名無しさん
2007/10/11(木) 22:23:120573571
2007/10/11(木) 22:31:31親クラス→生成元インスタンスってことですか?
生成するクラスをDestClassとすると
DestClass destClass(this);
みたいなことでしょうか?
0574デフォルトの名無しさん
2007/10/12(金) 00:34:52普通にイベントで実装したらまずい?非同期操作はどの辺でからむのだろ。
0575デフォルトの名無しさん
2007/10/12(金) 01:29:410576デフォルトの名無しさん
2007/10/12(金) 08:49:21AsyncResult にサンプルあるじゃん
0577デフォルトの名無しさん
2007/10/14(日) 00:49:28ご冥福をお祈りいたします。
0578デフォルトの名無しさん
2007/10/14(日) 01:19:160579デフォルトの名無しさん
2007/10/14(日) 01:34:070580デフォルトの名無しさん
2007/10/20(土) 14:42:150581デフォルトの名無しさん
2007/10/20(土) 14:47:540582デフォルトの名無しさん
2007/10/20(土) 18:29:49ドトネトのことを全く知らないと混乱するかも。
あと、古い情報(Managed C++)を見てしまって
混乱していた人がここに約一名。
0583デフォルトの名無しさん
2007/10/21(日) 20:24:040584デフォルトの名無しさん
2007/10/28(日) 22:39:07次世代WindowsからC#しかサポートしない、Windows
プログラミングやりたかったらVB.netやC#使え!
と嫌がらせしてくるんじゃないかと不安。
VBやC#が嫌いだから困る。
今はMFC使っているが、今後もMFCは
サポートされるのだろうか?
MFCが駄目ならC++/CLIを使うが、それも
サポートされないとなると。。。
0585デフォルトの名無しさん
2007/10/29(月) 00:54:19MFC のサポートが切れたら、WTLでも使えばいい
RADなくても大丈夫でしょ
0586デフォルトの名無しさん
2007/10/29(月) 07:37:410587デフォルトの名無しさん
2007/10/29(月) 11:13:27こういう事いうからC++基地外は。。。
RADはあった方がいい。
0588デフォルトの名無しさん
2007/10/29(月) 11:35:540589デフォルトの名無しさん
2007/10/29(月) 14:17:530590デフォルトの名無しさん
2007/10/29(月) 17:04:22C++/CLI のデザイナのこと?
0591デフォルトの名無しさん
2007/10/29(月) 17:12:20コードジェネレータ以降のもの。
0592デフォルトの名無しさん
2007/10/29(月) 17:24:180593デフォルトの名無しさん
2007/10/29(月) 21:20:000594デフォルトの名無しさん
2007/10/29(月) 22:51:300595デフォルトの名無しさん
2007/10/29(月) 23:15:210596デフォルトの名無しさん
2007/10/30(火) 00:10:200597デフォルトの名無しさん
2007/10/30(火) 09:03:02しかし、C++のRADができあがると開発者がオプソに流れちゃう。
0598デフォルトの名無しさん
2007/10/30(火) 10:47:58それが C++/CLI + フォームデザイナではないのか?
あくまでネイティブにこだわる?
0599デフォルトの名無しさん
2007/10/30(火) 10:56:11これは詭弁。
実体は、M$が非ネイティブにこだわる。
gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
ターゲットマシンが別0$になっちゃう。
0600デフォルトの名無しさん
2007/10/30(火) 11:02:02pure C++ で Win32 アプリがRADで開発できても、
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
ってことにはならないと思うが。
0601デフォルトの名無しさん
2007/10/30(火) 11:17:25ってことにはならない、じゃなくて、M$が阻止する。
売る側からしたら端末みたく膨大な数を売るものだったら1台あたりに0$代払いたくない。
開発マシンとターゲットマシンと別々なのはふつー。
Winの前の時代なら、UNIXで開発&Makeして汎用機(メインフレム)に転送していた。
0602デフォルトの名無しさん
2007/10/30(火) 11:18:57あ、やっぱ、コンパイルは汎用機でやってたね。
0603デフォルトの名無しさん
2007/10/30(火) 11:21:44そういう意味じゃなくてさ、MS の作る Win32 アプリの RAD の出してきたコードを
gccでコンパイルしても、実行できる環境が Linux にある?
Wine がそんなに実用的になってる?
0604デフォルトの名無しさん
2007/10/30(火) 11:48:30Windowsヘッダーがgcc環境に移植されてM$が慌てたのを知らないの?
RADなら製品としては成立しなくて終了したっぽいけど、Delphi / Kylix、 C++ Builder / C++ Builder Linux があるお。
0605デフォルトの名無しさん
2007/10/30(火) 11:53:54あ、C++ BuilderにwxWidgetsのプラグインがあってポトペタできる。
wxWidgetsだからLinuxとMacは対応できる。
0606デフォルトの名無しさん
2007/10/30(火) 11:57:58MS がクロスプラットフォームな UI フレームワークを採用した RAD を
出すわけないと思うけど。pure C++ になったとしても、Win32 べったりでそ。
次はそれに文句言うの?
それとも Wine があるから
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
だ、って主張?
>>604
漏れも cygwin は使ってるけど、そういうおまいは使ってるのか?
きつい言葉だが、現実見えてる?
0607デフォルトの名無しさん
2007/10/30(火) 12:00:06MFCアプリケーションをLinuxに移植する
ttp://www.ibm.com/developerworks/jp/linux/library/l-mfc/
0608デフォルトの名無しさん
2007/10/30(火) 12:55:39RAD にかんしては mono で Windows.Form
が使えるかどうかってのがメインの話題にならんの?
そういう俺は Hello world しか試したことがないよ。
mono では。
0609デフォルトの名無しさん
2007/10/30(火) 13:01:010610デフォルトの名無しさん
2007/10/30(火) 13:06:450611デフォルトの名無しさん
2007/10/30(火) 13:07:060612デフォルトの名無しさん
2007/10/30(火) 13:12:210613デフォルトの名無しさん
2007/10/30(火) 13:13:080614デフォルトの名無しさん
2007/10/30(火) 13:25:470615デフォルトの名無しさん
2007/10/30(火) 15:08:48int sample(int (* func)(void*), void* arg);
というCの関数を呼び出したいのですが、argにマネージオブジェクトを引き渡す手段に悩んでいます。
struct Arg { gcroot<array<int>^> obj; };
と
int on_callback(void* arg) {
Arg* parg = (Arg*)arg;
Console::WriteLine(part->obj->Length);
}
を用意して
Arg arg;
arg.obj = gcnew array<int>(4);
sample(on_callback, &arg);
みたいな方法を考え付いて一見問題なく動いているように見えますが、何か問題があったりもっと一般的な方法があったりするんでしょうか。
ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう?
0616デフォルトの名無しさん
2007/10/30(火) 16:54:58その方法でいいと思うよ。
>ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう?
その為の混合モードだから。関数はマネージドとネイティブの両方のエントリーを持っている。
#pragma unmanagedを使うのは DllMainとlongjmpのときくらいじゃなったかな。
0617デフォルトの名無しさん
2007/10/30(火) 18:20:31ありがとうございます。
これで実装を進めることにします。
0618デフォルトの名無しさん
2007/10/31(水) 01:42:07アンマネージへの変換はMSDNの参照などによりわかったのですが、
マネージへはまだわかっておりません。
アンマネージに変換して使用して配列を扱ってもいいのですが、なるべくマネージ型でまとめたいと思いまして・・・
そもそも無理だとしたらIntPtrのReadByteを使うしかありませんか?
どなたかご教授ください。
0619デフォルトの名無しさん
2007/10/31(水) 01:49:26なにがやりたいのかさっぱり和漢ねえ
0620デフォルトの名無しさん
2007/10/31(水) 07:42:280621デフォルトの名無しさん
2007/10/31(水) 08:04:03配列はオブジェクトなので新しく作る必要がある。
C++/CLI使っててポインタを使わない意味はないだろ。
0622デフォルトの名無しさん
2007/10/31(水) 14:11:180623デフォルトの名無しさん
2007/10/31(水) 14:13:53―――――――――――――‐┬┘
|
____.____ |
| | | |
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ C++/CLI
0624デフォルトの名無しさん
2007/10/31(水) 16:38:390625デフォルトの名無しさん
2007/10/31(水) 19:27:060626デフォルトの名無しさん
2007/10/31(水) 21:46:23マネージ型には違いないぞ。
0627デフォルトの名無しさん
2007/11/01(木) 09:56:330628デフォルトの名無しさん
2007/11/01(木) 09:58:54C++に中間吐かせるなんて、ビャーネが知ったら泣くぞ
0629デフォルトの名無しさん
2007/11/01(木) 10:05:130630デフォルトの名無しさん
2007/11/01(木) 10:09:500631デフォルトの名無しさん
2007/11/01(木) 10:28:510632デフォルトの名無しさん
2007/11/01(木) 10:43:22既存のC/C++ライブラリを使いたいわけ。
0633デフォルトの名無しさん
2007/11/01(木) 13:46:59そういう人がなぜこのスレッドにいるのかわからん。
0634デフォルトの名無しさん
2007/11/01(木) 13:53:20.NET「本音」相談室
ttp://www.atmarkit.co.jp/fwin2k/dnitpro/honneqa01/honneqa01_01.html
0635デフォルトの名無しさん
2007/11/01(木) 19:00:04//Form1.h
#pragma unmanaged
class hogehoge{};
#pragma managed
Form1を作ったときに自動生成されたやつ
private: System::Void start(System::Object^ sender, System::EventArgs^ e) {
hogehoge test;
}
とやると動くのは分かったんですが、デザイナに
クラス Form1 はデザインできますが、ファイルの最初のクラスではありません。Visual Studio では、デザイナはファイルの最初のクラスを使用する必要があります。クラスがファイルの最初のクラスになるようにクラス コードを移動して、デザイナを再度読み込んでください。
と怒られてしまいます。
いい方法を教えてくださいmm
0636デフォルトの名無しさん
2007/11/01(木) 19:04:11IDEが作成したファイルに手を加えるのはあまりよくない。
別のファイルに書こう。
0637デフォルトの名無しさん
2007/11/01(木) 19:11:14ええ、絶対間違ってると思ってtest.cppってファイルを作って同じのを書いたのですが、
hogehoge という型指定子が見つかりませんと言われてしまうんです。
0638635
2007/11/01(木) 19:24:35class hogehoge{};
//Form1.h
>>635の#pragma managedより下
って書いてみたんですけど、ヘッダーがコンパイルされたときには
test.cppはまだコンパイルされてないからこういう事になってるんですかね・・・?
0639デフォルトの名無しさん
2007/11/01(木) 19:28:28先にCをやってきな
0640デフォルトの名無しさん
2007/11/01(木) 19:38:55C++もだろ。
0641デフォルトの名無しさん
2007/11/01(木) 19:39:250642635
2007/11/01(木) 19:41:44とりあえずここに書いてることは大体理解出来るんですが、
足がかりになるようなページ教えていただけませんか?
0643デフォルトの名無しさん
2007/11/01(木) 20:05:07Form.h が メインの cpp に include されてコンパイルされる前に、hogehoge なるクラスが
定義されていないといけないんだよ
だから、hogehoge をヘッダに定義して、Form1.h で include すればいいんだけど
この説明の意味、わかる?
次はたぶん、混合型はサポートされていません。て、エラーになると予言(w
0644635
2007/11/01(木) 20:28:37ヘッダーを作らないといけないのを全く理解してませんでした。
IDEでクラスを作って見よう見まねでいじったらうまく行きました^^
丁寧にありがとうございましたmm
0645デフォルトの名無しさん
2007/11/02(金) 10:16:100646デフォルトの名無しさん
2007/11/02(金) 12:23:450647デフォルトの名無しさん
2007/11/02(金) 16:58:280648デフォルトの名無しさん
2007/11/03(土) 09:36:000649デフォルトの名無しさん
2007/11/05(月) 01:27:440650デフォルトの名無しさん
2007/11/05(月) 14:08:18実は俺も気になってた。
0651デフォルトの名無しさん
2007/11/05(月) 16:50:503ds/maxの会社
0652デフォルトの名無しさん
2007/11/05(月) 17:38:42じゃあみんなで補完しあおうぜ(=゚ω゚)ノ
議論盛り上がりまくり(゚д゚)ウマー
ドトネト対応(・∀・)イイ!
ってのが製作者の狙いということか( ゚Д゚)ハッ
いや…なん違うような(;´Д`)
0653デフォルトの名無しさん
2007/11/05(月) 21:55:560654デフォルトの名無しさん
2007/11/06(火) 00:15:350655デフォルトの名無しさん
2007/11/06(火) 00:37:10> なすてnullptrなんて作たんだろ、nullで統一してよ
'\0' と混同する人がいないとも限らないからかな…
0656デフォルトの名無しさん
2007/11/06(火) 00:52:35そんなコードでも変更なしに使えるようにという配慮では?
0657デフォルトの名無しさん
2007/11/08(木) 18:41:43cppファイルなんていらんのですよ
0658デフォルトの名無しさん
2007/11/08(木) 20:35:57まさか、プリコンパイルヘッダに全部うわなんだおまえやめr
0659デフォルトの名無しさん
2007/11/09(金) 10:19:51このあいだ、基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって仕事があって
何を使っても良かったし、ずっと自分が面倒みる事になる事は分ってたから
C++/CLI のラッパーで対応したが。
レアケースなのは間違いないな。
0660デフォルトの名無しさん
2007/11/09(金) 10:29:36これ、何ていうドトネトアプリの破滅。
0661デフォルトの名無しさん
2007/11/11(日) 16:39:40あ、やはりそうなのか?
0662デフォルトの名無しさん
2007/11/11(日) 17:10:260663デフォルトの名無しさん
2007/11/15(木) 19:56:200664デフォルトの名無しさん
2007/11/15(木) 20:35:39private: virtual Object^ Clone() = ICloneable::Clone { ... }
0665デフォルトの名無しさん
2007/11/15(木) 21:43:18raise とか
0666デフォルトの名無しさん
2007/11/15(木) 22:15:02マイナー杉
0667デフォルトの名無しさん
2007/11/16(金) 11:38:24これ、何てDelphi?
0668デフォルトの名無しさん
2007/11/20(火) 22:11:41STL/CLI使えるぽ。
0669デフォルトの名無しさん
2007/11/21(水) 00:02:110670デフォルトの名無しさん
2007/11/24(土) 09:45:510671デフォルトの名無しさん
2007/11/24(土) 09:49:100672デフォルトの名無しさん
2007/11/24(土) 11:01:19Controlから派生させて自作したよ('A`)
(VirtualModeもパフォーマンスがよくなかった・・・)
C#だとAPIや定数の定義が面倒だが、C++/CLIだとWin32ヘッダそのままインクルードして使えるから楽でいい。
だがそんなことするくらいなら最初っから
つMFC
・・・そんな感じだ。
0673デフォルトの名無しさん
2007/11/24(土) 11:21:38Notify系メッセージならWM_REFLECTION付きで当該コントロールに来るし。
0674デフォルトの名無しさん
2007/11/24(土) 11:22:080675デフォルトの名無しさん
2007/11/24(土) 21:35:28メッセージぐらいではどうにもならんのですよ。
WM_NOTIFY + WM_REFLECTでメッセージ引っ掛けても、先が続かん
0676デフォルトの名無しさん
2007/11/27(火) 18:43:18CLIを勉強する意味ある?
0677デフォルトの名無しさん
2007/11/27(火) 18:44:300678デフォルトの名無しさん
2007/11/27(火) 18:48:440679デフォルトの名無しさん
2007/11/28(水) 12:51:24C++/CLI は不要だが
0680デフォルトの名無しさん
2007/11/30(金) 00:41:11調べるにはどうすればいいんでしょうか
C#では obj is T とするところです
0681デフォルトの名無しさん
2007/11/30(金) 00:58:200682デフォルトの名無しさん
2007/11/30(金) 08:42:540683デフォルトの名無しさん
2007/11/30(金) 14:51:10nullptrを返してほしいなら、dynamic_cast。
if分の条件でスマートに使いたいなら、T::typeid->IsSubclassOf(obj)もしくはIsInstanceOfType()の組み合わせで。
0684デフォルトの名無しさん
2007/12/01(土) 08:30:52{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator();
};
コンパイルエラーになるのだが、こういう実装はだめなの?
0685デフォルトの名無しさん
2007/12/01(土) 08:47:51System::Collections::IEnumerable::GetEnumeratorの方の宣言がない
0686デフォルトの名無しさん
2007/12/01(土) 08:57:42public ref class A : Generic::IEnumerable<Object^>
{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator();
virtual Collections::IEnumerator^ GetEnumerator();
};
してみたけど、だめでした。
error C2556: 'System::Collections::IEnumerator ^A::GetEnumerator(void)' : overloaded function differs only by return type from 'System::Collections::Generic::IEnumerator<T> ^A::GetEnumerator(void)'
with
[
T=System::Object ^
]
0687デフォルトの名無しさん
2007/12/01(土) 09:29:04別名定義する必要がある。リファレンスのinterface classの解説見れ
0688デフォルトの名無しさん
2007/12/01(土) 09:51:04以下でコンパイル通りました。
public ref class A : Generic::IEnumerable<Object^>
{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator() = Generic::IEnumerable<Object^>::GetEnumerator;
virtual Collections::IEnumerator^ GetEnumerator2() = Collections::IEnumerable::GetEnumerator;
};
ありがとうございました。
0689デフォルトの名無しさん
2007/12/01(土) 15:15:440690デフォルトの名無しさん
2007/12/01(土) 16:34:04早速private: + sealedにしました。
重ね重ねありがとう
0691デフォルトの名無しさん
2007/12/01(土) 16:56:000692デフォルトの名無しさん
2007/12/01(土) 17:58:42CLI 上の制約?
0693デフォルトの名無しさん
2007/12/02(日) 02:20:10Genericsは共変/反変をサポートしてるけど
標準クラスライブラリと有名どころの言語がサポートしていないので事実上死に設定
0694デフォルトの名無しさん
2007/12/02(日) 02:33:110695デフォルトの名無しさん
2007/12/04(火) 21:08:190696デフォルトの名無しさん
2007/12/08(土) 17:56:12VS2005にてC++/CLI使用中です。
Hoge()というアンマネージドクラスが既にあり、これをマネージ環境で使うことを考えています。
このとき、
Hoge *hoge0 = new Hoge();
Hoge *hoge1 = new Hoge();
Hoge *hoge2 = new Hoge();
・・・
というのを
Hoge *hoge[10];
hoge[0] = new Hoge();
hoge[1] = new Hoge();
hoge[2] = new Hoge();
・・・
のよう配列にするにはどうしたらよいでしょう?
(マネージ環境だと Hoge *hoge[10]; の時点でCLI配列使え!って怒られてしまうんですよね・・・)
0697デフォルトの名無しさん
2007/12/08(土) 18:16:54エラーメッセージとか番号とかちゃんと書けよ
0698デフォルトの名無しさん
2007/12/08(土) 18:21:12アンマネージ内で使いたいんですが、#include<list>とか<vector>とかすると
error C2039: 'free' : '`global namespace'' のメンバではありません。 e:\program files\microsoft visual studio 8\vc\include\cstdlib
error C3861: 'free': 識別子が見つかりませんでした e:\program files\microsoft visual studio 8\vc\include\malloc.h
とエラーが出ます。。。
0699696
2007/12/08(土) 18:25:37アンマネージクラスだと普通にできますが、マネージ環境だと
Hoge *hoge[10]; のところで
「error C4368: hoge' をマネージ 'test01:managedClass01' のメンバとして定義できません。混合型はサポートされていません」
といったエラーになります。
このエラーでググると「マネージ環境なんだからarray<>使うべし」といった見つかるのですが、
例文はintの配列とかそんなんばっかりで、今回のような場合はどうすりゃいいのか・・・といった感じです。
よろしくお願いいたします。
0700デフォルトの名無しさん
2007/12/08(土) 18:38:07ttp://msdn2.microsoft.com/ja-jp/library/xhfb39es(VS.80).aspx
Hoge *hoge[10]をメンバにしようとしてるんだろ。
0701デフォルトの名無しさん
2007/12/08(土) 18:41:38普通に使えるが?
ファイルぶっ壊れてるんじゃね?
0702デフォルトの名無しさん
2007/12/08(土) 21:20:59まじですか。。。
再インストールしてみます、ありがとですω
0703デフォルトの名無しさん
2007/12/09(日) 00:51:43再インストールしたところ思いっきり動きました。
5時間悩んでたのが馬鹿らしい。。。
ありがとでした。
0704デフォルトの名無しさん
2007/12/09(日) 09:02:32やりたいことと少し違うかも知れんが、
new N[10]で10個のオブジェクトの生成は済んでるから注意な。
class N { }; // native class
ref class M { // managed class
N *n;
public:
M() { n = new N[10]; }
~M() { delete [] n; }
!M() { delete [] n; }
};
0705デフォルトの名無しさん
2007/12/09(日) 11:06:54_ptrs[0] = IntPtr( new Hoge() );
・・・
でよくね?
0706デフォルトの名無しさん
2007/12/09(日) 19:48:19諦めてマクロにするしかない?
0707デフォルトの名無しさん
2007/12/15(土) 09:08:28は?お前バカか?
.NET開発のデファクトスタンダードはC#だろ。常識的に考えて
いまさら時代遅れのC++なんて勉強する気しねーよ。
俺はJavaから始めたからよ。
で、ホントはC#よりC++/CLIのほうが未来ありそうなん?
0708デフォルトの名無しさん
2007/12/15(土) 11:09:09C++ と C++/CLI の区別が出来ない人は
他の人を馬鹿呼ばわりする資格はありません
0709デフォルトの名無しさん
2007/12/15(土) 11:30:45http://www.microsoft.com/japan/msdn/vs05/visualc/VS05Cplus.aspx
たぶんこういうのが元ネタだけどタイトルの割に内容は微妙にネガティブw
0710デフォルトの名無しさん
2007/12/15(土) 13:20:050711デフォルトの名無しさん
2007/12/15(土) 13:52:34マーシャリングライブラリが付くって話は聞いたことがあるけど あとSTLと
この辺は言語そのものじゃないしな
0712デフォルトの名無しさん
2007/12/16(日) 01:18:30C++ がすでに何でもありなところを、さらに C++/CLI でなんでもありになってるので好感もてない?ポインタがふたとおりあるとか。
0713デフォルトの名無しさん
2007/12/16(日) 01:27:010714デフォルトの名無しさん
2007/12/16(日) 02:35:25普通にクラス作って gcnew したらマネージドになってくれるような機能
0715デフォルトの名無しさん
2007/12/16(日) 10:15:370716デフォルトの名無しさん
2007/12/16(日) 10:37:320717デフォルトの名無しさん
2007/12/18(火) 01:30:20C++にマネージコードが混ざるとうっとおしい。
0718デフォルトの名無しさん
2007/12/18(火) 08:43:230719デフォルトの名無しさん
2007/12/18(火) 11:58:380720デフォルトの名無しさん
2007/12/18(火) 13:10:260721デフォルトの名無しさん
2007/12/18(火) 13:40:580722デフォルトの名無しさん
2007/12/18(火) 13:44:580723デフォルトの名無しさん
2007/12/18(火) 13:46:48(U )つ
u u
0724デフォルトの名無しさん
2007/12/18(火) 15:54:400725デフォルトの名無しさん
2007/12/18(火) 17:18:280726デフォルトの名無しさん
2007/12/18(火) 17:24:39C++/CLIはどうしても.NETが必要な人のためのものだからな
0727デフォルトの名無しさん
2007/12/19(水) 01:40:550728デフォルトの名無しさん
2007/12/19(水) 10:06:300729デフォルトの名無しさん
2007/12/19(水) 11:23:58APIのドキュメントと長時間睨めっこしなくて済む
0730デフォルトの名無しさん
2007/12/19(水) 11:39:590731デフォルトの名無しさん
2007/12/19(水) 14:20:220732デフォルトの名無しさん
2007/12/25(火) 21:21:14そもそもC#で作ったデバイスドライバなんてあるの?
0733デフォルトの名無しさん
2007/12/26(水) 00:46:25なるべく使い終わったクラスを即時メモリ解放したくて、
delete しているのですが、タスクマネージャで確認しても、解放しているようには見えません。
マネージもアンマネージも、deleteしたタイミングでメモリ解放されるのでしょうか?
それとも、マネージはGCに頼るしかなく、アンマネージはdeleteのあるタイミングでメモリ解放されるのでしょうか?
0734デフォルトの名無しさん
2007/12/26(水) 00:50:47deleteしたからといって、即座にメモリがOSに返還されるわけではないよ。
0735デフォルトの名無しさん
2007/12/26(水) 09:49:21追いかけたことないけど,「必要なら持っていっても
いいよ」っていうマークでもつけておいて必要に応じて
OS が回収できるようにしているのかな?
0736デフォルトの名無しさん
2007/12/26(水) 11:36:140737デフォルトの名無しさん
2007/12/26(水) 12:43:27ん?システムコールに丸投げ?
もっと,こう,自前でヒープを管理していると思うんだけど.
0738デフォルトの名無しさん
2007/12/26(水) 12:50:54ちょいと階層は深いけど最終的にはそうなってるようだね>VC2005で確認。
そうなると500KB以上は個別にVirtualAlloc/VirtualFreeで、
小さいのは一元管理で縮小せずに再利用だろう。
もしかしてLINKオプションの/HEAPオプションは使われてないかも?
0739デフォルトの名無しさん
2007/12/26(水) 18:04:01Win32APIはシステムコールではないよ。
Windowsのシステムコールは非公開でげすよ。
0740デフォルトの名無しさん
2007/12/26(水) 18:06:00システムコールとは、オペレーティングシステム (OS)
(より明確に言えばOSのカーネル)の機能を呼び出すために使用される機構のこと。
実際のプログラミングにおいては、OSの機能は関数 (API) 呼び出しによって実現されるので、
OSの備える関数 (API) のことを指すこともある
0741デフォルトの名無しさん
2007/12/26(水) 21:10:12Windows においてはシステムコールはサブシステムの裏に隠れて
いて直接呼び出すことはできないってこと?
Win32 API って POSIX レイヤと同じレイヤ?
0742デフォルトの名無しさん
2007/12/27(木) 15:37:07これをシステムコールというのかはわからないけど、
そういうサブシステムの下に位置するネイティブAPIと呼ばれるがNTDLL.DLLから公開されている。
9xの場合はVxDをDeviceIOControlで呼び出すことがシステムコールに相当するといっていいと思う。
0743デフォルトの名無しさん
2007/12/27(木) 22:22:480744デフォルトの名無しさん
2007/12/27(木) 22:31:210745デフォルトの名無しさん
2007/12/31(月) 00:50:26おとなしくC#いけって話かなぁ。。。
ttp://homepage3.nifty.com/ishidate/vcpp05_6/vcpp05_6.htm
ここを参考にしながらForm1_Paintが呼ばれたときに
DrawlineとかDrawRectangleで描画するプログラム書いてるんですが、
その処理がとても重いので(他の理由もあるのですが)ボタンを押されたときだけ画面を更新するようにしたいんですが、どうしたら良いでしょうか。
(Form1_Paintだとウィンドウの移動などでも更新されてしまうので、それを避けたいということです。)
button1ってボタン作って、button1_Clickに全部書きゃ良いじゃんとか思ったんですが、
引数が(System::Object^ sender, System::EventArgs^ e)なのでe->Graphicsを使えなくて困ってます。
0746デフォルトの名無しさん
2007/12/31(月) 05:08:13button1_Clickで描画、PaintでBitBltが妥当じゃね?
0747デフォルトの名無しさん
2007/12/31(月) 10:55:55Form.CreateGraphicsは?
.NET使うならC#は読み書きできるようになった方がいろいろ便利だよ
0748デフォルトの名無しさん
2008/01/01(火) 10:16:58>>746-747
レスありがとうございます。
まず>>747のようにbutton1_Clickに
Graphic^ g=CreateGraphics();
としてボタンでの描画は成功したんですが、今度はForm1_Paintが呼ばれたときに描画されたものが消えてしまったので
>>746の方法をとろうとしたんですが、ドキュメント見たりググったりしてもいまいち描画バッファ→画面のBitBltのやり方が
分からなかったので、
http://www.atmarkit.co.jp/fdotnet/dotnettips/458picboxdraw/picboxdraw.html
を見ながらpictureBox1を作って、
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Graphics^ g = Graphics::FromImage(pictureBox1->Image);
drawRandomWalk(g);
pictureBox1->Refresh();
}
こんな感じで解決しました。結果的には>>746の方法に近い?解決策となりました。
C#も勉強してみます(’・ω・)
ありがとうございました。
0749デフォルトの名無しさん
2008/01/07(月) 19:39:43ReleaseでDLLをBuildするとリンクエラーが発生します。
>libtest.obj : error LNK2022: metadata operation failed (80131195) : カスタム属性が適合しません: (0x0c00021b)。
>Stdafx.obj : error LNK2022: metadata operation failed (80131195) : カスタム属性が適合しません: (0x0c000261)。
Debugでビルドするとエラーが発生しません。
make_publicはStdafx.h(PreCompileヘッダ)に記述しているのですが、
どう対処すればよいのでしょうか?
0750デフォルトの名無しさん
2008/01/13(日) 10:05:33ということは、ガベージコレクションが走る際に呼び出すアンマネージリソースの処理は
スレッドセーフにしておかなければならないということかな?
具体的には参照カウントオブジェクトのラッパーをC++/CLIで作って.NETで使おうとしてるんだけど
Release関数をスレッドセーフにしなきゃならんのかなと。
(Interlockedにすればいいだけの話なんで、それ自体はどうってことないのですが)
0751デフォルトの名無しさん
2008/01/13(日) 11:45:060752デフォルトの名無しさん
2008/01/13(日) 13:40:31本当に最後の手段なんだから、基本的にはGC任せにしない方がいいよ
0753デフォルトの名無しさん
2008/01/13(日) 13:43:490754デフォルトの名無しさん
2008/01/13(日) 13:48:15ありがとうございます。
明示的にDisposeてことになると思うんですが、
そうなるとDisposeしなければならないインスタンスを持つクラスがデータ構造の奥深くにあると
どんどんDispose呼び出しが感染していって親クラスのとこまで行ってしまいますよね。
面倒くさいなぁと思いつつも、仕方が無いなぁとも感じてるんですが
やっぱりそんなもんですかね…
0755デフォルトの名無しさん
2008/01/13(日) 23:19:17頭切り替えるしかねっス。
ちなみにアンマネージリソース絡みでSafeHandleてのもあるんスが、
これの経緯とか調べるとさらに頭痛のタネが増えるのでオススメっす。
0756デフォルトの名無しさん
2008/01/19(土) 09:08:52マネージ型の配列や構造体をメソッドに渡すとき、”^”をつけますが、 この渡し方で配列や構造体の”ポインタ”が渡されると思っていました。
”^”の引数があるメソッドを持ったクラスライブラリをVBで参照したら “ByVal”となっていました。
ここで質問ですが、”^”でなく”^%”としなければ配列や構造体が 値渡し(配列全体がCopy?)になるのでしょうか?%をつける、 という概念がC++/CLIで現れたため悩んでいます。
できるならば 配列や構造体は値渡しでなく、アドレス渡し、配列渡しをしたいのですが・・・
0757デフォルトの名無しさん
2008/01/19(土) 09:13:22%はC++の&、C#のref/outに当たる参照渡し
「参照型 参照渡し」で調べればいいよ
0758デフォルトの名無しさん
2008/01/19(土) 09:54:02ありがとうございます。調べてみました。参照型の^引数はアドレスをコピー、参照型の^%渡しはアドレスを参照渡しする、ということですね。
ということは参照型の場合、どちらの方法で渡してもパフォーマンスに大きな影響はないということでしょうか。
参照型と参照渡しの違いを理解しないといけないのですね。
0759デフォルトの名無しさん
2008/01/19(土) 10:52:27参照で渡すことが多いんだったら初めから参照型にする
0760デフォルトの名無しさん
2008/01/20(日) 22:59:010761デフォルトの名無しさん
2008/01/22(火) 21:33:21今からやるならC#のがいいかね?
0762デフォルトの名無しさん
2008/01/22(火) 22:06:34もしも必要に迫られたときにやっと登場する言語だからね
0763デフォルトの名無しさん
2008/01/22(火) 22:54:300764デフォルトの名無しさん
2008/01/22(火) 22:55:230765デフォルトの名無しさん
2008/01/26(土) 16:42:52そりゃ今からやるならC#だな
それよりVB.NETがいいに決まってるけどw
少なくともC++/CLIなんて論外だ
まあ.NETやること自体が間違いかもしれないが・・・
0766デフォルトの名無しさん
2008/01/29(火) 01:51:490767デフォルトの名無しさん
2008/02/03(日) 23:32:44やり方がわからないので教えてください。
ref class hoge {
event EventHandler ^ev;
};
class hoge_wrapper {
hoge ^_hoge;
void OnHogeEv(System::Object ^o, System::EventArgs ^);
hoge_wrapper(hoge ^_hoge) {
this->_hoge = _hoge;
_hoge->ev += gcnew System::EventHandler (this, &hoge_wrapper::OnHogeEv);
}
};
こんなコードを書いているのだけど EventHandler のコンストラクターでC3364のコンパイルエラーがでて怒られます。
0768デフォルトの名無しさん
2008/02/03(日) 23:52:38そりゃ、混合型は駄目だろ
ネイティブはネイティブ、マネージドはマネージドで扱わないと
0769デフォルトの名無しさん
2008/02/04(月) 00:25:09gcroot<hoge ^> _hoge;
って宣言してました。転記ミスです。
0770デフォルトの名無しさん
2008/02/04(月) 00:59:04ポインタ this を渡してるだろ?
マネージドでイベントアダプタみたいな物を作ったら?
0771デフォルトの名無しさん
2008/02/05(火) 01:13:10中身を見てみたら 770 さんの言うとおりの動きなのかな?
とりあえず解決しましたー。ありがとです。
0772デフォルトの名無しさん
2008/02/06(水) 09:11:080773デフォルトの名無しさん
2008/02/06(水) 10:03:29使えない
ttp://www.codeplex.com/linqextensions
LINQ のパフォーマンスから見ると、C++/CLI での価値を感じない
0774デフォルトの名無しさん
2008/02/06(水) 10:22:23C++/CLI での価値を感じない(笑)
0775デフォルトの名無しさん
2008/02/06(水) 10:37:31似たようなことがライブラリで実現できるように見えるが.
0776デフォルトの名無しさん
2008/02/06(水) 10:40:41VistaやLeopardが大々的なマーケティングと共に投入されることを批判して:
「OSは(アプリケーションやユーザーからは)完全に透明であるべきだ」。
「マイクロソフトやアップルにとって、(OSの新バージョンは) 環境をまるごとコントロールして
ユーザーにアプリケーションやハードウェアの買い換えを強いる手段になっている」。
0777デフォルトの名無しさん
2008/02/06(水) 10:52:09ライブラリで似たようなことができるから、言語でのサポートは不要
これで 0x の auto とかが出てこれば、もう少し CLinq もすっきりと書ける
言語仕様に手を入れると、標準化団体が騒ぐし
0778デフォルトの名無しさん
2008/02/06(水) 10:59:38>「OSは(アプリケーションやユーザーからは)完全に透明であるべきだ」
透明であるべきだ,ってどういう意味なんだろうね.
意識しなくていいものであるべきだってこと?
だったら,Linux ってその逆行ってない?
カーネルのマイナーバージョンが変わっただけでモジュール類
コンパイルし直さないと使えないデバイス続出だったり.
まさしくOS部分が一番の障壁になってるとおもうのだが.
自分でいじる分にはそれが楽しいけど.
0779デフォルトの名無しさん
2008/02/06(水) 11:00:50ラムダ式は boost のもいいけど
ちゃんと言語でサポートしてほしいよ.
0780デフォルトの名無しさん
2008/02/06(水) 11:08:17Expression Treeサポートって今の言語機能でどうやるの?
0781デフォルトの名無しさん
2008/02/06(水) 11:22:56>意識しなくていいものであるべきだってこと?
上と下意味違ってるだろ。常考。
0782デフォルトの名無しさん
2008/02/06(水) 11:36:09何をどうやって書きたいのかを書いてもらいたいな
SQL的に書きたいだけのシンタックス・シュガーの導入が標準化団体に受け入れられる
とは思えない
0783デフォルトの名無しさん
2008/02/06(水) 11:39:03ソフトやハードの売り込み合戦を仕込んで
煽ってんじゃねえよって意味なんじゃないの。
0784デフォルトの名無しさん
2008/02/06(水) 11:41:23>LINQ使えない
とかカンベン。
0785デフォルトの名無しさん
2008/02/06(水) 11:51:07Expression tree ということでギってきた
ttp://blogs.msdn.com/daigoh/archive/2006/06/10/625985.aspx
たとえば、こういったことをやりたいのであれば、C#でのコードと同じものが
演算子オーバーロードで生成できるようにすればいいのでは?
boost::spirit みたいな変態ライブラリになると思うが
確かに早くラムダ式の言語サポートが欲しい
0786デフォルトの名無しさん
2008/02/06(水) 18:46:45こういうアイデアはいいなあと思う。
0787デフォルトの名無しさん
2008/02/07(木) 16:06:34この調子なら、数年のうちに LISP が再発明されるな。
0788デフォルトの名無しさん
2008/02/07(木) 16:40:430789デフォルトの名無しさん
2008/02/07(木) 21:55:590790デフォルトの名無しさん
2008/02/11(月) 17:17:440791デフォルトの名無しさん
2008/02/11(月) 19:22:41LINQを見ていると明らかに boostにインスパイヤーされているとしか思えない所があるし
boostは、さらに、Haskellにインスパイヤーされていて、C#もLINQそれを意識しての拡張だしね。
違いは、静的にか決定できないか、動的な決定も可能にするか、実行速度的に高速か、コンパイル後にまで及ぶ高い汎用性を取るか……
しかし、C++の場合の一番の的は、templateワカンネー人間かもしれないがwww
0792デフォルトの名無しさん
2008/02/11(月) 20:20:300793デフォルトの名無しさん
2008/02/11(月) 20:32:43関数型プログラミング言語全般の影響だと思うけどね。
ほかはだいたいそうだと思う。
0794デフォルトの名無しさん
2008/02/11(月) 20:34:04右辺値追跡参照%%とかできたらすげぇって思うわ。
そのセマンティクスまではよその言語へ持って行けないだろうけど。
0795デフォルトの名無しさん
2008/02/13(水) 02:28:45何やら恐ろしげな用語だなと思ってググッてみたらC++/CLIの機能か
なんですかそれは、噛み砕いて解説してやってください、もうC++/CLIとかは全然追ってないので
今のC++ってギリギリ感が凄すぎなんですが、どうなんですかねー
0796デフォルトの名無しさん
2008/02/13(水) 02:35:26だからgcnewしたオブジェクトやその部分オブジェクトも参照できる。
そのポインタ版は、内部ポインタinterior_ptr<T>やハンドルT^が相当すると言っていいと思う。
右辺値参照はC++0xのやつ。
0797デフォルトの名無しさん
2008/02/14(木) 22:38:12左辺にしない代わりに制約が減ったよ値にしてくれ
0798デフォルトの名無しさん
2008/02/15(金) 04:34:29{
cli::array<T%>^ m;
};
ってやるとコンパイラが落ちるな
0799デフォルトの名無しさん
2008/02/15(金) 08:27:00ちょっと帰ってきたら試してみよう
0800デフォルトの名無しさん
2008/02/15(金) 09:47:370801デフォルトの名無しさん
2008/02/15(金) 09:58:290802デフォルトの名無しさん
2008/02/15(金) 10:03:550803デフォルトの名無しさん
2008/02/15(金) 14:31:06トラッキング参照がダメっぽい
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
.\test.cpp(9) : fatal error C1001: コンパイラで内部エラーが発生しました。
(コンパイラ ファイル 'msc1.cpp'、行 1393)
この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。
詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを
選択してください。またはサポート情報 ヘルプ ファイルを参照してください。
.\test.cpp(10) : コンパイルされたクラスの テンプレート のインスタンス化 'A<T>' の参照を確認してください
0804デフォルトの名無しさん
2008/02/16(土) 10:41:58今仕事が谷間なんで新しい言語でも勉強してようかと思うんですけど
仕事とかで使われてます?
0805デフォルトの名無しさん
2008/02/16(土) 11:54:41とりあえずC#やってこい.
0806デフォルトの名無しさん
2008/02/16(土) 12:14:53何いきなり否定してんだよ
>>804
仕事ではとりあえず見たこと無いな、ガベコレ?なにそれ状態だw。
C++/CLIは、やりすぎだと思うんだな、Dの様な言語を作っておいて、共存可能にした上で徐々にC++側をフェードアウトすべきだと俺は思った。
0807デフォルトの名無しさん
2008/02/16(土) 12:17:09ドトネト厨はC++を無視、
そんな状況を解決する策
となる筈だった。
0808デフォルトの名無しさん
2008/02/16(土) 12:20:04無視してないだろ、たとえばLINQなどは思いっきりboostがやってきた事を意識しているのは明白だし。
0809デフォルトの名無しさん
2008/02/16(土) 12:36:160810デフォルトの名無しさん
2008/02/16(土) 12:59:31それ以上の用途は最初から想定してないでしょ。
言語宗教論争への配慮なんて意図は一切なかったと思うんだがなぁ。
STL/CRLは気の迷いだよたぶん。
実際のところ、C++のシンタクスを完全にマージしつつ(完全は言い過ぎか)、
.NETなセマンティクスを生成する偉業はもうちょっと評価されるべきかと。
もちろん構文が似てるからとC++/CLIから.NETに入ろうとしている人には
暴力に訴えてでも全力でC#をオススメするが。
0811デフォルトの名無しさん
2008/02/16(土) 13:51:23俺はそんなものにとっくに飽きてしまって
マクロと抽象インターフェースを通すようにして
C++|C++/CLIに一発で切り替えられるようにしてプログラムしてる。
いつでも.NETから逃げ出せるようにね。
0812デフォルトの名無しさん
2008/02/17(日) 23:31:21つ C#
そんなことより、
C++をヘードアウトさせるなんてとんでもない!
0813デフォルトの名無しさん
2008/02/21(木) 02:00:18PropertyGridは、
String以外に指定できんのですか?
Booleanとかintにしてもリードオンリーになる
ColorとかSizeとかenumなどもやりたいお
0814デフォルトの名無しさん
2008/02/21(木) 02:10:160815デフォルトの名無しさん
2008/02/21(木) 02:57:21Fontは、できました。
Colorは、できません。
意味不明><
0816813
2008/02/21(木) 03:13:02classは、ここのやつコピペして
http://www.gamedev.net/community/forums/topic.asp?topic_id=450334
public: cParticleDef^ def;
private: System::Void ImageEditor_Load(System::Object^ sender, System::EventArgs^ e)
{
def = gcnew cParticleDef;
this->propertyGrid1->SelectedObject = def;
みたいな子としてます。
EditorAttribute指定とかいるんかしら
0817デフォルトの名無しさん
2008/02/21(木) 03:54:28site:msdn2.microsoft.com付けてググるといいんだよ。
0818デフォルトの名無しさん
2008/02/21(木) 04:20:15見本にしてた
http://www.gamedev.net/community/forums/topic.asp?topic_id=450334
よく読めよって話でした。
失礼しました。
ググりかたのヒント、ありがとうございます。
0819デフォルトの名無しさん
2008/02/21(木) 21:41:37C++/CLIで作ろうと思っているため、質問させていただきました。
ある16Byteのデータが、
1000個くらいのアンマネージ型の16Byteの配列のどれに当てはまるか
検索することを実装したいと思っています。
1000個の配列間で共通な部分はないです。
最も早い方法というのは何が考えられるでしょうか?
今のところ以下を考えています。
if文でXORまたはmemcmpで検索する
→C++/CLIのXORは高速?
また、C++/CLIのor(||)はショートサーキットが入っているのですか?
VBのOrElseのような。もしも入っていないなら、ショートサーキット
を実現したOrコマンドはあるのでしょうか?
0820デフォルトの名無しさん
2008/02/21(木) 21:57:15そこまでタイトならアセンブリで組んだら?
1000個程度ならよほど繰り返し実行しなければ、そこまで真面目にアルゴリズムを
追求する必要があるほどの速度にならないと思うけど
ショートサーキットって、if 文の順番で先に判定外れが発生したら、それ以降は検証
しない奴? それなら、当たり前にそうなってるけど
0821デフォルトの名無しさん
2008/02/21(木) 22:01:31ご返信ありがとうございます。
>そこまでタイトならアセンブリで組んだら?
>1000個程度ならよほど繰り返し実行しなければ、そこまで真面目にアルゴリズムを
>追求する必要があるほどの速度にならないと思うけど
そう聞くと少し安心します。ただ、検索する回数が100回くらいあります。
たいしたことないですかね?
>ショートサーキットって、if 文の順番で先に判定外れが発生したら、それ以降は検証
>しない奴? それなら、当たり前にそうなってるけど
はい。if(A || B)として、AがtrueでもBを評価することです。
MSDNを見ても書いてないから、ショートサーキットはないと思ってました。
0822デフォルトの名無しさん
2008/02/21(木) 22:12:360823デフォルトの名無しさん
2008/02/21(木) 22:13:430824デフォルトの名無しさん
2008/02/21(木) 22:23:201000個の状態が変わらないなら、がっさりメモリ取っちゃって、その上で検索して
(速度が必要なら分割してmultithreadで)メモリのポジションから当たりのデータを
数えてもいい気がするんだけど
ttp://vene.wankuma.com/ecma372/15_expression.aspx
SS15.9, 15.10
0825デフォルトの名無しさん
2008/02/21(木) 22:54:47同意
memcmpはやめたほうがいいな
0826デフォルトの名無しさん
2008/02/21(木) 23:05:02二分探索でもするのがいいと思うが。
0827デフォルトの名無しさん
2008/02/22(金) 00:22:33memcmpはしない方がいいのですね・・・。マネージクラスのアンマネージ処理は遅くなるのですか。だったら16バイトの比較はxorを使う
ことが適当でしょうか。
0828デフォルトの名無しさん
2008/02/22(金) 00:27:360829デフォルトの名無しさん
2008/02/22(金) 05:40:43ありがとうございます。素直==で比較します。ただmemcmpを使わないならば、
自分で比較関数を使った方がいいのでしょうか?
16バイト比較なので8バイトずつ比較するというような・・・
0830デフォルトの名無しさん
2008/02/22(金) 06:17:550831デフォルトの名無しさん
2008/02/22(金) 07:46:12とわかってるなら
C++で関数作ればいいだけでは?
アンマネージにする意味が分からん。
0832デフォルトの名無しさん
2008/02/22(金) 08:46:480833デフォルトの名無しさん
2008/02/22(金) 10:01:380834デフォルトの名無しさん
2008/02/22(金) 12:57:20long longでいいよ。
0835デフォルトの名無しさん
2008/02/23(土) 01:17:19void Font.ToLogFont (
Object^ logFont
)
の引数って何渡せばいいの?
Object ^o = gcnew o;
ToLogFont(o);
LOGFONT *lf ・・・?
0836デフォルトの名無しさん
2008/02/23(土) 02:18:22LOGFONTWが返ってくるらしい。
LOGFONTWを直接渡せればいいのだが、
できないので代わりに配列を送り込んだ。
namespace dr = System::Drawing;
dr::Font^ f = dr::SystemFonts::MessageBoxFont;
array<BYTE>^ a = gcnew array<BYTE>(sizeof (LOGFONTW));
f->ToLogFont(a);
pin_ptr<LOGFONTW> plf = reinterpret_cast<interior_ptr<LOGFONTW> >(&a[0]);
::MessageBoxW(0, plf->lfFaceName, L"", 0);
0837デフォルトの名無しさん
2008/02/23(土) 05:20:23ありがとうです!
ばっちりでした。
0838デフォルトの名無しさん
2008/02/25(月) 20:07:22タイムラインみたいなウィンドウ作りたいけど
やっぱり自作しなきゃだめかな
なんか楽そうな方法ありませんか?
0839デフォルトの名無しさん
2008/02/29(金) 00:44:15C#では///から始まるコメントを書くと、そのクラスライブラリを
参照する方のインテリセンスにコメントに書いた説明が表示されますが
C++/CLIで同様のことはできないのでしょうか?
0840デフォルトの名無しさん
2008/02/29(金) 00:59:150841デフォルトの名無しさん
2008/02/29(金) 01:05:33けどC#のように///を入力したら自動で整形してくれたり
タグの候補を出してくれたりはしないんですね。
0842デフォルトの名無しさん
2008/02/29(金) 01:08:25XML欲しいときは一生懸命書いてるよw
0843デフォルトの名無しさん
2008/02/29(金) 01:13:25俺はCtrl+spaceキーを多用する癖がついてしまった・・・
あとShiftキーもかなり使う事になる。
0844デフォルトの名無しさん
2008/02/29(金) 11:26:070845デフォルトの名無しさん
2008/02/29(金) 11:57:24うむ,とりあえず ncb ファイルを削除してみたりとかね.
0846デフォルトの名無しさん
2008/02/29(金) 20:26:390847デフォルトの名無しさん
2008/02/29(金) 21:01:160848デフォルトの名無しさん
2008/02/29(金) 21:08:43それともプログラミング自体初心者なのかどっち?
後者ならC++/CLIを選ぶのは間違い
0849デフォルトの名無しさん
2008/02/29(金) 21:17:520850デフォルトの名無しさん
2008/02/29(金) 21:59:460851デフォルトの名無しさん
2008/03/01(土) 01:32:19C++/CLI はモンスターだから ...
0852デフォルトの名無しさん
2008/03/01(土) 02:09:12たまに羨ましく思うこともあるけど
0853デフォルトの名無しさん
2008/03/01(土) 03:21:270854デフォルトの名無しさん
2008/03/01(土) 09:46:28ただアセンブリを取得したいのなら、C# を吐き出して、CodeDOM 使った方が楽だという
事実に絶望した
0855デフォルトの名無しさん
2008/03/01(土) 11:19:48もはやC++/CLIとは無縁の世界だなw
0856デフォルトの名無しさん
2008/03/01(土) 12:33:55こんにちは。
↓このプラグインを使ってみては、どうです?
-CodeProject: XML Comments for Managed C++ Applications. Free source code and programming help
http://www.codeproject.com/KB/macros/MCXDoc.aspx
サンプルはVS2003用ですけど、少し手直しするだけで、VS2005や2008でも動きますよ。
(自分は、 .h だけじゃなくて .cpp でもXMLコメントできるよう1行修正して使ってます)
0857デフォルトの名無しさん
2008/03/01(土) 12:40:57のポインタを取り出す事ってできるんですか?
ネイティブライブラリ関数の引数に渡したいのですが。
0858デフォルトの名無しさん
2008/03/01(土) 16:18:02自前で実装すりゃいいんじゃね?
0859デフォルトの名無しさん
2008/03/01(土) 16:45:56そうなんですか。
ComVisibleAttribute属性が付いてるからできるのかなと思ってました。
(ComVisibleAttributeの事はよく分からないけど)
0860デフォルトの名無しさん
2008/03/01(土) 22:56:350861デフォルトの名無しさん
2008/03/02(日) 01:18:08public class Hoge
{
public static void func(ref int a) {}
public static void func(int a) {}
}
というクラスライブラリをC#で書き、C++/CLIから
int a = 〜;
Hoge::func(a);
と呼ぼうとしましたが、どっちを呼べばいいか分からないとコンパイラに怒られました。
C#ならref引数にはrefを付けて呼び出さないといけないので区別することができますが
C++/CLIの場合はどうするのでしょうか?
0862デフォルトの名無しさん
2008/03/02(日) 11:53:04で駄目?
0863861
2008/03/02(日) 12:38:00delegate void FuncRef(int%);
delegate void Func(int);
(gcnew FuncRef(Hoge::func))(a); // func(ref int a)を呼ぶ
(gcnew Func(Hoge::func))(a); // func(int a)を呼ぶ
>>862
よく意味が分かりません
0864デフォルトの名無しさん
2008/03/02(日) 12:44:260865デフォルトの名無しさん
2008/03/02(日) 13:00:160866デフォルトの名無しさん
2008/03/02(日) 13:03:23ref に値型を渡すってことは boxing したいってことなんだよね?
0867デフォルトの名無しさん
2008/03/02(日) 13:34:20((void (Hoge::*)(int%))&Hoge::func)(a);
とやってもマネージ型はできないと言われました。
C#でのref引数ってのは、C++/CLIでのトラッキング参照(%)、C++での参照(&)の事だと思うのですが
boxingと関係あるのでしょうか?
0868デフォルトの名無しさん
2008/03/02(日) 14:06:210869デフォルトの名無しさん
2008/03/04(火) 16:59:19public:
String^ str;
int* ptr;
};
A^ a = gcnew A();
マネージドなクラスのメンバを初期化しない場合どうなるか見てみたところ
a->str, s->ptrどちらもnullptrでした。
これはたまたまなのか、それとも仕様で決まっているのでしょうか?
0870デフォルトの名無しさん
2008/03/04(火) 19:38:57ttp://vene.wankuma.com/ecma372/12_type.aspx#SS.12.3.3
0872デフォルトの名無しさん
2008/03/04(火) 20:31:29forでまわすの面倒
0873デフォルトの名無しさん
2008/03/04(火) 20:56:460874デフォルトの名無しさん
2008/03/04(火) 20:57:160875デフォルトの名無しさん
2008/03/04(火) 21:32:220876デフォルトの名無しさん
2008/03/04(火) 21:40:240877デフォルトの名無しさん
2008/03/04(火) 22:06:260878デフォルトの名無しさん
2008/03/04(火) 22:07:420879デフォルトの名無しさん
2008/03/04(火) 22:15:29言語仕様の話題だけなら2つもいらん
0880デフォルトの名無しさん
2008/03/06(木) 13:59:340881デフォルトの名無しさん
2008/03/06(木) 14:31:030882デフォルトの名無しさん
2008/03/06(木) 17:02:17>>873
0883デフォルトの名無しさん
2008/03/06(木) 20:19:10pin_ptr<char> pinned = &a[0];
interior_ptr<char> interior = &a[0];
char* native = pinned;
pinned += 5; // pin_ptrの位置を変える
interior += 5; // interior_ptrの位置を変える
pinned = native; // ネイティブポインタからpin_ptrに
interior = native; // ネイティブポインタからinterior_ptrに
コンパイル・実行共に問題なかったんだけど、コメントのような操作って規格的にOKなの?
つか、pin_ptrやinterior_ptrってデバッガの逆アセンブルで見るとスタックに積まれた
普通のポインタにしか見えないんだけど、どういう仕組みなんだろう…
0884デフォルトの名無しさん
2008/03/06(木) 21:22:00再配置の対象にしないという仕様だから
interior_ptr の方は実体はハンドルらしい
大切なのはGCでオブジェクトの再配置が発生したとき、追随できればいいわけだから普通の
ポインタに見えても不思議はないんじゃない? GCがアドレスを変更するんだろうし
0885883
2008/03/06(木) 23:20:18よく分からんが俺の知らない仕組みが働いてるんかな。
まあともかくthx
0886デフォルトの名無しさん
2008/03/06(木) 23:52:49直接指してる先のものは再配置しないんじゃないの?
そうじゃないとJITコンパイラも効率いいコード吐けないだろうし。
0887デフォルトの名無しさん
2008/03/07(金) 00:38:220888デフォルトの名無しさん
2008/03/09(日) 04:54:360889デフォルトの名無しさん
2008/03/09(日) 14:33:00public:
typedef int(*cbfunc)(void *);
private:
cbfunc _cb;
void *_cbarg;
void somewhen() { _cb(_cbarg); }
public:
void set(cbfunc cb, void *arg) {
_cb = cb; _cbarg = arg;
}
};
という感じのクラスがDLLの中にすでにあって、
A::set() の arg にマネージドオブジェクトを指定したいのだけど、
どうすればいいですか? gcroot まではたどり着いたけどなんかちがう
0890デフォルトの名無しさん
2008/03/09(日) 14:58:13それともAを使う側の話?
0891デフォルトの名無しさん
2008/03/09(日) 15:43:100892デフォルトの名無しさん
2008/03/09(日) 17:34:09不要になったら、そのgcrootのインスタンスをdeleteするか、
gcrootが中で使っている
System::Runtime::InteropServices::GCHandleを直接使うかというのでどう?
0893デフォルトの名無しさん
2008/03/15(土) 21:10:57取り込んだ先でも影響されます。どうしますか?
0894デフォルトの名無しさん
2008/03/15(土) 21:12:510895デフォルトの名無しさん
2008/03/15(土) 21:14:160896デフォルトの名無しさん
2008/03/15(土) 21:22:140897デフォルトの名無しさん
2008/03/15(土) 21:27:540898デフォルトの名無しさん
2008/03/15(土) 21:34:460899デフォルトの名無しさん
2008/03/15(土) 22:34:16C++/CLIがうんこ
0900デフォルトの名無しさん
2008/03/15(土) 22:51:57フォームのデザインなんてC++/CLI本来の用途から考えたら不要なんだから
0901デフォルトの名無しさん
2008/03/15(土) 23:07:35{
public:
Takenoko();
~Takenoko();
private:
Nazo m_nazo;
};
Nazoのコンストラクタが必ず引数をとる場合エラーがでます。
0902デフォルトの名無しさん
2008/03/15(土) 23:11:110903デフォルトの名無しさん
2008/03/16(日) 00:36:380904デフォルトの名無しさん
2008/03/16(日) 08:21:180905デフォルトの名無しさん
2008/03/16(日) 10:11:34ただのC++と同じでコンストラクタ初期化子書け。
0906デフォルトの名無しさん
2008/03/16(日) 10:17:08そうじゃなきゃ、コンストラクタの try 構文なんていらねぇよ
0907デフォルトの名無しさん
2008/03/16(日) 10:17:410908デフォルトの名無しさん
2008/03/16(日) 12:35:04渡すものがまだ出来ていない場合はどうすればいいの?
0909デフォルトの名無しさん
2008/03/16(日) 12:47:21そっちで発生した例外はコンストラクタの try catch で捕まえろよ
こんなの、C++の話題だろ。何ここで訊いてやがる。こっち池yo
ttp://pc11.2ch.net/test/read.cgi/tech/1204124447/
0910デフォルトの名無しさん
2008/03/16(日) 13:28:39{
private:
PresentParameters pp;
Device m_device;
}
PresentParametersの本体が自動的に出来ていたとしても
初期化リストでm_device(pp)と渡す時点で中の値は意味をなさないでしょう?
Managed DirectXの話をそこでは出来ません。
0911デフォルトの名無しさん
2008/03/16(日) 13:31:19それで何が問題なわけ?
0912デフォルトの名無しさん
2008/03/16(日) 13:40:05だから、メンバにするときはハンドルにしておくべきなんじゃね
んで、コンストラクタでPPの値セットしてから gcnew すりゃいいだろうに、何を手を抜いているんだか
0913デフォルトの名無しさん
2008/03/16(日) 15:33:490914デフォルトの名無しさん
2008/03/16(日) 19:59:02コレを刻一刻とデータグリッドに表示させようと思うと
タイマーで定期的に明示的に内容をコピーしまくるしか無いでしょうか?
なんかこうもっとスマートなやり方ってありますか?
0915デフォルトの名無しさん
2008/03/16(日) 20:08:100916デフォルトの名無しさん
2008/03/16(日) 20:56:400917デフォルトの名無しさん
2008/03/16(日) 21:12:430918デフォルトの名無しさん
2008/03/17(月) 00:03:03MS的に実体宣言でダメなら無理でFA
0919デフォルトの名無しさん
2008/03/17(月) 00:06:35msclr::auto_handleとmsclr::auto_gcrootがまさにそれ。
前者がマネージ型(参照型)、後者がネイティブ型。
>>917
マネージクラスHogeはデストラクタ (IDisposable::Dispose実装)を持っているとして、
関数の戻り値としてHoge^を受け取るというときなんかにauto_handleは必要になる、らしい。
Hoge^ f();
void g()
{
//Hoge h = *f(); 普通、参照クラスはコピーコンストラクタがないのでこんなことできない。
msclr::auto_handle<Hoge> h = f();
} //hのデストラクタが中のHogeオブジェクトののデストラクタを呼ぶ。
0920デフォルトの名無しさん
2008/03/17(月) 00:36:380921デフォルトの名無しさん
2008/03/17(月) 14:01:15いいんじゃね?優しくてw
最近おかしいプログラマって多いから・・・例えば
Q.○○するためにはどうしたらいいのですか?
普通・・・□□がいいかも。△△もお勧め。
異常・・・まず、なぜ○○しようと思ったか言え。
普通に答える人って少ないじゃんw
0922デフォルトの名無しさん
2008/03/17(月) 14:05:390923デフォルトの名無しさん
2008/03/17(月) 14:16:040924デフォルトの名無しさん
2008/03/17(月) 14:18:46xxxでできる。けど、もしaaaをやりたくて質問したのならyyyのほうがいいよ。
0925デフォルトの名無しさん
2008/03/17(月) 14:22:05C#でしか使ったこと無いけど
0926デフォルトの名無しさん
2008/03/17(月) 14:22:320927デフォルトの名無しさん
2008/03/17(月) 14:25:120928デフォルトの名無しさん
2008/03/17(月) 14:34:11Enumerable::Select(Enumerable::Where(…か
0929デフォルトの名無しさん
2008/03/17(月) 19:25:33それぞれに別の情報を表示させるにはどうすりゃいいんでしょうか?
_beginthread でスレッドを複数用意して
それぞれのスレッドで System::Windows::Forms::Application::Run
を呼び出すのでしょうか?
_beginthread ・・・ ドトネトぽく無い気もするし、
そもそもフォームを表示させるのに
Application::Run を使うものだと思い込んでる
俺がダメな気もする。知恵をお貸しください。
0930デフォルトの名無しさん
2008/03/17(月) 20:01:22もちろん根拠はない。計ってもいない。
ただ、スタックセマンティクスは大きいよね。これ使えるときは
使った方がいいよね。
少なくともファイナライザーよぶより、デストラクタ呼んだ方が
はやいよね。
0931デフォルトの名無しさん
2008/03/17(月) 20:03:26その別の情報ってのがどう意味なのかによると思うけど、
スレッドにする必要はなさそう。
スレッド使うにしても.NETのスレッドの方がプールしてる
らしくてイイと聞いたことがあるよ。
0932デフォルトの名無しさん
2008/03/17(月) 20:10:53C++ でやってる数値計算があるんですが、
スピードよりわかりやすく見せれ!ってことで
フォームをいくつか開いていろいろ表示させたいなぁ、と。
System::Windows::Forms::Application::Run(gcnew KashikaForm1);
System::Windows::Forms::Application::Run(gcnew KashikaForm2);
System::Windows::Forms::Application::Run(gcnew KashikaForm3);
ためしに適当なフォーム3つ用意して Run 呼んでみたら
当たり前だけど最初の一枚だけ表示されて帰ってコネー!
とじたばたしてました。思わず各行の最後に & つけそうになったよ・・・
0933デフォルトの名無しさん
2008/03/17(月) 20:14:40最後にApplication::Run()
0934デフォルトの名無しさん
2008/03/17(月) 20:29:02/ / ヽ ::: \
| (●), 、(●)、 |
| ,,ノ(、_, )ヽ、,, |
| ,;‐=‐ヽ .:::::|
\ `ニニ´ .:::/ NO THANK YOU
/`ー‐--‐‐―´´\
.n:n nn
nf||| | | |^!n
f|.| | ∩ ∩|..| |.|
|: :: ! } {! ::: :|
ヽ ,イ ヽ :イ
0935デフォルトの名無しさん
2008/03/17(月) 20:31:07まずその計算てのは大変な計算なんだよね。で、
その計算自体が1つで、それを例えば数値とグラフでみせる。
のかそれとも
独立した計算自体が複数あるのかによっても変わってくるかな。
前者なら、スレッドが計算して、2つのフォームがタイマーで
読んで表示?または、スレッドが2つのフォームにポストか?
後者なら、それぞれのフォームでスレッドを作ればいいかな。
やったことないから嘘かも知れないけど。
0936デフォルトの名無しさん
2008/03/17(月) 20:56:07VB.NETやC#よりも、VC++の方が高度な最適化がかかる。
C++とC#のコンパイラの最適化レベルの違い紹介してた記事があったと思うが
ちょっと見つからないな。
0937デフォルトの名無しさん
2008/03/17(月) 21:18:53トン。知らなかったよ。
0938デフォルトの名無しさん
2008/03/17(月) 21:44:520939デフォルトの名無しさん
2008/03/17(月) 22:05:45System.Win32.[DLLNAME]が追加されたはz(ry
0940デフォルトの名無しさん
2008/03/17(月) 22:15:510941デフォルトの名無しさん
2008/03/18(火) 14:37:39まだ試してませんが、早速 Show しまくってから
Run でイベントループをまわそうと思います。
>>935
計算結果はSTLのコンテナに次々と保持されていて、
そいつをいろんな切り口で見せるパネルを同時に
いくつも開いておきたいです。
0942デフォルトの名無しさん
2008/03/18(火) 14:59:08クソアメリカへ輸出の日本車に糞付けてやった
クソアメリカのクソ野郎には糞がサイコーだ
世界貿易センタービルから飛び降りて死ね
地面にブチ当たって死ねクソ野郎
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
0943デフォルトの名無しさん
2008/03/18(火) 14:59:56クソアメリカへ輸出の日本車に糞付けてやった
クソアメリカのクソ野郎には糞がサイコーだ
世界貿易センタービルから飛び降りて死ね
地面にブチ当たって死ねクソ野郎
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
0944デフォルトの名無しさん
2008/03/18(火) 15:00:15クソアメリカへ輸出の日本車に糞付けてやった
クソアメリカのクソ野郎には糞がサイコーだ
世界貿易センタービルから飛び降りて死ね
地面にブチ当たって死ねクソ野郎
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
クソアメリカの日本車は糞糞糞だらけ〜〜〜
0945デフォルトの名無しさん
2008/03/18(火) 15:02:18C#は標準でP/Invokeの呼び出しのたびにセキュリティチェックがかかるようになっている。
一方C++/CLIはデフォルトではチェックは発生しない。
C++/CLIで/CLRUNMANAGEDCODECHECKリンクオプションでC#と同等になる。
C#の方はSuppressUnmanagedCodeSecurity属性でチェックを無効に出来る。
双方の条件を合わせるとパフォーマンスの差はない。
0946デフォルトの名無しさん
2008/03/18(火) 19:00:12その型を名前空間なしで使うとあいまいエラーがでるのね。
C#だと大丈夫なのに。
0947デフォルトの名無しさん
2008/03/18(火) 22:24:570948デフォルトの名無しさん
2008/03/19(水) 00:22:210949デフォルトの名無しさん
2008/03/19(水) 01:10:32プロパティには、その型と同じ名前をつけることができる。例えば、CacheLevel という名前の列挙型がある場合、その値を返すプロパティにも CacheLevel という名前を付けることができる。
0950デフォルトの名無しさん
2008/03/19(水) 05:05:260951デフォルトの名無しさん
2008/03/19(水) 07:57:12そりゃ名前つけるのは自由でしょ
C++/CLIの場合は型名よりメンバ名が優先されるから不便なだけで
0952デフォルトの名無しさん
2008/03/19(水) 10:17:320953デフォルトの名無しさん
2008/03/19(水) 10:36:500954デフォルトの名無しさん
2008/03/19(水) 10:44:430955デフォルトの名無しさん
2008/03/19(水) 10:47:010956デフォルトの名無しさん
2008/03/19(水) 10:54:19>プロパティには、その型と同じ名前を付けるようにしてください。
>列挙型に厳密に型指定されたプロパティを使用する場合は、
>プロパティの名前を列挙型の名前と同じにできます。
>たとえば、CacheLevel という名前の列挙型がある場合は、
>その値のいずれかを返すプロパティにも CacheLevel という名前を付けることができます。
こういう衝撃的なガイドラインがあるんだ
0957デフォルトの名無しさん
2008/03/19(水) 10:56:130958デフォルトの名無しさん
2008/03/19(水) 13:12:030959デフォルトの名無しさん
2008/03/19(水) 13:24:550960デフォルトの名無しさん
2008/03/19(水) 17:34:320961デフォルトの名無しさん
2008/03/19(水) 18:56:59ref class Hoge
{
public: property Size Size;
private: Size m_size; ←えらー
}
Sizeとだけ書くと全部Hoge::Size扱いになるよね。
0962デフォルトの名無しさん
2008/03/19(水) 19:05:300963デフォルトの名無しさん
2008/03/19(水) 19:15:16C++でusingディレクティブは使うなって言われるけど、
C++/CLIだと使えないということをよく実感する。
0964デフォルトの名無しさん
2008/03/20(木) 19:29:00で要素を削除しても、~Apple()は呼ばれないみたいです。
どうしますか?
0965デフォルトの名無しさん
2008/03/20(木) 19:43:070966デフォルトの名無しさん
2008/03/20(木) 19:50:110967デフォルトの名無しさん
2008/03/20(木) 20:21:52道具をしまったりゴミをゴミ箱にまとめるのをサボってるようで
あまりいい気がしない。
0968デフォルトの名無しさん
2008/03/20(木) 21:00:32何で削除されないかと言えば、Listで要素を削除しても
Listは削除した要素のデストラクタを呼ぶわけではないから。
0969デフォルトの名無しさん
2008/03/21(金) 02:32:09auto_handle による解放タイミングが GC での回収時なんじゃね?
0970デフォルトの名無しさん
2008/03/21(金) 08:55:53auto_handleがdeleteされないからAppleもdeleteされない。
0971デフォルトの名無しさん
2008/03/21(金) 16:44:31特にファイナライザ
0972デフォルトの名無しさん
2008/03/21(金) 17:06:320973デフォルトの名無しさん
2008/03/23(日) 05:57:340974デフォルトの名無しさん
2008/03/23(日) 08:58:40問題になった場合、それができていないと言うこと
スキルがなければ、VB や C# で書けばいい。なにもかも、C++/CLI のみでやる必要はない
0975デフォルトの名無しさん
2008/03/23(日) 10:13:590976デフォルトの名無しさん
2008/03/23(日) 10:38:33o 取り込みたいネイティブライブラリがクラスライブラリ
o C#で書こうとするとP/Invokeのための宣言や型定義がめんどくさそうな状況
o パフォーマンス上の理由でマーシャラの仕事が邪魔
こんな時に仕方なく使う言語ってところだな。
逆に言うと「こんな時」が多すぎて無いと困るんだけどさ。
.NETのネイティブとのダイレクトっぷりはJavaに対する優位性のひとつだと思うんだけど、
あんまりその文脈では語られないよなぁ。
むこうはそのために発生した複雑性が欠点と思ってるからかしら。
0977デフォルトの名無しさん
2008/03/23(日) 10:56:060978デフォルトの名無しさん
2008/03/23(日) 11:25:200979デフォルトの名無しさん
2008/03/23(日) 12:18:590980デフォルトの名無しさん
2008/03/23(日) 12:22:280981デフォルトの名無しさん
2008/03/23(日) 12:47:370982デフォルトの名無しさん
2008/03/23(日) 13:20:490983デフォルトの名無しさん
2008/03/23(日) 16:56:15無駄に機能拡張しただけの印象を受ける
0984デフォルトの名無しさん
2008/03/23(日) 17:07:07具体的にどんなところが無駄だと思う?
達成目標がアクロバットすぎるので誰が作ってもこんなもんだと思ってるんだけど。
0985デフォルトの名無しさん
2008/03/23(日) 17:44:350986デフォルトの名無しさん
2008/03/23(日) 19:38:42削除した時点でつぶされますか?
0987デフォルトの名無しさん
2008/03/23(日) 19:40:28要素を削除した際、T のデストラクタは呼ばれる。
T がポインタで、そこに new したアドレスを入れているような場合、
それは delete されない。
その目的には boost::ptr_vector が使える。
0988デフォルトの名無しさん
2008/03/23(日) 20:06:280989デフォルトの名無しさん
2008/03/23(日) 20:34:500990デフォルトの名無しさん
2008/03/24(月) 01:51:39そのための STL/CLR じゃまいか
0991デフォルトの名無しさん
2008/03/24(月) 16:52:42インデントおかしい。
インデント設定、もしくは、インデントをきれいにする方法ってありあすか?
0992デフォルトの名無しさん
2008/03/24(月) 17:10:41たしかにC++/CLIのフォームデザイナの吐くコードは
ケンカ売ってるとしか思えないw
0993デフォルトの名無しさん
2008/03/24(月) 18:30:080994デフォルトの名無しさん
2008/03/24(月) 19:05:23List<Hoge> hoges;
0995デフォルトの名無しさん
2008/03/25(火) 12:47:18Ctrl-A Ctrl-K Ctrl-F
ではだめなん?
0996デフォルトの名無しさん
2008/03/25(火) 15:15:470997デフォルトの名無しさん
2008/03/25(火) 15:16:340998デフォルトの名無しさん
2008/03/25(火) 15:16:550999デフォルトの名無しさん
2008/03/25(火) 15:18:391000小倉優子 ◆YUKOH0W58Q
2008/03/25(火) 15:19:0110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。