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


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

C++/CLI について語ろうぜ Part2



1 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:39 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に
お願いします。

前スレッドはこちら
(p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50

姉妹スレ
くだすれC++/CLI(初心者用)
(p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50
managed C++ やろうぜ!! 002
(p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50


2 名前:1 mailto:sage [2006/03/12(日) 16:10:10 ]

managed C++ → C++/CLI
(p)www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic
[特集] Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
(p)www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
Calling Native Functions from Managed Code
(p)msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx

C++/Cli Essentials
(p)www.amazon.com/exec/obidos/tg/detail/-/0321174054/
Shared Source Cli Essentials
(p)www.amazon.co.jp/exec/obidos/ASIN/059600351X

C++/CLI設計者のblog
(p)blogs.msdn.com/hsutter/
(p)blogs.msdn.com/slippman/

STL.NET
(p)www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp
(p)www.dinkumware.com/

C++の今後
(p)216.55.183.63/pdc2005/slides/TLN309_Sutter.ppt

3 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 19:15:06 ]
前スレで gcroot と auto_gcroot の存在を教えてもらったんですが、
その後いろいろとググってみたところ、あんまり使われていない
みたいですね。というか、このテンプレートって標準なんだろうか。
なんか裏技でそのうちひっそりと使えなくされてしまうなんて
ことないかちょっと不安。

4 名前:3 mailto:sage [2006/03/12(日) 19:37:30 ]
ごめん、嘘
auto_gcroot Class
msdn2.microsoft.com/en-us/library/ms177048.aspx

C++/CLI の規格というわけじゃなくて、VC++ の独自な
テンプレートクラスってことらしい。

逆に ref class の中に std::auto_ptr<NativeClass> みたいに
ネイティブクラスへのポインタを持たせられる?とか期待して
みたけど、それらしいのが見つからなかった。

ref class auto_handle なんてのが見つかったけど、
なんか意味あるんだろうか。普通のハンドルとどこが違うんだろう。
msdn2.microsoft.com/en-us/library/ms177066.aspx

5 名前:3 mailto:sage [2006/03/12(日) 19:43:45 ]
Mixing Native and Managed Types in C++
weblogs.asp.net/kennykerr/archive/2005/07/12/419102.aspx
標準的なモノはなくて、 std::auto_ptr もどきの
ref struct AutoPtr を自前で作れ、ってことか。

ハッ!? もしかしてぜんぜん追っかけてなかったけど、
STL.NET には含まれてるのか??

#この程度の話題って、くだスレの方がいい?
#棲み分け具合がまだ把握できてない

6 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 19:47:50 ]
C#の話は、禁止だから、そのつもりで。

ここは、C++/CLIのスレだからな。

C#を勧める奴は、C#スレにいけ。


7 名前:3 mailto:sage [2006/03/12(日) 19:56:27 ]
>>6 してないじゃん。gcroot って、C# とは無縁だよ?
そりゃ System::Runtime::InteropServices::GCHandle を
ラップしてるわけだから .NET Framework とは縁があるけど。
なにか過剰反応してるんじゃないですか?

8 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 19:58:01 ]
>>7
前スレにいたアレなやつだ。

9 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 21:33:22 ]
>>4
auto_handleはauto_gcrootが参照クラスになった感じのようだ。
msdn2.microsoft.com/ja-jp/library/ms177069(VS.80).aspx
msdn2.microsoft.com/ja-jp/library/ms177046(VS.80).aspx
生のハンドルと違ってスコープを抜けるときにデストラクタが呼ばれると言う利点は存在するようだ。
msdn2.microsoft.com/ja-jp/library/ms177068(VS.80).aspx
自動変数にすることに比べて利点がわからないけど。

10 名前:3 mailto:sage [2006/03/12(日) 22:15:20 ]
auto_gcroot って #include <msclr/auto_gcroot.h> しないと
使えないんだね。名前空間は msclr::auto_gcroot になってる。

一方 gcroot の方は #include <vcclr.h> で自動的に
#include <gcroot.h> されて使えるようになる。
名前空間はグローバルになってる。

う〜む、なんで扱いが違うんだろう。というか、gcroot が
グローバルな名前空間で宣言されているのが気持ち悪いな。



11 名前:3 mailto:sage [2006/03/12(日) 22:18:24 ]
たぶん gcroot も msclr::gcroot に配置すべきなんだろうな。
gcroot.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();
    };


12 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 22:39:08 ]
>>10
直接<msclr\gcroot.h>をインクルードすればよい。

<vcclr.h>の中では<gcroot.h>がインクルードされていて、
<gcroot.h>が<msclr\gcroot.h>をインクルードしている。
<msclr\gcroot.h>は<gcroot.h>からインクルードされると名前空間を使わないようにされている。

直接ヘッダを見てみたらそうなっていた。

13 名前:3 mailto:sage [2006/03/12(日) 22:56:32 ]
>>12 THX
msclr\gcroot.h っていうディレクトリと名前空間 msclr から
考えて C++/CLI の標準仕様には gcroot, auto_gcroot は
入れないつもりなのかな。しかしこれが無いと困る場面も
あるんだけどなぁ。標準に入れてくれ>MSの人

14 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 00:32:58 ]
>13
言語上の本道は混合型の導入になるから、正式仕様にはならないんじゃないかな
STL/CLIも混合型が使えるようになったら正直いらないし


15 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 01:35:07 ]
> おそらく、.NET開発でデファクトスタンダードに最も近い
まじかよ

16 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 02:47:59 ]
混合型もいいけどコンパイラスイッチで、
ぱちっと切り替えられるほうがいいな。
逝ったりきたりすると遅くなりそう...



17 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 02:54:26 ]
>>15
マジなんだよ。C#とか言うヤツの気がしれんわ。


18 名前:3 [2006/03/13(月) 04:27:03 ]
>>14
今の ECMA の規格じゃぁ mixed type はダメなんだったっけ。
Mixed type に言及してる文献はあるけど、標準化には入ってこないのかな。
std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1557.pdf
www.gotw.ca/publications/C++CLIRationale.pdf

19 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 05:06:37 ]
----以降 C# は駄目とか C# じゃなきゃ駄目とかいう過激派は発言禁止----

20 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 05:19:37 ]
し、C♯じゃなきゃだめなんていってないじゃないっ!
あんたのほかにも代わりはいくらだっているんだから!!!



21 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 08:39:23 ]
>18
だめっつーより、開発予定なんだろうけど

ttp://signe.japan.webmatrixhosting.net/ecma372/23_mixed_type.aspx

実際のスケジュールはどうなんだろうね。デリゲート・コンストラクタの方が先に実装
されそうだよ

22 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 08:55:22 ]
混合型のサポートは VC++ 2010 がターゲットだってよ
ttp://blogs.msdn.com/branbray/archive/2005/07/20/441099.aspx


23 名前:デフォルトの名無しさん [2006/03/13(月) 09:11:10 ]
CLIをまともなC++言語から使うには2010年までまつ必要があるということ?

24 名前:デフォルトの名無しさん [2006/03/13(月) 09:37:42 ]
完全な混合型は、需要もどの程度あるか疑問だし、とりあえず

1)マネージドなオブジェクトへのハンドルを
  ネイティブクラスのメンバに

2)ネイティブなオブジェクトへのスマートポインタを
  マネージドクラスのメンバに

の相互通行ができれば便利なんじゃないかな。
それは gcroot/auto_gcroot と >>5 の AutoPtr 的な
スマートポインタクラスを使えば VC++ 2005 でも
可能なんだけどできれば何か標準があったほうが安心だよなぁ。

25 名前:デフォルトの名無しさん [2006/03/13(月) 09:50:54 ]
何だかプログラミングし難くね?
Winの良さが丸消えじゃん。

26 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 10:03:56 ]
ネイティブで多重継承して、それをサポートしたいコントロールに継承させたり、friend の
抜け道をネイティブ側に用意して、マネージドを操作したり、本格的に混合型をサポート
してくれれば、使い方に夢が広がるんだけどねSTLだって、ネイティブとしてキャストして
保持させれば、混合型でマネージドを操作できるだろうし

ただ、相互のデータメンバを保持するだけなら、作りで回避できるからあまり混合型の
メリットは感じないなぁ


27 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 12:54:59 ]
それじゃマネージド終焉じゃん。

28 名前:デフォルトの名無しさん [2006/03/13(月) 13:30:46 ]
>>27 どのあたりが?

29 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 13:57:59 ]
STLをまともに使えないC++に何の意味があるのか。

30 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 15:12:34 ]
だから、結局C++で。必要なところだけ C++/CLIなんだろな。




31 名前:デフォルトの名無しさん [2006/03/13(月) 15:14:55 ]
必要なところって、どこ?

32 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 15:29:36 ]
.NETFrameworkを利用するところ。

33 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 15:52:52 ]
結局、C++/CLIはラッパーでしか使えないねぇ。

34 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 16:12:10 ]
それじゃ、COMと変わら(ry

35 名前:デフォルトの名無しさん mailto:sage [2006/03/13(月) 17:13:50 ]
仕方ないじゃん。
TRONとかいろいろ環境はあるわけで、その中でWinだけ C++/CLIだけでは組めないよ。


36 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 20:32:14 ]
あー、翻訳終わったお〜。がんばったよ


37 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 20:42:36 ]
うぇねの人?



38 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 20:49:33 ]
thx みゅ。どこぞから抗議されたらチキンのように消すんで、適当に見といてくらさい

39 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 21:15:38 ]
激しく乙

40 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 23:27:13 ]
>>38
キチンと消せよ



41 名前:デフォルトの名無しさん mailto:sage [2006/03/16(木) 22:50:30 ]
>>38
せめてWeb Archiveに残るまでは消さないで。

42 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx [2006/03/18(土) 20:53:45 ]
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

43 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 07:19:40 ]
C++とCLIの統合のまだ道半ばってところなのかね。

44 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 10:22:50 ]
>>43 道半ばなんじゃね?
でもネイティブなコードとマネージドなコードが
仲良くできるってビジョンを示した点ではC++/CLI
ってのはかなり意味があるんじゃないかな。

さらに Managed C++ から C++/CLI への移行劇を
見せ付けられて、その道程が険しいってこともわかったし。

45 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 12:17:38 ]
ついでながらC++とCOMの統合も目指してくれ

46 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 12:30:23 ]
>>45 COM との統合って具体的には?
COM つかうのに言語仕様上の制約ってあったっけ?

47 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 12:41:13 ]
クライアントとして使うには#importがあるし、
サーバにはATLがあればまあいいやと思うのだが。

48 名前:デフォルトの名無しさん mailto:sage [2006/03/25(土) 00:47:41 ]
すまん、XBOXが managed になるそうだ。


49 名前:デフォルトの名無しさん mailto:sage [2006/03/25(土) 09:01:08 ]
それは、先代XBOXでしょうか、現行のXBOX360でしょうか?

50 名前:デフォルトの名無しさん mailto:sage [2006/03/25(土) 11:57:40 ]
360だ。ネタ元は、
blogs.msdn.com/mswanson/archive/2006/03/23/559456.aspx

それに対するQ&Aのようなコメントは
blogs.msdn.com/briankel/archive/2006/03/20/555488.aspx





51 名前:デフォルトの名無しさん mailto:sage [2006/03/26(日) 01:53:09 ]
>45
msdn2.microsoft.com/ja-JP/library/ms177101(VS.80).aspx

52 名前:デフォルトの名無しさん [2006/03/29(水) 07:48:03 ]
C++/CLI(っというかMSC++2005EE) でManaged DirectXって使えないのかな?
検索しても見つからないorz
解説されてそうなところ知ってる方いませんか?

53 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 07:52:22 ]
SDK入れて参照に追加するだけじゃん

54 名前:デフォルトの名無しさん [2006/03/29(水) 08:13:34 ]
>>53
 #using <microsoft.dirextx.direct3D.dll>
 using namespace microsoft::directx::direct3d;
と入れても
 アセンブリ 'microsoft.dirextx.direct3D.dll' がみつかりませんでした:
って言われちゃうんだよねorz何がいけないんだろう・・・

55 名前:デフォルトの名無しさん mailto:sage [2006/03/29(水) 08:21:08 ]
リンク時の参照に追加してないだけじゃね?

56 名前:52=54 mailto:sage [2006/03/29(水) 08:34:10 ]
>>55
すいません。#using <>で大文字小文字の区別ができないだけみたいでした。
ありがとうございました。

57 名前:デフォルトの名無しさん [2006/04/07(金) 02:18:21 ]
はどーけん

58 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 02:35:53 ]
一週間ぶりの書き込みがそれかよ もうちょっと考えろよ

59 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 02:55:28 ]
普段脳みそ使ってる分の反動ってやつかな…

60 名前:デフォルトの名無しさん mailto:sage [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         人





61 名前:デフォルトの名無しさん [2006/04/09(日) 19:51:41 ]
ダブル サンキング
って糞じゃない?
仮想関数使えないじゃん。



62 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 00:35:31 ]
C++/CLIのバージョン1というのはC++マネージ拡張のことなのかな?

63 名前:デフォルトの名無しさん mailto:sage [2006/04/11(火) 10:09:41 ]
>>62 C++/CLI にバージョンってあったのか。
Managed C++ → C++/CLI
くらいしか認識してなかった。

64 名前:デフォルトの名無しさん [2006/04/15(土) 12:35:08 ]
Objective-C++/CLI
マダー?チン、チン。
//GCCもCLI対応するんだろうか?

65 名前:デフォルトの名無しさん mailto:sage [2006/04/15(土) 12:39:11 ]
Objective-C++ はちょっと意味が分からないな
C++ は C++ でそれなりに Objective だからな

66 名前:デフォルトの名無しさん mailto:sage [2006/04/15(土) 12:44:48 ]
>>64
Objective-C 言語
   +
  C++ 言語
   ||
Objective-C++

67 名前:デフォルトの名無しさん mailto:sage [2006/04/15(土) 15:00:18 ]
ttp://homepage.mac.com/mkino2/spec/objectiveC++/objectiveC++.html

ここらを見ると、いろんな苦労が共有できる気がするな

68 名前:デフォルトの名無しさん mailto:sage [2006/04/16(日) 15:02:33 ]
Robert Rameyがいらないってんだから要らないんだよ
Sutterも嫌々やってるんですよ

69 名前:デフォルトの名無しさん [2006/04/22(土) 01:05:39 ]
すみません。

Visual Studio2005ですが、MFCのプロジェクトで、
Windowsフォームデザイナで貼り付けられるような
コントロールは使用できるのでしょうか?

またWindowsフォームデザイナで開発した場合は、
.NetFrameworkが必要となり、Windows2000では動作できないなどありますか?


70 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 01:23:13 ]
>>69
1.使用できなくはないかもしれないがそれなら正攻法で使ったほうが多分楽
2..NET Framewokは98でも動く。一部2kで使えて98で使えない機能もあるがそれはたいていSDKに依存する問題。



71 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 01:23:21 ]
Windows 2000 でも .NET Framework は動くだろ

72 名前:デフォルトの名無しさん [2006/04/22(土) 01:25:33 ]
>>69

正攻法とはどのような方法でしょうか?

また、.NETFrameworkがインストールされていないと
動作しないのですよね?

※すみません。.NETFramework初体験です。


73 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 01:44:20 ]
>>72
>正攻法
SDKを使う方法。

>.NE(r
もちろん動作しない。OSがインストールされていないようなもんだ。

74 名前:デフォルトの名無しさん [2006/04/22(土) 01:49:18 ]
>>73
SDKはどのように使えばよいのでしょうか?
お手数ですが、簡単なサンプルとかってありませんか?
もう少し詳細を教えていただけるとたすかります
何しろMFCの標準コントロールは古臭くて。。


75 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 01:53:10 ]
>>74
Win32API質問箱 Build42
pc8.2ch.net/test/read.cgi/tech/1144962549/

76 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 08:53:14 ]
>74
CWinFormsControl を使え
ttp://msdn2.microsoft.com/ja-jp/library/8z4d86s2(VS.80).aspx

77 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 08:56:00 ]
というかそもそも何故 MFC なんだろう?

78 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 10:15:56 ]
既存のアプリの改良に WinForms を使いたいんじゃね?

79 名前:デフォルトの名無しさん [2006/04/22(土) 17:27:33 ]
>>78

ご名答!!
そもそもVisualStudioの統合環境のツールバーや
メニューバーはどうやってるんだろうと。。



80 名前:デフォルトの名無しさん [2006/04/22(土) 17:34:21 ]
別に何でもかんでもまぜまぜする必要ないじゃん。
混ぜることそのものが目的になってしまってる、みたいな。



81 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 17:48:48 ]
>>79 それは全部マネージドなんじゃね?

82 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 18:24:55 ]
漏れも手抜きしたくて CWinFormsControl を既存アプリに組み込んだりしたいけどな
さすがに、ユーザーに .net Framework 2.0 を要求できなくてやってないけど

83 名前:デフォルトの名無しさん [2006/04/23(日) 12:49:49 ]
>>79
コントロールは単なるウィンドウを子ウィンドウにしてるだけ。
って言うのは解ってる?

84 名前: ◆GjPgyWFPCM [2006/04/23(日) 13:24:21 ]
( ´_ゝ`)

85 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 18:16:21 ]
現状のC++ソースをまんまPureCLIに出来ないのが美しくないね。


86 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 18:53:21 ]
>>85
災いと引き換えの美しさなんぞいらん。

87 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 19:37:17 ]
>>85
むしろこれからはそれを意識したマクロ定義を心がけるべき?

88 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 19:46:14 ]
時代に逆行して COM かよ


89 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 01:40:49 ]
だから、猛烈にISO化に反対されてるだろ。

90 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 09:08:11 ]
災い=怒涛熱湯
美=C++



91 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 19:36:55 ]
あの ISO の論議は宗教戦争だよ
C++ だって C とは完全互換性がなくて非互換性の項目作ってるのに、C++/CLI は完全互換じゃ
ないから C++ の名前を使うな、なんて、馬鹿馬鹿しい

92 名前:デフォルトの名無しさん mailto:sage [2006/04/24(月) 19:51:22 ]
C++#にするしかないのか

93 名前:86 mailto:sage [2006/04/24(月) 20:17:12 ]
>>90
逆。
CとC++で起きた災いのことだ。

94 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 01:16:21 ]
>>91

んなーことはない。互換のない箇所があまりにも C++ を越えてるからな。
誰もが、「C++であれは不味いよ」という実装。

C++の名前は使ってもいいが、正直、ISOにはなって欲しくない。

95 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 05:32:35 ]
そうか? 文字列互換性なんて C++ の不始末を便利にしたとこを駄目だとか騒いでるぐらいじゃね
MSのサイトの記述にけちつけて、こいつら営利企業に何求めてるんだ、とか思っちゃったけどな


96 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 08:02:46 ]
論争ってなんのことかよく知らないんだけど、
名前に C++ が入ってるのがまずいダロってことになってんの?
まぁ確かにもう少し検索エンジンフレンドリーな名前でもいいかもって気はする。



97 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 09:42:19 ]
ま、どっちにせよ、

Windowsのネーミングからはじまり、
J++、J#、managed C++、STL.NETとか、
一般的なものを汚し杉。

98 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 09:59:29 ]
そんな、汚すだなんて Java の信者じゃないんだから(w

Bjarne Stroustrup のFAQになってるところがワラタ
ttp://www.research.att.com/~bs/bs_faq.html#CppCLI

ISO UK が強硬に反対していて、その下に ECMA からの回答書も公開されている
ECMA じゃ C++/CLI と C++0x にどうやって巻き込まれないようにするかの調査も
始めてるってさ

99 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 10:06:02 ]
ECMA の回答書の最後に、おまいらががたがた言おうともう ECMA 標準であることに代わりは
ねえんだよ、って答えてるとこが笑える

100 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 10:43:04 ]
C/C++系を汚すなんて汚杉。
VC++が吐き出すMFCコードからして何語?って感じだった。
ユーザーに変なもん使わせながらM$は別のクラスライブラリ使ってるらしいし。



101 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 15:28:25 ]
関係ないがアンダーバーつきまくりの変な修飾子はもう見たくないと思った。

102 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 15:52:08 ]
こうやってC++をぐだぐだにすることで、
C#の地位を着々と上げていく作戦なんだな。

103 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 17:10:51 ]
何言ってるんだ。 C++/CLI が出てきたせいで、C# がその存在意義を問われてしまったのに

104 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 17:41:48 ]
でも、現場では「C++/CLI」と「C++」を完全に切り分けないと仕事にならんのも事実。
ISOにする前に、Mac用の C++/CLIでも出してから言ってくれ、という気分だ。

>>100
おまえさん、そんなこと言ったら、COBAとかCOBA真似 IIS C++ソースなんて見たら目がつぶれるぞ。
MFCなんかは、独自仕様として実装されてるからいいよ。アンダーバー定義でその世界だけで収まってるからな。

しかし、今回の C++/CLI での文字列の扱いはそんなレベルじゃないだろ。
C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。

C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。


105 名前:100 mailto:sage [2006/04/25(火) 19:08:19 ]
>おまえさん、そんなこと言ったら、COBAとかCOBA真似 IIS C++ソースなんて見たら目がつぶれるぞ。

見たい。URL教えれ。


>C++の延長線上に C++/CLI があるような ISO 化は止めて欲しいってこった。

なるほど、ISO化が嫌われてるのね。


>C#の存在意義なんて、海外では数年前からいわれてんのに、今頃何言ってンのよ。

知らなかった。KWSK

106 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 19:50:18 ]
>>105
>見たい。URL教えれ。
断る。
comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。
後は自分で探せ。

>なるほど、ISO化が嫌われてるのね。
C++という名前を使うな、という気持ちも理解できるが…、ISOにする必要性は全くない。
MS以外誰も望んでいないからな。

>知らなかった。KWSK
C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。
Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。

そのとき、名言。「すみません。Perl風に作り替えます。」 

MSは既に梶を切ってるのに、古い方針の独善的な仕様でISO化してどうするよ。

107 名前:100 mailto:sage [2006/04/25(火) 20:01:59 ]
>>106
おもしろい情報一杯持ってるね。そういう情報好き。

>comのプログラムを探れ。corbaを参考に ActiveX, COM, DCOMをつくり、その開発メンバーがIISに流れた。

こういうの面白い。さらにCOMのトンデモ文法で作ったM$のアプリサーバなんて装飾子があったら爆笑。

>C#を初めとして、その他の多くが失敗したから、「ユーザの望むモノを提供していないンだよ、ボケ社員ども」と方針転換した話は有名。

方向転換したのはゲイツ氏?

Longhorn@マネージド→Vistaの方向転換のこと?

>Vistaで乗るバッチプログラムだって、初めは新しい言語だったのにひっこめて全部作り直す。

あの、WinFXスレでマンセーされてたシェル言語?スゲ


108 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 21:23:31 ]
自演乙

109 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 00:58:33 ]
>>107

だから、corbaを元にしたと言ってるのによ。おかげでIISとC++で組むのは無駄に知識が必要だったりするわけだが。
DON BOXとかsoapに絡んでるから余計に…。
.Netで楽にはなったらしいが。

方向転換したのはゲイツメールじゃない。10年前か!?はゲイツだったけどね。
たしか、そんなに古株じゃないヘッドハンティングされてきた人物だったはず。

方針転換はな、いま口癖のように言ってる Live って奴だ。MSは毎日かかさず Live関連の新機能を発表してるって知ってたか?
まあ、何でもかんでも Live と言ってるって事だけどさ。

とにかく、4/1にエイプリルフールでLiveネタででたジョークでは。shellで ls うつと、存在するファイル名に対応した広告が
ファイル一覧と共に表示される。という奴だった。
マネージド -> Vista なんていう程度の石頭じゃ、これからの10年食っていけないぞ?


110 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 01:10:43 ]
レイオジーのこと?

俺はなんだかんだ言っても最後は.NETに落ち着くと思うけどな。
エイプリルフールネタはおもしろい。



111 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 08:49:41 ]
>俺はなんだかんだ言っても最後は.NETに落ち着くと思うけどな。
いや、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下位互換へ

112 名前:デフォルトの名無しさん [2006/04/26(水) 13:23:51 ]
LiveってWinモンリー?

113 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 11:50:51 ]
CLR_OR_THIS_CALL


114 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 19:07:00 ]
ネイティブとかマネージとかアンマネージとか値とか参照とか
ややこしいっつーの

115 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 20:16:13 ]
C#書いてるときに比べてC++/CLI だと IDE が明らかに遅いんだけど。。。
ボタンを設置してダブルクリックして、イベントハンドラのスケルトンができるまでが明らかに遅い。

116 名前:デフォルトの名無しさん mailto:sage [2006/05/11(木) 22:07:38 ]
パソコン買い換えろよ。ボロイのいつまで使ってんだよ。

117 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 22:24:27 ]
買い換えても、遅いモノは遅いぞ。相対的なものだからな。

118 名前:デフォルトの名無しさん mailto:sage [2006/05/12(金) 22:45:13 ]
まあ、十分に早くなれば差に意味が無くなるだろう
……ネイティブとCLIの縮図のようだ

119 名前:デフォルトの名無しさん mailto:sage [2006/05/15(月) 20:37:12 ]
System::Runtime::InteropServices::PARAMFLAG::Outって何?
System::Runtime::InteropServices::OutAttributeに変えてもいいの?

120 名前:ヽ(゚∀。)ノうぇね ◆xOFicusMP. mailto:sage [2006/05/19(金) 23:03:00 ]
ECMAから公開許可をもらったぜ
消す必要はなくなったから、安心してくり



121 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 07:40:11 ]
>>120
おお、めちゃ乙。

122 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 11:58:59 ]
ECMAって心が広いんだね

123 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 14:20:07 ]
ちがうよ、必死なんだヨ。

124 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 13:29:20 ]
STL.NETどこイっちゃたの?


125 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 14:05:47 ]
思いつきで適当なもん作ってはお蔵入り

126 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 14:12:41 ]
今はSTL/CLIだよね。

出てもJavaの新しいcollectionみたいな仕様のクラスライブラリで、
method等の名前がSTL風になっているだけだろうけど。
STLはC++の言語仕様にかなり依存しているから。

なんにしてもそれどころじゃないみたい。
blogs.msdn.com/nikolad/archive/2006/02/07/527193.aspx



127 名前:126 mailto:sage [2006/06/12(月) 08:21:10 ]
しかし、すげー、過疎スレだなw

128 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 20:33:44 ]
話題がないのにだらだらだべるなんて苦痛だからね
正直、STL/CLI は C++/CLI にとって不要な要素だと思ってる
作るだけ、無駄。だから、あまり力を入れていないのは正解じゃないかな

129 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 21:06:52 ]
そうだなあ。
ManagedなobjectをSTLで扱う時のTIPSでいいかな。

130 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 23:35:16 ]
コンテナ程度の対応をするより、0x への対応をしっかりとやって欲しいのですよ
それらの要素をどう C++/CLI に持ち込むかの方が重要だと思う



131 名前:デフォルトの名無しさん mailto:sage [2006/06/19(月) 16:02:04 ]
System.Collections.Generics.Listのイテレータを作ってみたことがあるんだ。
最初はそのイテレータも参照型にしたんだけど、Visual C++付属の<algorithm>の関数は、
デバッグ用か何かの仕掛けがあって、ネイティブ型しか受け付けてくれなかった。
結局そのイテレータに対するネイティブ型のラッパを作ってやったんだ。

逆に言えばマネージ型のイテレータがVC++付属の標準ライブラリで使えれば、
STL/CLIなんてなくても自分たちで勝手にイテレータを作ったりして使うことは容易だと思う。

132 名前:デフォルトの名無しさん mailto:sage [2006/06/25(日) 01:03:26 ]
素直に混合型を実現してマネージドとネイティブを継承した型を使えばと・・・

133 名前:デフォルトの名無しさん mailto:sage [2006/06/27(火) 10:39:54 ]
それ、ふつーのネイティブ。

134 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:36:31 ]
実践C++/CLI
ttp://www.amazon.co.jp/gp/product/4797336277/249-7078532-9380326?v=glance&n=465392

を買った人いる? どんな感じ?

135 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 07:53:18 ]
本屋で立ち読みしてみるのが一番手っ取り早いかと

136 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 22:51:53 ]
手っ取り早いどころか、立ち読みしてから買わないと危険な香りがするな。


137 名前:デフォルトの名無しさん mailto:sage [2006/07/07(金) 00:43:47 ]
立ち読みした。実践じゃなくて、実際だな。内容的には。
本の後半で、Visual Studioのダイアログでの指定方法とか書かれてる。

つーか、最近、ソフトバンククリエイティブの本はタイトル詐欺が多すぎ。
噂の真相うんちゃらかんちゃらも、タイトル買いしたら内容は単なる手記だったしよ。


138 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 12:51:24 ]
表紙だけ素晴らしくて内容がウンコなエロ同人誌みたいなもんか

139 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 13:18:39 ]
買って読んだが、ちと微妙なできだな
C++/CLI に踏み込んだ記述は少なく、既存の VC++ の開発者向けに .net を使うための
チップス集といった感じだった
記述するべき知識が広範囲すぎて、なるべくいろいろ網羅しようとがんばっているのは
感じたが、前提知識があるものと記述されている部分が多くて、これはさらりと書かれている
部分がわからないのでは、と疑問に感じた

140 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 13:43:06 ]
>>137
> 最近

笑うところ?



141 名前:デフォルトの名無しさん mailto:sage [2006/07/09(日) 13:17:19 ]
ページ数が少なすぎるね

142 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 00:28:01 ]
C++/CLI 気に入ったんだが、リファクタリングできないのがつらいなぁ。

143 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 02:07:36 ]
デバッグでトレースが重いのが致命的だよ・

144 名前:デフォルトの名無しさん mailto:sage [2006/07/24(月) 05:00:40 ]
.NETと無縁の仕事ばかりやってたので思いつきでCLIでもやって
みようと思って買ってみたよ。
ダイヤモンド継承の問題点とかでてきてちょっとなえるが、まあ
もうちょっと読んでみるよ。
Win32と.NETが同時に使えるのはツールとかちょっと作るのには
便利なのかなあくらいに思ってるよ。製品開発に使えるとはまだ
ちょっと思えないけど。。

145 名前:デフォルトの名無しさん mailto:sage [2006/07/27(木) 04:12:28 ]
>>144
去年、C#の案件をやったんだが「ああ、あの時C++/CLIが出てればなぁ」とは思う。

146 名前:デフォルトの名無しさん mailto:age [2006/07/31(月) 20:51:05 ]
これ読んだ人いる?
ttp://www.amazon.com/gp/product/1590596404/ref=sr_11_1/104-8510614-7138345?ie=UTF8

147 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 10:00:59 ]
>>145
C++ > (壁) > C丼
ということ?

148 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 19:12:10 ]
>>147
ヒント:DllImport

今は逆にC++(ただしネイティブ)の案件やってるが「これがC#だったらもっと楽なのに」と思いながらコード書いてる。

149 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 20:31:57 ]
BStrWrapper ってどうやって使うんでしょうか?
ググっても、ひっかかりもしねぇっす。

150 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:31:51 ]
こんにちは。質問です。

VC++EE使ってます。
system以下のライブラリを網羅したページってないですか?
C#やVBで解説されててもかまわないのでどこかご存知ありませんか?



151 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 16:50:50 ]
MSDN

152 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 17:51:19 ]
検索で引っかからなかったけど、MSDN普通にもぐってったらあった。OTL
なんでMFCなのかわからんけど、見つかってよかった。

ttp://msdn2.microsoft.com/ja-jp/library/ms306608.aspx

153 名前:デフォルトの名無しさん mailto:sage [2006/08/10(木) 00:00:25 ]
>>152
>MSDN ライブラリ > .NET 開発 > .NET Framework SDK > MFC リファレンス
うは、ほんとだwww

154 名前:ヽ(゚∀。)ノうぇね ◆xOFicusMP. mailto:sage [2006/08/26(土) 23:01:19 ]
あまり使ってる人もいないんだろうけど、ごめん、鯖が消えてた(´・ω・`)
引っ越したので、こちらを参照してください

ECMA-372仕様書
ttp://mdjowbnb.sv05.fsdotnet.net/ecma372/StartingState.aspx


155 名前:デフォルトの名無しさん mailto:sage [2006/08/27(日) 17:51:15 ]
>>154
乙です。お世話になってます。

156 名前:デフォルトの名無しさん mailto:sage [2006/09/05(火) 18:17:53 ]
C++/CLI で作ったクラスライブラリって、CLR Profiler 通る?
CLR Profiler いつも落ちるんだけど。

157 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 00:40:07 ]
/clr:pure 状態でも?

158 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 11:33:09 ]
/clrでコンパイルしたときにアンマネージコードの生成が

『〜〜用にネイティブ コードの生成が発生します』
と自動的に適用される場合と、

『この関数はマネージとしてコンパイルできません。#pragma をアンマネージで使用してください』
と明示しなければエラーになる場合があるんだけど、

両者の違いって分る人居ますか?

159 名前:デフォルトの名無しさん [2006/09/14(木) 00:40:15 ]
ISOは賢明な判断をしたな

160 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 01:05:14 ]
>>159

くわしく。



161 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:25:11 ]
これか
ttp://blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx

162 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:27:22 ]
これかな?
www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=42926

163 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:31:29 ]
間違えた orz
www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=43913&scopelist=PROGRAMME

164 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 08:52:40 ]
ま、駄目だった物は駄目、ということで

165 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 09:03:55 ]
まあ駄目で当然という気がする。
仕様が汚すぎる。上位互換じゃないのも(C++を名乗るには)問題。

166 名前:デフォルトの名無しさん mailto:sage [2006/09/14(木) 13:57:57 ]
ちょっとホッとした。本当に賢明な判断だ。


167 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 01:56:05 ]
どっちの味方なんだよ

168 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 02:18:45 ]
最終的にまともなのになってくれれば過程はどうでもい

169 名前:デフォルトの名無しさん mailto:sage [2006/09/15(金) 04:19:04 ]
C++をマネージ拡張するのもいいんだけど、
C#をアンマネージ拡張して欲しいと思うときがある。
まあ、DllImportすればいいんだけど。

170 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:34:15 ]
よくねーよ。
でもMSが持ってるNativeMethods.cs公開してくれたら、それでいい気がする。



171 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 01:44:50 ]
俺もそれほしい
PInvoke.net が不要になっちゃう

172 名前:デフォルトの名無しさん mailto:sage [2006/09/16(土) 02:03:51 ]
結局、/CLIは今のところ使わない方が良いって事だなぁ…。


173 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 10:46:54 ]
sage

174 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 03:51:20 ]
C++/CLIって結局微妙ってこと?
@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
これとか見ると随分興奮しているけど

175 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 12:02:38 ]
>>174
ヒント: 川俣 晶

176 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 16:15:43 ]
海外だと、C++/CLIは凍るほど冷えてる。


177 名前:デフォルトの名無しさん [2006/11/20(月) 19:51:22 ]
>>176
そうなんかぁ〜?

178 名前:デフォルトの名無しさん [2006/12/03(日) 02:17:55 ]
DllImport関係のNativeMethod系以外に結局何が素敵なの? C++/CLIって
>>145
(言語熟練度はプロジェクト要員の平均レベルでC++/C#ができるものとして)
Manageなコード中に簡単にネイティブっぽいものが書けちゃうと逆にメンテし辛いものにならないのかな。

ところで、C++/CLIってC#3.0みたいな機能って予定されてるの?

179 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 03:11:41 ]
ネイティブの方が圧倒的に多かったり、
XP用のポーティングをしたり、
いろいろ便利なケースは想定できるでしょ?

どこまで厚くサポートされるかは分からない。
STL.NETみたいに辞めちゃったプロジェクトもあるし、
C++/CLIの人員削減はあり得ることだと思う。

180 名前:デフォルトの名無しさん mailto:sage [2006/12/03(日) 08:56:56 ]
STL.NETはやめてはいないだろ。
OrcasのCTPにSTL/CLRが入っている。
どんなもんかまだ俺は試していないけど。



181 名前:デフォルトの名無しさん [2006/12/04(月) 15:49:06 ]
void func (String* str1, String* str2, String* str3) {
  String* 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"となってしまいます。
助けてください

182 名前:181 [2006/12/04(月) 15:57:05 ]
void fucn(string a, string b, string c) {
  string 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"という形式で指定しろとなっているのですが、
今度は引数が生成できなくて填ってます。

183 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:07:42 ]
>>182
やったこと無いんだが、
見た感じ、strcatと同じ動作に見えるね。

オペレータの+ってないの?

184 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 16:18:11 ]
>>183
ret += a;
今、上記のようにやってみたのですが、下記のエラーになってしまいました。。。

error C2297: '+=' : 無効な右オペランドです。
error C2845: '+=' : __gc ポインタ 'System::String __gc *' に対してポインタ演算ができません。


185 名前:デフォルトの名無しさん [2006/12/04(月) 16:47:32 ]
CLIは素人なのではずしてたらごめんね。
で、これ通ったよ。

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か?
ちょっとまってて。

186 名前:181 [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);
}

187 名前:デフォルトの名無しさん [2006/12/04(月) 17:04:51 ]
ミスった・・・

voidfunc(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);
}

188 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:10:58 ]
>>181お前それC++/CLIではなく、マネージドC++だろ。
とりあえず、こうすると.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をマルチバイト文字列に使うな。

189 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:11:03 ]
こらこら、ANSI文字列のポインタをLPTSTRで受けちゃダメだぞ。

190 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:14:53 ]
…なんだか口は悪いけど親切なお兄さんと結婚することになりそうです。



191 名前:188 [2006/12/04(月) 17:22:28 ]
>>188
動きました!

192 名前:181 mailto:sage [2006/12/04(月) 17:22:51 ]
名前欄まちがえた

193 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:30:11 ]
あと、Marshal::StringToHGlobalAnsiで確保したメモリを開放していないな。

方法は幾通りもある。あんマネージ文字列への変換は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);



194 名前:185 mailto:sage [2006/12/04(月) 17:37:49 ]
>>186-188
ほかの方法があったか。
色々考え出したら止まらなくって困ってたとこだった。
役に立てなくてすまない。

#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

195 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:44:41 ]
>>193の方法は短いですけど、>>188の方が見やすそうなので、使わせてもらいました。
色々勉強になりました

196 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 17:56:57 ]
CLIだが最終的にこんなんなった。

std::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;
}


197 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 18:23:57 ]
>>195
せめてStringBuilder使え。

198 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:45:05 ]
ふつうに wstring 使った方が早くね?

199 名前:デフォルトの名無しさん mailto:sage [2006/12/04(月) 23:49:36 ]
String::Format 使えばいいと思う……

200 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 00:23:34 ]
>>199
>>193で出たものの、>>195で却下された。



201 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 11:03:39 ]
個人的には(作成理由から読むに) C# で DLLImport の方法を探した方が遥かに楽だったんじゃないかという気がするけど。

色んな選択肢を使える懐の深さが C++/CLI の一つの魅力なわけだし、
最速/高効率よりも、本人が理解/吸収しやすい手法を取るのが最良だと思う。

202 名前:デフォルトの名無しさん mailto:sage [2006/12/05(火) 16:10:02 ]
さすがに、それを最良と言い切るのはおかしいな。
言いたいことはわかるが、言葉の選択を誤ってるね。


203 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 23:36:10 ]
www.rupan.net/uploader/download/1167834884.zip
PASS: CLI

204 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 00:27:15 ]
>>203
これってなんだったの?

205 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 00:31:07 ]
仕様書のスキャン画像

206 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 01:07:33 ]
C++/CLIでWPFの開発できないの?

207 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:54:27 ]
できないほうが不思議

208 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 04:46:46 ]
IDEのサポートがあるかどうかは別問題だけどね。

209 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 20:21:14 ]
C++/CLIでのWPF開発ではIDEのサポートは無いの?

210 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:27:14 ]
XAMLPadで十分じゃん
どうせUIはC++じゃなくてXMLで書くんだし



211 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:27:51 ]
Visual Studio 2007(2008?)には標準で入るはず。

212 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 19:31:33 ]
literalって何のために追加されたの?
constでいいじゃん。

213 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:28:43 ]
>>212
よく知らんが、名前の通りリテラルの為なんじゃないのか?

214 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 17:59:55 ]
いやだってManaged C++ではstatic constで済んでいただろ。

215 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 22:20:44 ]
フィールドにCILで言うところのliteral属性をつけるか否かを区別できるようになった

216 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 23:10:16 ]
Managed C++ではunmanagedなものとの区別があいまいだったから、
出来るだけ違う名前を付けるようにしたとかそんなのじゃないの?
参照周りとかgcnewとか見ててもそういう思想に見えるんだが

217 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 19:24:28 ]
流れぶった切って申し訳ないですが、質問です。

C++/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になってる
っぽいんですが、正しくラップするにはどういう風に書くんでしょうか?


218 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 19:34:18 ]


219 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 20:42:10 ]
>>217
そういうこと。値型はハンドルを使わず生の型を使え。

C++/CLIで値型へのハンドルはボックス化の扱い。
IL上の引数・戻り値は、System.ValueType(これ自体は参照型)となる。
vene.wankuma.com/ecma372/33_cli_library.aspx#SS.33.1.5.1

基の型の情報も記録しているので、IL上は多重定義可能で、
C++/CLIでもコンパイラがそれを認識して多重定義解決を行う。
しかしC#コンパイラはそれを知らないので、
単にSystem.ValueTypeを1つ引数に取るメソッドshowが2つあるとしか認識できない。


220 名前:217 mailto:sage [2007/04/09(月) 23:01:02 ]
>>218-219
なるほど。
解決しました!ありがとうございます。




221 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:06:56 ]
○コンストラクタ
StreamReader^ 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();

222 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 18:09:35 ]
○初期設定
String^ 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;
}

長かったので分割してカキコしました
今日出された課題でフォーム位置を記録するという物があったのですが、どうしても汚くなってしまいます。
もう少し効率の良いフォーム位置の記録方法はありませんか?

223 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 21:05:32 ]
なんつうかきったねえな、おい。

Hashtableに格納してシリアライズするとか、
シリアライズ可能な構造体を定義してそれを保存するとか、
自前で読み書きするにしても、せめて、生の整数値で保存しろよ。

224 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 22:03:19 ]
>>223
ご指摘ありがとうございます

>自前で読み書きするにしても、せめて、生の整数値で保存しろよ。
苦肉の策で、無理矢理保存してました(汗

225 名前:デフォルトの名無しさん [2007/05/10(木) 08:14:13 ]
String^ a = "a";
String^ b = a;
a = "b";

これでbが"b"にならないのはどういう仕組みなんでしょうか?
いろいろ調べましたが結局わかりません。

226 名前:デフォルトの名無しさん [2007/05/10(木) 08:18:49 ]
int n = 1;
int* a = &n;
int* b = a;

int m = 2;
a = &m;

で b が 2 になりません、って言ってるのと同じこと。

227 名前:デフォルトの名無しさん [2007/05/10(木) 08:19:26 ]
間違えた。*b が 2 に、だった。

228 名前:デフォルトの名無しさん [2007/05/10(木) 08:44:36 ]
>>226
ありがとう。なんかぼけてました。(;´Д`)

229 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 21:09:57 ]
(゚Д゚)

230 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 01:46:32 ]
致命的なエラーです。 (HRESULT からの例外: 0x8000FFFF (E_UNEXPECTED))

という警告がデザイナーで急に頻繁に表示されるようになってしまったのですが、
どなたか解決策をご存じありませんか?

コンパイルはちゃんとできるんですけど...



231 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 18:01:24 ]
言語伝々自体にドトネトコード自体がお呼びじゃないからな。

232 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 22:56:54 ]
誤爆け?

233 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 16:56:09 ]
でんでん?
云々の間違いなんだろうが、どうすればそんな間違いが起こるんだw

234 名前:デフォルトの名無しさん mailto:sage [2007/05/18(金) 17:16:41 ]
>伝々
思わずふいてしまた

235 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 16:01:13 ]
treeViewの再描画を一時停止したいんだけどどうすれば良いの?

236 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:22:17 ]
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

237 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 00:24:49 ]
再描画のハンドラをオーバーロードして
止めたいときだけ無視する。

238 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 00:28:12 ]
自己解決しました!
>>また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?
treeView->BeginUpdate();

キャレットが出無くなればいいわけです
Win32 APIにHideCaretという関数があるのですが、C++/CLIではどうしても見つけることができませんでしたorz

239 名前:デフォルトの名無しさん [2007/05/27(日) 15:49:02 ]
iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

この関数の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) )

どうやってキャストすればいいのでしょうか?

240 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 20:26:06 ]
pInの段階で既にpinされているのだから、後は普通のC++と同じように
const char* pInPass = reinterpret_cast<const char*>(pIn);でいいと思う。



241 名前:かも [2007/05/27(日) 23:33:12 ]
だれか、ニューメリカルレシピインシーっていう本やったことある人いませんか(??)

242 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 02:05:15 ]
>>239
msdn2.microsoft.com/ja-jp/library/1b4az623(VS.80).aspx
String^からstd::stringにしてc_str()で渡せば。

243 名前:デフォルトの名無しさん mailto:sage [2007/05/28(月) 10:20:36 ]
>240
できました。ありがとう。

>242
できればコピーしないでやりたかったので。

244 名前:デフォルトの名無しさん [2007/05/29(火) 18:10:26 ]
こんなものC++の標準が改定されたら置いてきぼりになるじゃんか
志ねMS

245 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:22:06 ]
C++/CLIはC++ではないと何度言ったら分かるんだね。

246 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 19:25:48 ]
C++自体がC99から置いてきぼりになってますが何か?


でもってC++/CLIも世界標準規格のわけだが

247 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 20:05:06 ]
世界標準言ったって、盲判で有名なECMAだろ?
ちょっとまえにISOに蹴られたばっかじゃん。

248 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 22:43:18 ]
実装がひとつしかないのに世界標準とかいわれても非常に困る

249 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:09:22 ]
っ Mono

250 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:14:38 ]
>>249
だから一つしかないんだろ?



251 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:14:44 ]
MonoにC++/CLIコンパイラなんてあったの?

252 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:17:41 ]
いずれできる

253 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:20:26 ]
>246
はあ? ISOに蹴られてるだろ? どこが世界標準規格なんだよ。
嘘もいい加減にしろ。

254 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:23:11 ]
www.ecma-international.org/publications/standards/Ecma-372.htm

無知は黙っとけ
おっとお子ちゃまに英語は読めないかなw

255 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:27:19 ]
>>254
あれ? なにそれ? なんで普通になんの制限もないPDFがダウンロードできるの?
単にECMA規格がそーゆーもんなの? それともドラフトかなんか?

256 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:28:47 ]
標準規格に制限かける標準化団体はいね。

257 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:28:48 ]
もう、C++/CLIは死に体。

258 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 00:29:58 ]
>>256
IEEE

259 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 01:00:15 ]
CLIもDも
C++0xへの叩き台なので問題ない

260 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 01:45:36 ]
>>256
ISO も JIS も普通に金取られるぞ



261 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 02:35:21 ]
ANSIも

262 名前:デフォルトの名無しさん mailto:sage [2007/05/30(水) 22:01:33 ]
規格がみんな無料で閲覧できるようになればいいのに

コストはともかくトラフィックで死ねるからやらないんだろうけど

263 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 00:15:28 ]
いらないものをさも必要があるかのように作って無駄にはやらせようとするM$は死ねばいいのに

264 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 01:02:17 ]
開発者に対してろくなアプローチをしないところよりはまだマシさ。

265 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 07:02:19 ]
>>263
禿は「ライブラリで出来るところはライブラリでやれよ。
テンプレートで出来るだろ」という見解だったな。
というわけで、ISOでは蹴られ続けるだろうな。
実際5月のミーティングでも駄目だったし。

266 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 11:19:11 ]
VC++2005です。
メインフォーム上に置いたコントロールのWndProcをオーバーライド
したいんですが。普通に継承して、メインフォームのコードを書き換えると、
フォームデザイナーがうまく機能しなくなってしまいます。

フォームデザイナをちゃんと動かすためにはいろいろ大変みたいで
できればやりたくないです。もっと簡単にWndProcをオーバーライド
する方法はないでしょうか?

267 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 11:34:27 ]
結局、C++/CLIとC++でいつでも分離できるように実装するしかないんだよな。
C++/CLI側は「まだ実装するべき機能はあるから、追加しちゃうよ」とかほざいてるし、
標準じゃないのはいらねぇよ。

268 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 15:51:15 ]
about C# Mono
Mono C# compiler version 1.2.2.1

C# Language Specification ECMA-334

Common Language Infrastructure (CLI) ECMA-335

Home Page: www.mono-project.com/

Download: www.mono-project.com/Downloads


269 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 17:26:09 ]
で?

270 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 18:51:50 ]
>>268
君さ、何か勘違いしてる気がするよ。



271 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 20:47:23 ]
C++/CLIで作ると移植性が落ちる。

272 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 21:16:15 ]
ポートも糞もないだろw

273 名前:デフォルトの名無しさん [2007/05/31(木) 23:26:57 ]
質問です。

 using 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 に格納されたのか知らせる手段がほしいのですが、
うまい方法は無いでしょうか?

274 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 08:39:29 ]
>271 名前: デフォルトの名無しさん [sage] 投稿日: 2007/05/31(木) 20:47:23
>C++/CLIで作ると移植性が落ちる。

だから世の中の0$や重要なソフトはC++なのさ。

275 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 11:56:46 ]
>>273
item->list = (HogeList<HogeItem^>^) this;

HogeListは事実上HogeItemの派生クラス専用なのだから、
IList<T>の継承じゃなくてListを包含してしまったほうが楽だと思うけどな。

276 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 00:21:36 ]
ネイティブのクラスがハンドルを持てないのはなぜ?

277 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 11:19:47 ]
ハンドルはGC管理領域を指すマネージドポインタだから。

278 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 14:38:46 ]
>>277
それは織り込み済みです。

279 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 15:13:16 ]
ベンダーはECMAを見るだろうからISOとか関係ないっしょ

280 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 15:50:03 ]
いや、ベンダーって、誰が実装するのよ?



281 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:39:41 ]
>>276
ネイティブクラスのインスタンスは、マネージヒープ・スタック以外に作られる可能性がある
しかし、CLRのGCは、自身が管理するメモリ以外を見ない
だからネイティブクラスはハンドルを持てない

おとなしくmsclr::gcrootを使いなさいということ

282 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:49:32 ]
>>281
ありがとう。
つまりネイティブヒープ上にあると、ハンドルがGC対象にしていいか追跡
できなくなるって理解しました。

gcrootなんてあったんですね。調べてみます。

283 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 18:49:50 ]
CreateFileとかCloseHandle呼べばいいんでは?

284 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:00:12 ]
審議中
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'


285 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:16:51 ]
>>279
つーか、ECMAに最初だけ登録しておいて、
以後のバージョンアップは放置ってのがMSの手法。
で「仕様は公開されてますよ、オープンです」って言う。

286 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:33:12 ]
C++/CLIで作ったら、各部署、それぞれから大ブーイングだぜ。

287 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 19:37:41 ]
C#はJIS通ったんだが

288 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 21:02:25 ]
>>286
なんで?

289 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 01:13:42 ]
>288
ソースが転用できねーじゃねーか。ぼけ、死ね、くたばれ。
って言われる。

290 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:53:23 ]
ネットワークドライブ上のファイル X:\あああああ\いいいいい.txt
があり、ファイル名は日本語とします。

また、ファイル名として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*にうまく変換
できません。



291 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:54:24 ]
続きです。
さらにもし可能なら、英語版windows98でも動くようにしたいです。

292 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 08:28:02 ]
PtrToStringCharsの戻り値をpinして、
自分でWideCharToMultiByteやその他の手段でマルチバイト文字列へ変換
その際マルチバイト文字列の文字コードにShift_JIS (CP932)を指定

XP (NT)なら、Unicode対応でないプログラムの言語の設定(コントロールパネル→地域と言語のオプション→詳細設定)
で日本語を選んでおけばこれで動くと思う。あるいはAppLocaleで個別指定する手もある
98 (9x)は無理

293 名前:デフォルトの名無しさん [2007/06/05(火) 23:56:10 ]
String^ temp;

^って、なんの意味があるんですか?


294 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 23:58:15 ]
ポインタ

295 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 23:59:01 ]
ハンドル

296 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:10:54 ]
>>294
ポインタ?

String* temp;

はなくなったんですか?

>>295
すいません、よくわかりません。


297 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:14:05 ]
ハンドルで分からないなら managed なポインタと思っとけばおk

298 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 00:55:44 ]
>>297

有難う御座います。
そのように思っておきます。


299 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 02:46:37 ]
>>293
C++/CLI の変更点くらい確認しようぜ

ヘルプで C++/CLI Version 2, マネージ拡張 から
変更の概略を見れば出ている

300 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 10:33:56 ]
でも、ぶっちゃけ、CLIにメモリ管理を任せる意味はあるのか。




301 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 11:32:38 ]
>>300
DLLをまたいでオブジェクトが行き来しても、
メモリアロケータが違ってあぼんとかしないのはイイよ。
もちろんネイティブC++だってわかっている人が使えば問題ないんだけど。

ヘッダファイルにnew書いててそれがDEBUG_NEWに置換されて死亡とかイヤ過ぎる。
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1641869&SiteID=7

302 名前:デフォルトの名無しさん [2007/06/06(水) 13:21:26 ]
>301
その為に共有メモリってのがあったわけだが…。

ちょっとコスト対効果のバランスが悪い理由な気がする。


303 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 13:25:03 ]
>>302
共有メモリはプロセス間でメモリ共有したいときのものだと思うけど。
DLLはもとからメモリ空間共有してるわけだし、
メモリ共有で何を解決するつもりなのかサパリワカラン

304 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 14:29:10 ]
>>303
DLLのスタティック領域がプロセス間で共有されてたのはWindows 3.1時代の話だぜ


305 名前:290 mailto:sage [2007/06/06(水) 19:50:35 ]
>>292
ありがとう。
しかし290の例の日本語は他の言語の場合もあり、またはUnicodeでしか
表わせない混合型の場合もあるので、もっと根本的な解決法があれば
いいんですが。

306 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 00:18:32 ]
根本的な解決があるとすれば、そのライブラリをどうにかするしかない
ハンドルやファイルポインタ・ストリーム辺りが渡せればだいぶましなんだが

307 名前:デフォルトの名無しさん [2007/06/13(水) 07:45:40 ]
アンマネージドで格納したバイト配列をcli::array<unsigned char,1>にしたいのですが、
どうすればいいのでしょうか?

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);
//ここでエラーになる。

308 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:50:08 ]
IntPtrをSystem::IntPtrにしたこと以外はそのままでも問題なさそうだし、
実際試しに動かしてみても問題なかったぞ

309 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:37:21 ]
>>308
ありがとうございます。
すみません。問題は別のところにありました。
実際は*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);
}

310 名前:デフォルトの名無しさん [2007/06/21(木) 00:39:09 ]
String a("A");

これがコンパイルできないのはなぜですか?

error C3149: 'System::String' : トップレベルの '^' なしに、この型をここに使用することはできません



311 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:46:21 ]
トップレベルの '^' なしに、この型をここに使用することはできないから。

312 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 01:45:46 ]
>>311
その理由を聞いています。

313 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 07:33:41 ]
仕様だからとしか

314 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 08:49:15 ]
仕様ですか。しかしObjectやStringBuilderなどは^がなくてもOKなので、
Stringのみ特別な事情があると理解すればいいでしょうか?


315 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 09:20:15 ]
MSDNには対象外としか書いてないね。
The 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();

316 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 10:55:52 ]
>>315
ありがとう。
使い道がないということで理解しようと思います。

317 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 17:45:52 ]
delegateは知らんが、arrayやStringは.NET ILレベルで特別扱いしてるからかもな。

318 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:16:58 ]
VC2005でデバッグしてるとステップ実行で変なところを
さしてしまう場合があってデバッグしづらいんですが
直す方法はありますか?

nop命令があってそこでへんなとへこいきます。

319 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:55:39 ]
GUIなアプリケーションを作るために
C#の「Windowsアプリケーション」プロジェクトでいくか
C++/CLIの「Windowsフォームアプリケーション」プロジェクトで行くか悩む。

アンマネージドなC++クラス(とboost)で書かれたCUI
アプリケーションのGUI版を作ろうとしています。
C# でもアンマネージドな DLL のエントリを呼び出すことできますし。

でもアンマネージドな C++ のクラスを使いまくりたいんだけど
どうしたものか・・・ COM コンポーネントとして作られていれば
容易に扱うことができたのかもしれないけど。

アンマネージドな C++ で書かれたクラスのインスタンスを
生成したい時って、そのクラスのファクトリメソッドを
用意しておいてそれを C# 側から呼び出すということになるんですかね?
C++ 特有の複雑な(引数の型を反映した)関数名とかどうなるんだろう。
extern "C" つかうのか。

320 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 05:56:10 ]
ごめん、書いてる途中で C# な話題になってしまった。



321 名前:319 [2007/07/06(金) 06:41:49 ]
それで、肝心のことなんですが、アンマネージドな C++ のクラスを
.NET 環境で使うためには C++/CLI でラッパークラスを書けば
いいのでしょうか?そうするとマーシャリングなども自動で
やってくれるということなのでしょうか?

DLL は C++ にやさしくない、かといって COM コンポーネント
として書いてしまうとプラットフォームに強く依存しすぎるので
一般的な用途のクラスライブラリには向かない、
でもアンマネージドな C++ のクラスを .NET と仲良くさせたい、
という課題をどう解決すればいいのかを教えてください。

322 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:19:58 ]
> そうするとマーシャリングなども自動で
> やってくれるということなのでしょうか?
そういうことになるが、ある意味自分で
マーシャリングコードを書く補助をしていると言ってもいいかもしれない。

アンマネージクラスをC#(やその他.NET言語)から呼び出したければ、
C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、
他の言語から参照設定して使うのが一番率直な手段。

そもそもC#でアンマネージDLLのC++クラスを操作するなんて不可能だぞ。
(COMインタフェース経由を除く)

323 名前:319 [2007/07/06(金) 10:57:16 ]
>C++/CLIでそのクラスをラップしたマネージクラスを含むマネージドDLLを作って、
>他の言語から参照設定して使うのが一番率直な手段。

やっぱそうですか、ある意味安心しました。
System.Runtime.Interop 以下にいろいろあるのを眺めてて、
もしかしてマネージドからなんかうまい具合にごにょごにょ
できる方法が用意されてるのかなぁ、などと疑心暗鬼になってました。

324 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 13:26:04 ]
VC2005でデフォルトのフォームアプリを作成して、
CLRサポートを/clrにして以下のインクルードを追加すると
実行時ヒープエラーみたいなのが出ます。

#include <comdef.h>
#pragma comment(lib, "oleaut32.lib")

どうやって直したらいいのでしょうか?

325 名前:デフォルトの名無しさん [2007/07/24(火) 03:07:41 ]
なんで Void って大文字になったの?

326 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 03:13:36 ]
ヘミvoidが権利を主張するのを避けるため

327 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:16:42 ]
System::Void のこと?


328 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 23:50:23 ]
当たり前のことなんだろうけどvoid代わりに使えるのが少し不思議に感じる。
#include <cstdlib>

int main()
{
&nbsp; System::Void* pv = std::malloc(256);
&nbsp; std::free(pv);
}

329 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:28:58 ]
自分自身の起動パスを得るにはどうしたらいいの?

330 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:29:14 ]
CRTの__argv[0]やWin32のGetModuleFileName(0,とか
.NETのSystem::Windows::Forms::Application::ExecutablePathなど。



331 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:11:43 ]
Applicationにあったのか!
ありがとう。
ずっとProcessとかを探してたよ
Win32APIのときGetModuleDirectoryとかなんとかだったから

332 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 22:51:56 ]
>>331
その線も惜しい。
Win32はGetModuleFileNameだったでしょ。
.NETだとモジュール (EXE/DLL)に対応するものはアセンブリだから、
その方向でやるならAssemblyクラスが正解だった。

www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html

333 名前:デフォルトの名無しさん [2007/07/27(金) 12:14:00 ]
Visual Studio 2005 で C++/CLI を使おうとしています。
std::vector<System::String^> のように標準のSTLのコンテナには
ハンドルを格納することはできないのでしょうか?
C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
用意されているのでしょうか?今の自分は array<String^>
しか使えずさみしい毎日を過ごしています。

std::vector<System::String^>^ lines;
try{
for(;;)
lines->push_back(stream_reader->ReadLine());
} catch
以下略

のようにぶん回してファイルを行単位で全行
読み込みたいだけなのですが・・・

334 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:19:12 ]
>>333
>C++/CLI にはマネージドな世界独自のコンテナクラスライブラリが
つSystem::Collections::Generic

STL.NET構想はどっかいっちゃったけどな

335 名前:デフォルトの名無しさん [2007/07/27(金) 12:26:29 ]
>>334
おお、「コレクション」というのですか。
どうりで C++ CLI コンテナ で検索していても
昔の managed C++ の資料や gcroot でがんばる
という方法しか見つからず難儀していました。
しかも cliext::vector なんかも見つかってしまい、
余計に混乱していました。cliext 名前空間以下の
識別子ってのが STL.NET なんですかね?

336 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:42:30 ]
>335
STL.NET は STL/CLR という名前で VS2008 に同梱
ただ、.net fx 2.0 では動かない

こういう後方互換性がないものを C++/CLI で出してほしくなかった


337 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:47:04 ]
>後方互換性

上位互換が無いってことか?

338 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:49:22 ]
>>336
それで困るやつはどれだけいるんだ

339 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:51:29 ]
STLってのはC++では最重要なんだが...

340 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 12:55:13 ]
>>336
それ本当?
.NET Framework 3.0も3.5もCLRのバージョンは2.0のままだろ。



341 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:07:08 ]
.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に
3.5 が必要になるのは嫌じゃね?
前のCTPの頃はライブラリだけ持って行けばよかったんだが



342 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:22:05 ]
>340
Beta1 で Microsoft.VisualC.Stlclr.Dll +ヘッダ抜き出しで駄目だったという報告があった

とりあえず、Beta2 が来てるんで、入れて試してみる
一応、「Microsoft.VisualC.Stlclr.Dll は .net fx 3.5 の一部ではない」はずなんだが

343 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 13:47:59 ]
>>341
>.net fx 2.0 で作ってた既存アプリに STL/CLR を使って修正すると、アプリの実行に
>3.5 が必要になるのは嫌じゃね?
>前のCTPの頃はライブラリだけ持って行けばよかったんだが

コンパイルし直すんだろ?
どうせmsvcp90.dllとか増えてるんじゃないの?
VC++のランタイムライブラリに同梱ってのが幸せになる道かねぇ。

まあ3.5のサイズにもよるな。



344 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 14:43:50 ]
>343
客先に説明するのが面倒なんだよね。でも、STL/CLR は使いたい
できれば、CTP同様に VS2005 + ヘッダ + Microsoft.VisualC.Stlclr.Dll で STL/CLR を
使った開発ができる方がうれしい。SP2 で来ないものかな

345 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 17:14:22 ]
std::vector<int> v;
   :
for each(int i in v)
{}

for eachでbegin(), end()が呼ばれているようですが
ECMA-372にはこの振る舞いの記述が見あたりません。
MSの独自拡張なのでしょうか?

346 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:28:26 ]
>345

これでも行けますね

int vec[] = { 1, 2, 3, 4, 5 };

for each ( int num in vec )
{
  std::cout << num <<std::endl;
}

配列アクセスが可能なものは Array のラップを掛けて渡されているのでは
ないでしょうか。Array は IEnumerable ですし

347 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:34:44 ]
>346
ごめん。これはできて当たり前だわ
array<int>^ vec = { 1, 2, 3, 4, 5 };
と同等だもんな

348 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:12:42 ]
>>346
Cタイプ配列とarray<T>は同等じゃないから346は通らないのでは?


349 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 07:20:17 ]
std::vectorに対するfor each inはネイティブでコンパイルしても使えてるな。
/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; }

350 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:16:58 ]
>348
Cタイプ配列は C++/CLI では array<Type> でラップされるよ。だから、346 は動く
>347 がそれを言ってる

ヘッダ見たけど、特に ecma-372 で必要とされている IEnumerable の定義も
見あたらないから、CLR・・・で定義されている所に、拡張構文で潜んでるっぽい



351 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:24:10 ]
VS2008 Beta2 試してみた。コンパイル対象となる .net fx が選べるようになったんだが
2.0, 3.0 を選んだとき、STLCLR.dll は使えなかった
STL/CLR を使いたかったら、3.5 を普及させろと言うことらしい

  ( ゚д゚) Feedback マンドクサ
_(__つ/ ̄ ̄ ̄/_
  \/     /
     ̄ ̄ ̄

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/     /
     ̄ ̄ ̄

352 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 19:47:41 ]
>>350
C#のCタイプ配列はCLR配列だが、C++/CLI のCタイプ配列はCLR配列じゃないぞ。
>>346を実際にコンパイルしてみろ、C3285でしっかりコンパイルエラーが出る。 

353 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 23:12:16 ]
VC8 SP1で試したけど/clrの有無に関わらずC3285になるね。

当たり前だけど、boost::arrayはOK。
どうせならレンジに使えればいいのに、
ってそれなんてBOOST_FOREACHなんだけどね。

354 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:40:44 ]
>352-353
悪禁食らっていたので返答が遅れた
ごめん。漏れが試したのは、VS2008 Beta2 だった。こちらは >346 でコンパイルできるし
動く。また、ecma-372 でも、仕様上 346 で正しいから、VC8 で取りこぼしてた仕様が
いくつかあったやつを VC9 で準拠したんだと思う

/clr の有無に関わらずって、/clr なくて for each が使えるの?

355 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:24:33 ]
>>354
349でネイティブでも使えるという報告があるよ。

356 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 14:40:51 ]
ファイル名をキーとするstd::mapのようなものを作りたく、Generic::Dictionaryのキー型にString^
比較にStringComparer:::CurrentCultureIgnoreCaseを指定してるのですが
全角アルファベットの大文字・小文字も同一視されてしまいます。
要するにNTFSやFATと同じようなファイル名の比較をしたいのですが、どうすればいいんでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:16:49 ]
つ ネイティブC++

358 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 15:50:00 ]
>>356
WindowsのNTFSファイルシステムドライバは"A"と"a"は同じ文字とみなしてるよ?

359 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 16:11:47 ]
>>358
あ、ほんとだ。区別されるものと思ってた。

360 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:22:34 ]
>>356
カーネルの中には比較する関数あるんだけどね・・・
なんでユーザーモードに無いのかは謎

まじめにやると日本語やアルファベット以外の文字(ヨーロッパ圏など)でも
全角半角を問わず大文字小文字を区別しないので
割と面倒だった気がする。




361 名前:デフォルトの名無しさん [2007/08/01(水) 04:25:12 ]
Visual Studio 2005 で C++/CLI を使っています。
フォームデザイナの機能で C++/CLI と C# の間に
違いはあるのでしょうか?
つまり C# でのフォームデザイナと、C++/CLi での
フォームデザイナの間に、利用できるコントロールの
種類などで違いがあるのでしょうか?
.NET Framework で用意されている機能なら言語によらず
利用可能だとおもうので差はないと思っているのですが。

362 名前:デフォルトの名無しさん [2007/08/01(水) 04:54:48 ]
マネージドなプログラム組むならC++なんか使わねっつの!w

363 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 08:38:47 ]
>マネージドなプログラム

これってメリットある?
いや、一般論じゃなくて実際のところ。

364 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:07:42 ]
プラットフォームにVistaが使えるじゃねーか。

365 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 09:14:12 ]
いや、Vi$taにあうのはネイティブアプリ。

366 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 11:44:46 ]
>>363
自分専用ツールにはクラスライブラリが充実しているので便利。

367 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:01:52 ]
>>366
それにしては、Win32で出来るものが出来なかったり、中途半端。

だったらVCLみたくネイティブクラスライブラリ充実させろよ。


368 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:05:21 ]
>クラスライブラリが充実しているので

これって、ネイティブ版クラスライブラリを作成すれば完璧だおね。

M$のドトネト囲い込み戦略に嵌められてるだけじゃないの?
ドトネトは終焉したわけだし、無視した方が良いよ。

369 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 12:37:37 ]
ドトネト君っていろんなスレにいるな。
飽きないの?

370 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:00:03 ]
>プラットフォームにVista

つ ttp://gigazine.net/index.php?/news/comments/20070801_will_not_move_to_vista/

企業ユーザーの大多数はVistaへの移行を考えていない




371 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:47:45 ]
そりゃ、CreateFile系のAPI自体がバグでロックしちゃうんだもの。
企業ユーザが使おうとするわけがない。 >> VISTA

372 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:10:29 ]
>CreateFile系のAPI自体がバグでロックしちゃうんだもの。

kwsk

373 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:12:17 ]
これか
ttp://d.hatena.ne.jp/NyaRuRu/20070731/p2

374 名前:デフォルトの名無しさん [2007/08/01(水) 22:23:38 ]
Form.hに実装を書かせられるの嫌なんだけど、どうにかならない?
てか、なんでForm.hに実装させるような仕組みにしたんだろう?

375 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:02:47 ]
Form.cppに実装を移せば?

376 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:59:06 ]
実装を書かせるといっても、イベント用に開発環境が自動生成したものですよね。
これをcppにということになると、たとえば、フォームデザインの変更を
ちょこちょこやる場合、Formのデザイナとヘッダとcppを行ったり来たりでは
やっぱり大変だよね。



377 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:59:04 ]
ぶっちゃけVC++8の.NETサポートは「諦めろ」としか言えないよ・・・

378 名前:デフォルトの名無しさん [2007/08/02(木) 04:03:15 ]
VC++9 では何か変わってるの?

379 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 09:44:37 ]
そりゃ変わってますよw

380 名前:デフォルトの名無しさん [2007/08/02(木) 18:35:26 ]
VC2008先行して使っている人、
デサイナが生成するコードに何か大きな変化は有りましたか?



381 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 21:36:34 ]
試してみたけど変わってないみたいだね。残念だ…

382 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:27:36 ]
C++/CLI に関してはろくに対応されていないね。STL/CLR なんか作ってる場合じゃないと
思うんだが。結局、ネイティブ・アプリの ClickOnce 対応もしていないし

383 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 22:53:42 ]
いや、STL/CLRは「ろくな対応」なんじゃないか?

384 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 01:11:20 ]
ネイティブの STL にマネージド・オブジェクトが格納できればいらない対応でしょ
むしろ、2種類のライブラリに混乱しかねない

385 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 01:41:52 ]
マネージドなSTLはそれになりに便利だと思う。
標準C++ & boost萌えな俺には、C++/CLIやC#はきついんだが…

386 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 08:17:10 ]
>>384
確かに。少なくともクラス定義だけでも、
ネイティブクラスと値クラスに違いがなければいける。

前にも書いた気がするけど、ハンドル用のアロケータ書いてみたが、
ネイティブクラスはハンドルを持てないのでだめだった。


387 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 08:27:31 ]
C++0x の concept map が C++/CLI に実装されたら、それつかって managed class を STL コンテナにいれられるのでは...

388 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 10:16:37 ]
だとしたら、ほんとに STL/CLR は C++0x が確定するまでの繋ぎでしかなくなるな

389 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:18:52 ]
いや、一応STL/CLRは一度覚えればC#でも使えるんだろ?

390 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:21:41 ]
STL/CLR は C++/CLI せんよーだってさ
テンプレートで実装してるしね



391 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:22:36 ]
じゃあ、意味ねーなw

392 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:33:20 ]
なんかグダグダ

393 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:46:48 ]
でもまだSTL/CLRのコンテナは、System::CollectionsやSystem::Collections::Genericの
インタフェースを実装しているのが強みと言えるかもしれない。

394 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 16:51:41 ]
STLがあればGenerics要らんやん。

395 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 17:49:38 ]
C# にも展開してくれれば良かったんだけどなぁ

396 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 00:58:40 ]
まぁどっちかっつーと.NET言語の態勢を保ちつつ
コンパイル時のコード生成であるC++テンプレートをサポートするってのが
端から無茶やってるとは思うけどねぇ。

397 名前:デフォルトの名無しさん [2007/08/04(土) 13:00:12 ]
C++/CLIでは
stringstream
に相当するものは用意されているのでしょうか?


398 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 13:03:09 ]
.NETのクラスライブラリにはMemoryStreamが似ている存在。
でもstringstreamだって使いたければ使えばいいし。

399 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 15:31:51 ]
StringBuilder や StringReader, StringWriter を使ってもいいな

400 名前:デフォルトの名無しさん [2007/08/04(土) 23:23:24 ]
C++/CLIでも派生させるクラスのデストラクタはvirtualにすべき?
勝手になる?



401 名前:397 [2007/08/04(土) 23:41:29 ]
長さの単位がString,StringBuilderはInt32でStreamはInt64くさいけど
System::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;
}

402 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:21:56 ]
>>400

ポインタを使った場合だと、virtual 付けないとダメね
ハンドル型だと、virtualなしでもいける



403 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:23:24 ]
>>402
へえ、boost::shared_ptrみたいだな

404 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:26:44 ]
「リソース管理できてデストラクタに罠がない賢い手段」
目指してるものが同じだからな。

405 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 00:54:52 ]
>>402
トンクス!

406 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:28:41 ]
ハンドル型っていまいち概念がわからん。
マネージドヒープにある実体を指すポインタなんだろうか?


407 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 01:35:03 ]
ガベコレの都合から考えたほうが早いかも

408 名前:デフォルトの名無しさん [2007/08/05(日) 02:07:15 ]
ref class だと
デストラクタってDisposeじゃなかった?
だからvirtualにならないとつじつまが合わない気が・・・


409 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:28:45 ]
>>408
ref classのデストラクタはDispose()ナマじゃなからvirtualかどうかは意味がない。
デストラクタを宣言すると暗黙でDispose(bool)とDispose()とFinalize()が定義されて、
デストラクタはDispose(bool)から間接的に呼ばれるので、
結果、継承ツリーの下位のほうから順にデストラクタが呼ばれる形になる。

410 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 08:36:27 ]
>>406
ようするにそういうこと。ただしポインタ演算禁止で、演算子多重定義が使える。
ポインタ演算がやりたければinterior_ptr<>。



411 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 13:26:15 ]
>>406
> マネージドヒープにある実体を指すポインタ

が含まれてます。ハンドルには。
そのポインタ(あるいはID)を直接操作するのは危険なので、
(たとえばGCで、場所を移動されるかも知れないので)
ハンドルを介して、その対象を操作するのです。

用語としては、車を運転する時に、直接タイヤを動かすのではなくて、
ハンドルを回して、タイヤを動かすあのハンドルと同じです。

CでFILE型がファイルハンドルと呼ばれるのと同じ。


412 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 17:38:01 ]
>>410,411
thx

引数に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のどこにも出力されないんですけど。

413 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:48:52 ]
>>412
%は参照&のマネージド版。

ハンドルは、一応ポインタになぞらえられることを示すとするとこんな感じ。
値型をボックス化したハンドル絡みではこういうことになる。
void plusA(int^ x) {
(*x)++;
}

int x = 10;
int ^h = x;
plusA(h);
std::cout << x << ' ' << *h << '\n';

414 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:13:39 ]
void plusA(int^ x) {
(*x)++;
}

int ^x=10;
plusA(x); //書き換わる
plusA(*x); //そのまま

ようするに参照ということかな?VBのByrefみたいな。

std::coutもprintfもWriteLineもどこにも出力されないんだが、
どうやって出力結果を見てるの?

415 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 00:48:01 ]
>>414
Console::ReadLine();などででプログラム止めてる?

plusA(*x); って、*xがplusA関数に渡されるときに、
*xのコピーオブジェクトが作成され、そのハンドルがplusA関数の仮引数に
格納されるから、値が変わらないってことでいいのかな?



そうそう、
(10).Equals(11);
みたいに定数もオブジェクトとして扱われるんだね。

416 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 01:21:27 ]
>>414
コンソールプログラムのプロジェクトにしている?
そうしないと、cout, printf, WriteLineの出力先は現れないよ。

コンソールプログラムのプロジェクトでなかったのなら、
プロジェクトのプロパティのリンカのシステムか何かのとこにサブシステムの設定があるから、
その中のコンソールを選べばいい。
msdn2.microsoft.com/ja-jp/library/fcc1zstk(VS.80).aspx

>>415
plusA(*x);でコピーが作成されるのはそのとおり。ボクシングとは、
結局マネージドヒープに新しくオブジェクトを作って、そこへコピーすること。
値型のハンドルを引数に受け渡しすること自体はVBのByRefや
Cのポインタ渡しそっくりでいいんだが、ボクシングという
暗黙のオブジェクトのコピーが働くから話が少々厄介になっている。

417 名前:デフォルトの名無しさん [2007/08/06(月) 21:48:15 ]
boostみたいにprivateもシリアライズできる
非侵入型のシリアライズはないのでしょうか?


418 名前:デフォルトの名無しさん [2007/08/07(火) 19:32:08 ]
最初2003のManaged C++で作ってたんだが
都合により2005のC++/CLIに移ることにした。
プロジェクトを変換してコンパイルエラーを片付け、
いったんは動くようになったんだが
しばらくしてリビルドしようとすると

リンクエラーLNK2020「メタデータの操作に失敗しました」

が発生する。

今環境がないんで詳しいエラー内容は書けないんだが
「プロパティの数が違う」みたいなことを言われていた。

LNK2020にはいろいろ種類があるらしく、
「重複する型に、適合しないフィールド宣言があります」なら
リビルドすればいいらしいんだが、リビルドしてみても直らなかった。
プロジェクトを新規作成してファイルを全部入れても同じエラー。

ググっても英語のページすら出てこなかった。

誰か対処方法知ってたらplz

419 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:38:50 ]
最低限のコードを入れてリビルドして、どうなる?

420 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:42:36 ]
>>419
stdafx.h
stdafx.cpp
main.cpp
resource.h

だけの状態?



421 名前:デフォルトの名無しさん [2007/08/07(火) 20:48:11 ]
すまんLNK2022だった


422 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:26:28 ]
アノニマスな構造体があったの?

423 名前:418 mailto:sage [2007/08/08(水) 20:34:16 ]
どうやらプロジェクトファイルが壊れていた模様。
もう一回プロジェクト変換しなおして
ソースとヘッダ入れたら動いた。

お騒がせスマソ

>>422
なかった

424 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 04:43:41 ]
VC++ expressで
C++/CLIを使うときの制限事項ってどんなのがありますか?

425 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 12:05:30 ]
別に何も無いよ

426 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 05:45:05 ]
え?そうなの?

デバッグ機能とかGUIのデザインあたりが
はしょられてるんかと思ってた

427 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 08:36:21 ]
>>424
msdn2.microsoft.com/ja-jp/library/hs24szh9(VS.80).aspx

428 名前:デフォルトの名無しさん [2007/08/19(日) 21:32:30 ]
intからenum(enum classじゃない)に変換したいんだが
普通のC言語のようにただのキャストじゃ変換できない?
どうもできていないような気がするんだが。


429 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:09:33 ]
>>428
enum classじゃないenumはC++のそのままですよね?
単に使い方がおかしいだけでは。ソースを示してみたらどうです。

430 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:34:08 ]
DirectXのコードなんだが

D3DFORMAT fmt = (D3DFORMAT)21;




431 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:38:04 ]
実際のコードでは21の部分は変数になってる。
ユーザの入力。


432 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 22:44:36 ]
実体が unsigned long int なんじゃね?

433 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:03:15 ]
ヘッダではこうなってる
typedef enum _D3DFORMAT
{
(省略)
D3DFMT_A8R8G8B8 = 21,
(省略)
} D3DFORMAT;


434 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:05:14 ]
直後にブレークポイントつけてウォッチすると
fmtが「未定義の値」になってる。


435 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:48:25 ]
これで普通に代入できたぞ?

int val = 21;
D3DFORMAT fmt = (D3DFORMAT) val;
std::cout << fmt << std::endl;

VS 2008 Beta2 なんで、2005でも大丈夫かわからんが

436 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:52:56 ]
version違いの*.hがあって、21がない方のをincludeしてるとか。

437 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 00:53:44 ]
d3d9types.h なんて前からあるっしょ
これでリリース・ビルドしていたせいで変数がデバッガ上で正常に表示されていなかった
なんてオチだったら指さして笑うが

438 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:24:44 ]
C++/CLIって実際どのくらい使われてるの?

439 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 01:02:33 ]
Dの5倍くらい。

440 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:26:53 ]
>>438
俺仕事で使ってる
ただのラッパークラスだが



441 名前:デフォルトの名無しさん [2007/08/21(火) 09:18:49 ]
>>440
ネイティブのライブラリをドトネトから使うため?

442 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:54:43 ]
>>411
前の製品の再利用可能な部分
GUIはC#になっちまった

443 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 20:55:14 ]
安価ミス
>>441

444 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:01:14 ]
>435
enumは int だし。ってのはCの仕様だっけか。


445 名前:428 mailto:sage [2007/08/22(水) 21:45:58 ]
どうやらint関係なしに
直接D3DFMT_R8G8B8を入れても
<未定義の値>になる。

デバッグにはなってるんだが。



446 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:32:24 ]
enum は含まれる値を全て表現可能なサイズの型になる。

447 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 08:38:13 ]
>445
直接、D3DFORMAT の enum 値を出力してみたら?
TRACE でも cout でも何でもいいけど

ちなみに、コンパイラは VC8 なんだよな?

448 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 21:02:06 ]
>>447
ちゃんと21が出たw
VC8です

デバッガがミスっただけかな。

449 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:29:40 ]
フォームを多言語化して、ニュートラルと日本語のリソースを交互にいじってると
設定した値が元に戻ったりするんですが、これについて何かご存じな方
いらっしゃいますか?

450 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 18:35:42 ]
追記です
VS2005上での話です。



451 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:44:35 ]
この言語ほんとに流行りそうなの?

452 名前:デフォルトの名無しさん [2007/09/01(土) 20:26:10 ]
.NET が流行れば。
だって既存の C++ のライブラリの
ラッパーとしての存在価値は少なくともあるから。

で、.NET というか CLR ってこれからはやるのかね?
mono でも ASP.NET をはじめとしていろいろ動く
ようになってるし、.NET Compact Framework も
広がりを見せているようだけど。

453 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 21:22:06 ]
C++/CLI自体が単体で流行ることはないと思う。
あくまでもC++の資産を.NETで利用するためのツール。

454 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 22:30:15 ]
C++/CLI 自体は JDirect の正当な発展系だと思う
.net が COM 拡張として発生したように、外部管理オブジェクトのハンドリング用言語として
C++ を拡張したものだから
Windows 用の Objective-C みたいなものなんだけどなぁ

455 名前:デフォルトの名無しさん [2007/09/01(土) 23:46:12 ]
Objective-C つかったことないや

456 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 23:48:42 ]
はいはい死滅死滅

457 名前:デフォルトの名無しさん [2007/09/02(日) 14:31:02 ]
2008になったらC++CLIは何かかわんの?

458 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 14:47:34 ]
>>457
STL/CLRとこれまで規格に非準拠だった部分の対応。
例えばC型配列がarrayと同等に扱えるようななった。

459 名前:デフォルトの名無しさん [2007/09/02(日) 16:07:58 ]
がるぽっ

460 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 16:09:48 ]
C++0x が確定するまでは、大きな修正は入れてこないだろうね
また、いろいろと言われるから(w



461 名前:デフォルトの名無しさん [2007/09/02(日) 16:50:15 ]
なんか、見た目が変態的なソースコードになるよな・・・

無理矢理.netに対応させた文法を追加せずに、
C++にライブラリで誤魔化したほうがマシな気が・・・

.netに最適化した言語、とかならC#ってのをやってるのだし、
あんまりC++/CLIの存在意味がないような・・・

462 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 18:05:21 ]
それをやったのが mc++ で、マネージド・オブジェクトの判別が付かなくなったので
明示的に分離するように変更したんだよ
C++ は既存のままで、CLI を追加構文で、これでようやく見通しが良くなったのさ

oldSyntax で一度書いてみると、ライブラリで対応って言うのが以下に非現実的か
よくわかるよ

463 名前:デフォルトの名無しさん [2007/09/02(日) 20:13:36 ]
正直 Managed C++ は「よけいわかりにくいわ!」って
感じだったからな。マネージドな部分とそうでない部分が
明確に分かれている C++/CLI のほうがわかりやすい。
確かに上にあった Objective C の Microsoft 版だという
たとえは的を射ていると思う。

464 名前:デフォルトの名無しさん mailto:sage [2007/09/02(日) 21:16:36 ]
漏れにスキルさえあれば、JVM や Squeek に CLI ラッパをかぶせて、GCC の C++/CLI
実装を作ってみるのになぁ

465 名前:デフォルトの名無しさん [2007/09/07(金) 18:04:21 ]
.NET2005 C++/CLIで開発しています。
設定情報を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も実行してあるのですが。。。
このあたりの情報(こうすれば動く、実はサポート外など)を
お持ちの方、いましたら教えていただけませんか。
ネットで散々探しましたが、意外とこの話題少ないんです。
よろしくお願い板します。


466 名前:465です [2007/09/07(金) 18:08:54 ]
ごめんなさい。
<add key="HOGE" value="ほげほげ" />

<add key="HOGEHOGE" value="ほげほげ" />
の間違いです。


467 名前:デフォルトの名無しさん [2007/09/08(土) 09:39:16 ]
レベル高すぎ

468 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 12:14:40 ]
>>465
うちの環境だと正常に読めてる。Vertual PCでWin2k(SP4)。
xx.exe.configの名前はあってる?

469 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:02:27 ]
>>468
>xx.exe.configの名前はあってる?
それ、ビンゴです!
C#やVBはビルド時に自動でファイル名つけてくれるのに。。。

470 名前:デフォルトの名無しさん [2007/09/22(土) 02:10:50 ]
過疎ってんなー
やっぱりC++/CLIは
流行らないってことでおk?



471 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 03:07:29 ]
だってマネージ・アンマネージの橋渡し専用言語だもん

472 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 10:36:17 ]
GDI+死ぬほどのろいんで、ペイントルーチンをC++/CLIでGDI使って
組めばいいんじゃね
テキスト描画すんのもGDIのが楽なような

473 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 11:09:00 ]
>>472
VistaでDDBの速度的有利さは事実上消滅したけどな

474 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 12:22:14 ]
DirectDraw(笑)

475 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 13:28:37 ]
>>473
.NETがのろくて誰も使ってくれないから全員平等にのろくしたって感じだな

476 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 15:55:56 ]
馬鹿?

477 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:13:30 ]
.NETは最初から馬鹿だよ。

478 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 20:14:39 ]
>>475
Direct3DとWPFは仲間はずれ?

479 名前:デフォルトの名無しさん [2007/09/23(日) 04:10:23 ]
>>471
まぁそうなんだろうけど、そういう言語が CLI 上にちゃんと
用意されているところが Java VM とは違うところだよな。
といってドトネトを擁護してみる。

いや、漏れは好きだよ C++/CLI。というかこれがないと困る。
研究用のシミュレータをC++で boost とかのライブラリ使って
書いてるけど、フロントエンドの GUI が Windows Forms で
組めるのは楽だよ。

480 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 07:26:58 ]
それって逆に選択肢がないんじゃ… > シミュ&Win Forms



481 名前:デフォルトの名無しさん [2007/09/23(日) 08:18:37 ]
>>480 そうともいう。
シミュレータ自体はライブラリ化していて、コマンドライン版は
Linuxクラスタで動かしているんだけど、同じライブラリを
リンクしてWindowsで動くGUI版を作れるというのはかなり便利。

C# と C++/CLI と両方使って思うんだけど、 Windows Form デザイナ
って両者の言語でかなり安定感ちがわないか?
C++/CLI だとちょっとでも自動生成されたコードいじると
もうデザイナが発狂してしまう感じ。どの程度いじってもOKなのか
基準がよくわからない。C# のほうも基準がわからないという点では
同じなんだけど、結構いじっても Windows Form デザイナが
ちゃんと認識してくれる気がする。気がするだけか?

482 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:28:25 ]
C#のほうが解析しやすい言語だから

483 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 12:57:21 ]
解析なんてしてないだろw


484 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 13:05:02 ]
>>483

485 名前:デフォルトの名無しさん [2007/09/25(火) 14:00:50 ]
プリコンパイル済みヘッダーは
C++/CLIで使えるのでしょうか?


486 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 17:51:40 ]
使える

487 名前:デフォルトの名無しさん [2007/09/26(水) 23:29:57 ]
プロパチー見ろ

488 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 01:24:24 ]
C++で今まで書いてきて
GUIをもっとバリバリやりたくなってきたんですが
かといってMFCは嫌い。
C#は書き直すのがめんどいし
そんな漏れはC++/CLIがいい?

489 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 06:58:21 ]
>>488
Win32

490 名前:デフォルトの名無しさん [2007/09/27(木) 09:23:42 ]
ネイティブで書かれた関数(数値計算のエンジン)を別のスレッドで動かして、
結果をグラフィカルに表示するなんてことができます?
ネイティブの_begin_thread 関数を呼び出す必要が有りますか?
それともドトネトのなにかを呼び出すべきなんでしょうか?



491 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:42:20 ]
>>490
どちらでも可能だが、
マネージドのスレッドを使ったほうが取り扱いが楽だと思う。

492 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:44:11 ]
ネイティブを混ぜるマネージドアプリに何の意味がある。

493 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 09:47:20 ]
>>492
C++/CLIスレでそれを言うなよ。/safeにどの程度の意味があるんだ?

494 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:09:31 ]
>>492
ネイティブってどういう意味で使ってるの?

495 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 11:10:25 ]
>>494
マネージドアプリをアンマネージドアプリにする混ぜ物。

496 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:42:32 ]
むしろ逆だろ
pureでやりたいなら C# で十分じゃん
C++/CLI はそれだけじゃ物足りない人向けだろ

497 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 12:50:00 ]
WTLを忘れるな

498 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:31:12 ]
数値演算をC++にさせて「何の意味がある」って言われるなら、
<funcional>すら駄目ってことになるが…

499 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 15:41:05 ]
C#って初期バージョンで完成形だったのに
だんだん拡張されてキモクなってるよな。


500 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 16:21:17 ]
全然



501 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:14:05 ]
C#程度でキモいっつーんならC++とか使えないだろ

502 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 18:18:33 ]
>>488
楽したいならC# + C++/CLIとかWPFとか
厳しい道を行きたいなら DirectX Graphics


503 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 20:00:15 ]
おまえ、なんかものすごい勘違いしてない?

504 名前:デフォルトの名無しさん [2007/09/28(金) 01:23:51 ]
C#にある delegate の ThreadInvoke メソッドを使った
○ちスレッド処理って、同様のことは C++/CLI では
できないのかな。そもそも delegate がないから無理か。

505 名前:デフォルトの名無しさん [2007/09/28(金) 01:25:43 ]
ThreadInvoke じゃなかった、BeginInvoke だった。
それに、そもそも C++/CLI にも delegate はあるんだった。

506 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 01:44:23 ]
なにを言っているんだ

507 名前:デフォルトの名無しさん [2007/09/28(金) 06:58:38 ]
C++/CLIではコンテナクラスライブラリとして STL.NET
なるものを使うべきなんですか?それとも .NET Framework
にはほかにも(言語独立の)コンテナが用意されていて
そちらを使うべきなんですか?

508 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 09:23:21 ]
好きな方を使えばいい
C# で慣れてるなら .net の Collections を使えばいいし、違和感がないなら STL.NET で
いい。格納するものがネイティブだったら、既存のライブラリでもいいだろうし

509 名前:デフォルトの名無しさん [2007/09/28(金) 21:18:24 ]
C++/CLI では単純型の配列って初期化されるんでしょうか?
あと、配列の持つ Clone メソッドっていわゆる浅いコピー
しか作ってくれないんですよね?ハンドルを深くたどって
完全にコピーを作ってくれるようなメソッドはありませんか?
自分でディープコピーしないとだめ?

510 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 21:32:10 ]
一般論だけどDeepCopyの仕様はクラス作成者にしか決められないんじゃないかな。



511 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 00:18:26 ]
>509
Primitive型と値型は初期化される

512 名前:デフォルトの名無しさん [2007/09/29(土) 09:20:50 ]
ディープコピーのためのインターフェイスを実装していれば
自動的にディープコピーまでやってくれるなんてことは
ないんですかね。Microsoft では「簡易コピー」と「詳細コピー」
って呼んでるみたいですが、たとえば System::Array の
Clone は簡易コピーですよね?

513 名前:デフォルトの名無しさん mailto:sage [2007/09/29(土) 15:17:17 ]
自動でディープコピーやったら、循環参照のときコピー終わらなくなっちゃうよ。

ArrayのCloneは簡易コピーだけど、
一般的にICloneableインターフェース実装が
簡易コピーでないといけないということはない。
Cloneメソッドが簡易と詳細どちらのコピーをするかは、
実装者に任せるというのが一般的じゃない?

だから、既存のコピー実装が気に入らなければ、
外部で独自のコピー方法を定義するしかないよ。

514 名前:デフォルトの名無しさん [2007/09/30(日) 16:50:24 ]
CEDEC2007で
3ds maxは、C++/CLI使ってるようなこと言ってた。
プラグインもC++/CLIだし


515 名前:デフォルトの名無しさん [2007/09/30(日) 17:49:50 ]
コンテナはC++CLIならSTL+Boostがいいのかな?

516 名前:デフォルトの名無しさん [2007/09/30(日) 18:17:40 ]
>>515
ネイティブなクラスのインスタンスを格納するか
マネージドなクラスのインスタンスへのハンドルを格納するかに
よるんじゃね?boost::shared_ptr で格納するなら
また話は発散する。

517 名前:デフォルトの名無しさん [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 が未解決です。

って出ました。
これは何が原因なのでしょうか?


518 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:52:08 ]
>517
それは C++/CLI なの?

519 名前:デフォルトの名無しさん [2007/09/30(日) 23:09:35 ]
プロジェクトは、C++/CLIです。
stdafx.hに
#include <windows.h>
#pragma comment(lib, "user32.lib")
書いてます

ライブラリのほうは、C++/CLIじゃありません


520 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:37:16 ]
>>519
ライブラリは /MDでコンパイルしてます?



521 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:42:45 ]
     〜〜〜〜
  /        ヽ
 /   >~~~~~~~~/
 |  ∠  \  / |
| √  ⌒  <⌒ |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (6 ≡      \|   |  やる前から負けることを
   ≡  ┌ __「|  <
   \   \_( |   |  考えるバカがいるかコノヤロー!
     \   ー |   |
      \___|   \_____________

522 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 23:44:19 ]
誤爆スンマソ

523 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:13:11 ]
ネイティブコード吐かないんなら、C++使う意味無くない?

524 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 12:15:21 ]
無くない

525 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 13:00:02 ]
ドトネトにはイミナイ

526 名前:デフォルトの名無しさん [2007/10/01(月) 17:40:21 ]
>>520
おおおお
いけました。
ありがとうございます。
ありがとうございます。
ありがとうございます。


527 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:04:15 ]
修行するぞ。
修行するぞ。
修行するぞ。

528 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:17:04 ]
C++なのに遅いとか泣けるよな・・・
いや、C++/CLIをC++に含めるのは問題だと、ISOにバッサリ斬られたけど。

529 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 18:22:30 ]
ISOがタダシイ

530 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 19:11:49 ]
C※にでもすればいいのに。



531 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 20:59:18 ]
左を向けば変態的な/CLI
右を向けば変態的な0x
振り返っても変態的なC++

532 名前:デフォルトの名無しさん mailto:sage [2007/10/01(月) 21:01:04 ]
>531
ウホッ! 最高だな(w

533 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:13:50 ]
変態の俺にピッタリだ。

534 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 16:31:05 ]
おまいら、まだまだ子供だな。俺を満足させたかったら、MixedType を持ってこい
CLI もネイティブも多重継承してやるぜ

535 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 17:49:09 ]
MixedType ってなに?
boost::any とか?
boost::optional とか?

536 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:13:20 ]
混合型

ネイティブクラスがマネージ型のメンバを持ったり、
マネージクラスがネイティブクラスから派生したりするなど。

537 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 18:26:01 ]
そうだ、M$がマネージドをネイティブに書き換えれば準備完了!

538 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:17:09 ]
C++/CLI でも当然純粋仮想関数って認められているはずだよね?
ネイティブのライブラリの中で、純粋仮想関数を持つ
クラス X があるんだけど、そのライブラリを /clr なアプリから
リンクすると X のインスタンスなんて一切生成しようと
していないにもかかわらずリンカに怒られるんだよ。
なんでだろう。わかる人いる?

539 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 20:30:52 ]
人に聞くときゃ、エラーを出せよ

540 名前:538 mailto:sage [2007/10/03(水) 20:47:24 ]
ごめん、C++/CLI とか全然関係なかった。
よく考えたらコンストラクタの中で巡り巡って
純粋仮想関数が呼び出されているところがあった。

コンストラクタの中で仮想関数を呼ぶようなコードは
実際には仮想関数テーブルを見に行くようなバイナリが
生成されるわけじゃなくて静的に解決された _thiscall
を呼びに行くバイナリが生成されるわけだけど、
純粋仮想関数だとそれは定義されてないから
リンカに怒られているだけだった。



541 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:05:05 ]
そういうのは Init みたいな初期化関数を使うってのが C++ の定石だけど、
ちょっとカッコ悪いよね。

542 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 18:59:17 ]
うんかっこわるい
Initialize()でないと

543 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 13:18:06 ]
C++/CLIって検索に引っ掛けにくいキーワードなので、
もっと、こう、いい名前を考えてやらないか?
記号を含まずに検索エンジンでインデックス化しやすく、
かつ独創的で他の言語とは差別化できそうな名前。
しかも人間にとっても発音しやすい名前。

俺は卑猥な名前しか思いつかない。

544 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 14:28:39 ]
C++xCLI とか CLI++ とか?

545 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:08:34 ]
C#ってのはどうだろ?

546 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:19:30 ]
>545
巣に(・∀・)カエレ!!

547 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:37:04 ]
VBってのはどうだろ?

548 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:44:20 ]
VB から生まれしもの、元いたDLL地獄へ(・∀・)カエレ!!

549 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 15:55:36 ]
普通に検索できないか?

550 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 16:55:58 ]
Googleでは C++/CLI で一単語として認識しているみたいだね。
Googleって形態素解析してないと思ったたんだけど、
いつの間にかリッチな辞書使ってるんだなぁ。



551 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 18:39:54 ]
昔はC#とかも検索できんかったけどな

552 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:27:43 ]
GCは構文のシンメトリーが崩れるから糞

553 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:31:57 ]
明示的にdeleteすればおk

554 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:08:41 ]
>>552
爆破すれ

555 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 02:30:34 ]
>>554
ECMAに通報しました(・∀・)


556 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 07:26:39 ]
コナンか

557 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 07:45:17 ]
C++/CLIより懐の広い言語って
存在するの?


558 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:43:31 ]
D言語

559 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:16:37 ]
>>558
多重継承ができないじゃん。

560 名前:デフォルトの名無しさん [2007/10/09(火) 13:57:19 ]
多重継承いらないし。



561 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 14:08:14 ]
>>560 もっと広い心を持てよ。

562 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 07:33:54 ]
Mixinは素晴らしい世界

563 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 10:38:20 ]
しかし、未だにデザイン以降の仕様の影すらみえない罠

564 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 16:33:13 ]
VC2005さんに
/clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall' が無効です
言われた。
仲直りするにはどうしたらいいですか?
stdcallは譲れない

565 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 17:01:07 ]
pure safeを諦める

566 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 17:36:17 ]
>pure safe

これって、価値ある?

567 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 19:05:03 ]
C#やVB.NET並みには

568 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 02:43:15 ]
/clr
に変更したら、
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
は、使えないんですか?


569 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 10:09:14 ]
pure は .net Framework 専用だろ
/clr をつけたら、必要なライブラリは明示的に追加しろや
それか MDX か XNA でも使うんだな

570 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 18:22:36 ]
>>568
手順4だけでいいからやれ。
www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/



571 名前:デフォルトの名無しさん [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でこれを実現することはできるのでしょうか?



572 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 22:23:12 ]
自クラスのインスタンス生成時に親クラスの参照渡しとけばいいんじゃないの?

573 名前:571 [2007/10/11(木) 22:31:31 ]
自クラス→生成するインスタンス
親クラス→生成元インスタンスってことですか?
生成するクラスをDestClassとすると
DestClass destClass(this);
みたいなことでしょうか?

574 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 00:34:52 ]
>>571
普通にイベントで実装したらまずい?非同期操作はどの辺でからむのだろ。

575 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 01:29:41 ]
C++/クリ

576 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 08:49:21 ]
AsyncDelegate って AsyncResult のプロパティだろ?
AsyncResult にサンプルあるじゃん

577 名前:デフォルトの名無しさん [2007/10/14(日) 00:49:28 ]
黒川紀章氏のような一生に憧れるな。
ご冥福をお祈りいたします。


578 名前:デフォルトの名無しさん [2007/10/14(日) 01:19:16 ]
C++は別にJavaのような言語になる必要性を感じない。


579 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 01:34:07 ]
C++とjavaとC#の速度の違いを解説してるようなHPとか書籍あったら教えてください

580 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:42:15 ]
今勉強しるのですが、これ無くならないですよね?



581 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:47:54 ]
そんな心配がいるほど勉強に時間かかるようなもんかね?

582 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:29:49 ]
>>581
ドトネトのことを全く知らないと混乱するかも。
あと、古い情報(Managed C++)を見てしまって
混乱していた人がここに約一名。

583 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:24:04 ]
ManagedDirectX2.0は消えた

584 名前:デフォルトの名無しさん [2007/10/28(日) 22:39:07 ]
MSのC++/CLIがC++委員会に却下されたが、そうすると
次世代WindowsからC#しかサポートしない、Windows
プログラミングやりたかったらVB.netやC#使え!
と嫌がらせしてくるんじゃないかと不安。

VBやC#が嫌いだから困る。

今はMFC使っているが、今後もMFCは
サポートされるのだろうか?

MFCが駄目ならC++/CLIを使うが、それも
サポートされないとなると。。。

585 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:54:19 ]
現状は 0x の仕様策定待ちでしょ。だから、ライブラリ拡張しかしてないだけで
MFC のサポートが切れたら、WTLでも使えばいい
RADなくても大丈夫でしょ

586 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 07:37:41 ]
委員会氏ね

587 名前:デフォルトの名無しさん [2007/10/29(月) 11:13:27 ]
>>585
こういう事いうからC++基地外は。。。

RADはあった方がいい。



588 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 11:35:54 ]
RADは必須だが、MFCのビルダーはカンベン。

589 名前:デフォルトの名無しさん [2007/10/29(月) 14:17:53 ]
MFCのビルダーって何?

590 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:04:22 ]
RAD で具体的には何を指してるの?
C++/CLI のデザイナのこと?



591 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:12:20 ]
ま、一般的にはソースと連携するGUIエディタ。
コードジェネレータ以降のもの。

592 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 17:24:18 ]
じゃ,コードオナペット機能とかも?

593 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 21:20:00 ]
MFCのどこがRODなんだよ

594 名前:デフォルトの名無しさん [2007/10/29(月) 22:51:30 ]
RODって何だよ

595 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:15:21 ]
ヤンキースの選手だよ

596 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:10:20 ]
THE PAPER

597 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 09:03:02 ]
いや、だからVisual C++/MFCはRADを目指してるように見せかけてた。

しかし、C++のRADができあがると開発者がオプソに流れちゃう。

598 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:47:58 ]
>>597
それが C++/CLI + フォームデザイナではないのか?
あくまでネイティブにこだわる?

599 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:56:11 ]
>あくまでネイティブにこだわる?

これは詭弁。

実体は、M$が非ネイティブにこだわる。
gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
ターゲットマシンが別0$になっちゃう。

600 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:02:02 ]
C# で mono とか tcl/tk とか何かならわかるが、
pure C++ で Win32 アプリがRADで開発できても、
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
ってことにはならないと思うが。



601 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:17:25 ]
>ってことにはならないと思うが。

ってことにはならない、じゃなくて、M$が阻止する。
売る側からしたら端末みたく膨大な数を売るものだったら1台あたりに0$代払いたくない。

開発マシンとターゲットマシンと別々なのはふつー。
Winの前の時代なら、UNIXで開発&Makeして汎用機(メインフレム)に転送していた。

602 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:18:57 ]
>UNIXで開発&Makeして汎用機に転送していた。

あ、やっぱ、コンパイルは汎用機でやってたね。

603 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:21:44 ]
>>601
そういう意味じゃなくてさ、MS の作る Win32 アプリの RAD の出してきたコードを
gccでコンパイルしても、実行できる環境が Linux にある?
Wine がそんなに実用的になってる?

604 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:48:30 ]
>>603
Windowsヘッダーがgcc環境に移植されてM$が慌てたのを知らないの?

RADなら製品としては成立しなくて終了したっぽいけど、Delphi / Kylix、 C++ Builder / C++ Builder Linux があるお。

605 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:53:54 ]
>>603
あ、C++ BuilderにwxWidgetsのプラグインがあってポトペタできる。
wxWidgetsだからLinuxとMacは対応できる。

606 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:57:58 ]
>>605
MS がクロスプラットフォームな UI フレームワークを採用した RAD を
出すわけないと思うけど。pure C++ になったとしても、Win32 べったりでそ。
次はそれに文句言うの?

それとも Wine があるから
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
だ、って主張?

>>604
漏れも cygwin は使ってるけど、そういうおまいは使ってるのか?
きつい言葉だが、現実見えてる?

607 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:00:06 ]
じゃ、wxWidgetsだ!

MFCアプリケーションをLinuxに移植する
ttp://www.ibm.com/developerworks/jp/linux/library/l-mfc/

608 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:55:39 ]
おおい、C++/CLI スレなんだかから、
RAD にかんしては mono で Windows.Form
が使えるかどうかってのがメインの話題にならんの?
そういう俺は Hello world しか試したことがないよ。
mono では。

609 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:01:01 ]
mono=Hello worldツール

610 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:06:45 ]
RHD = Rapid "Hello world" Development



611 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:07:06 ]
RAD = RApid "Hello world" Development

612 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:12:21 ]
CLI = Common "Hello World" Language Infrastructure

613 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:13:08 ]
HAL = HALlo world is typo.

614 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:25:47 ]
V$ドトネトは、ドトネト Framework の機能を最大限に利用することによって、Hello worldの生産性を劇的に向上させます。

615 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:08:48 ]
質問です。
int 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じゃなくても動くんだろう?

616 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:54:58 ]
>>615
その方法でいいと思うよ。
>ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう? 
その為の混合モードだから。関数はマネージドとネイティブの両方のエントリーを持っている。
#pragma unmanagedを使うのは DllMainとlongjmpのときくらいじゃなったかな。

617 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:20:31 ]
>>616
ありがとうございます。
これで実装を進めることにします。

618 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:42:07 ]
IntPtrで与えられたポインタをマネージ型のByte配列に変換したいのですが、できるのでしょうか?
アンマネージへの変換はMSDNの参照などによりわかったのですが、
マネージへはまだわかっておりません。
アンマネージに変換して使用して配列を扱ってもいいのですが、なるべくマネージ型でまとめたいと思いまして・・・
そもそも無理だとしたらIntPtrのReadByteを使うしかありませんか?
どなたかご教授ください。

619 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:49:26 ]
>>618
なにがやりたいのかさっぱり和漢ねえ

620 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 07:42:28 ]
それへ知ってハッキングでもする気か?



621 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 08:04:03 ]
ポインタにするにはちょっとGCさえごまかせば済む話だが、
配列はオブジェクトなので新しく作る必要がある。
C++/CLI使っててポインタを使わない意味はないだろ。

622 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:11:18 ]
何やりたいかわからんが、Marshal::Copy とかか?

623 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:13:53 ]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
                        |
       ____.____    |
     |        |        |   |   
     |        | ∧_∧ |   |   
     |        |( ´∀`)つ ミ |   
     |        |/ ⊃  ノ |   |
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |    ミ C++/CLI

624 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 16:38:39 ]
懐かしすぎるぞそのAAw

625 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:27:06 ]
配列が三つもあるとかあほすぎ

626 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:46:23 ]
618への回答にinterior_ptrっていいだろうかw?
マネージ型には違いないぞ。

627 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 09:56:33 ]
たぶん、IntPtr に格納されたアドレス値をバイト配列に変換したい訳じゃないとは思うんだが(w

628 名前:デフォルトの名無しさん [2007/11/01(木) 09:58:54 ]
c++/cliを使うメリットってなんすか?
C++に中間吐かせるなんて、ビャーネが知ったら泣くぞ

629 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:05:13 ]
C++ を越えた変態になれる

630 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:09:50 ]
ま、C++と文法的に相性が悪かったCOMの悪夢の続きを見れるとか。



631 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:28:51 ]
.netライブラリを使える

632 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:43:22 ]
ドトネトライブラリはイラネ

既存のC/C++ライブラリを使いたいわけ。

633 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:46:59 ]
>>632
そういう人がなぜこのスレッドにいるのかわからん。

634 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:53:20 ]
何ていうか、分からないから見てみる、みたいな。

.NET「本音」相談室
ttp://www.atmarkit.co.jp/fwin2k/dnitpro/honneqa01/honneqa01_01.html

635 名前:デフォルトの名無しさん [2007/11/01(木) 19:00:04 ]
VB.netからとりあえず早さを求めてC++/CLIやり始めたんですが、
//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

636 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:04:11 ]
>>635
IDEが作成したファイルに手を加えるのはあまりよくない。
別のファイルに書こう。

637 名前:デフォルトの名無しさん [2007/11/01(木) 19:11:14 ]
>>635
ええ、絶対間違ってると思ってtest.cppってファイルを作って同じのを書いたのですが、
hogehoge という型指定子が見つかりませんと言われてしまうんです。

638 名前:635 [2007/11/01(木) 19:24:35 ]
//test.cpp
class hogehoge{};
//Form1.h
>>635の#pragma managedより下
って書いてみたんですけど、ヘッダーがコンパイルされたときには
test.cppはまだコンパイルされてないからこういう事になってるんですかね・・・?

639 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:28:28 ]
>>637
先にCをやってきな

640 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:38:55 ]
>>639
C++もだろ。



641 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:39:25 ]
だな。

642 名前:635 [2007/11/01(木) 19:41:44 ]
www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
とりあえずここに書いてることは大体理解出来るんですが、
足がかりになるようなページ教えていただけませんか?

643 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 20:05:07 ]
ヘッダと cpp の関係がわかってないのかな?
Form.h が メインの cpp に include されてコンパイルされる前に、hogehoge なるクラスが
定義されていないといけないんだよ
だから、hogehoge をヘッダに定義して、Form1.h で include すればいいんだけど
この説明の意味、わかる?

次はたぶん、混合型はサポートされていません。て、エラーになると予言(w

644 名前:635 [2007/11/01(木) 20:28:37 ]
>>643
ヘッダーを作らないといけないのを全く理解してませんでした。
IDEでクラスを作って見よう見まねでいじったらうまく行きました^^
丁寧にありがとうございましたmm

645 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 10:16:10 ]
まぁ、別に cpp を include してもいいんだけどな

646 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 12:23:45 ]
いやいや、リンクしたときに定義が衝突するでしょ

647 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:58:28 ]
それよりおれは>>635の1行目が気になる

648 名前:デフォルトの名無しさん [2007/11/03(土) 09:36:00 ]
それよりおれは>>647の1行目が気になる


649 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:27:44 ]
C++/CLIって、仕事あるか?


650 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:08:18 ]
>>647
実は俺も気になってた。



651 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:50:50 ]
>>649
3ds/maxの会社

652 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:38:42 ]
CLI穴だらけじゃん(`Д')ノ
じゃあみんなで補完しあおうぜ(=゚ω゚)ノ
議論盛り上がりまくり(゚д゚)ウマー
ドトネト対応(・∀・)イイ!

ってのが製作者の狙いということか( ゚Д゚)ハッ
いや…なん違うような(;´Д`)

653 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:56 ]
なすてnullptrなんて作たんだろ、nullで統一してよ

654 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:15:35 ]
ぬるぽ

655 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:37:10 ]
>>653
> なすてnullptrなんて作たんだろ、nullで統一してよ
'\0' と混同する人がいないとも限らないからかな…

656 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:52:35 ]
#define null 0としているプログラムは探せば結構ありそうに思う。
そんなコードでも変更なしに使えるようにという配慮では?

657 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:41:43 ]
え C++/CLIはヘッダーに全部実装するのが流儀だろ
cppファイルなんていらんのですよ

658 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:35:57 ]
実体化しないのかよ
まさか、プリコンパイルヘッダに全部うわなんだおまえやめr

659 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:19:51 ]
>>649
このあいだ、基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって仕事があって
何を使っても良かったし、ずっと自分が面倒みる事になる事は分ってたから
C++/CLI のラッパーで対応したが。

レアケースなのは間違いないな。

660 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:29:36 ]
>基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって

これ、何ていうドトネトアプリの破滅。



661 名前:デフォルトの名無しさん [2007/11/11(日) 16:39:40 ]
>>え C++/CLIはヘッダーに全部実装するのが流儀だろ
あ、やはりそうなのか?

662 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:10:26 ]
こより的には、そのやり方はちょっと…

663 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 19:56:20 ]
C#でいう「インターフェイス メンバの明示的実装」をやるにはどうすればいいの?

664 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:35:39 ]
自己解決
private: virtual Object^ Clone() = ICloneable::Clone { ... }

665 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:43:18 ]
CLI 部分については C++/CLI って C# よりむしろ VB に近いと思う瞬間の一つだな
raise とか

666 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:15:02 ]
>>662
マイナー杉

667 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:38:24 ]
>raise とか

これ、何てDelphi?

668 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 22:11:41 ]
2008入れてみた。
STL/CLI使えるぽ。

669 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 00:02:11 ]
.net fx 2.0 指定でも使える?

670 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:45:51 ]
この言語って、どの程度流行ってんの?



671 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:49:10 ]
各国で静かなブームですよ

672 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:01:19 ]
TreeViewとListViewにxVN_GETDISPINFO相当の機能がなかったので、
Controlから派生させて自作したよ('A`)
(VirtualModeもパフォーマンスがよくなかった・・・)

C#だとAPIや定数の定義が面倒だが、C++/CLIだとWin32ヘッダそのままインクルードして使えるから楽でいい。

だがそんなことするくらいなら最初っから
つMFC

・・・そんな感じだ。

673 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:21:38 ]
メッセージぐらいならわざわざControl使わんでもどうとでもなるが。
Notify系メッセージならWM_REFLECTION付きで当該コントロールに来るし。

674 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:22:08 ]
いやWTL最強

675 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 21:35:28 ]
>>673
メッセージぐらいではどうにもならんのですよ。
WM_NOTIFY + WM_REFLECTでメッセージ引っ掛けても、先が続かん

676 名前:デフォルトの名無しさん [2007/11/27(火) 18:43:18 ]
Windowsプログラムを組む必要がない場合
CLIを勉強する意味ある?

677 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:44:30 ]
Windows以外で動く独自のCLIを開発する場合とか。

678 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:48:44 ]
( ゚д゚ )( ゚д゚ )( ゚д゚ )…

679 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 12:51:24 ]
独自にCLRを実装するなら、CLI の勉強は必要だな
C++/CLI は不要だが

680 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:41:11 ]
Object型の変数の値が、値型Tのボクシングされたオブジェクトであるかどうかを
調べるにはどうすればいいんでしょうか
C#では obj is T とするところです



681 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:58:20 ]
参照型同様dynamic_cast<T^>(obj)がnullptrになるか否かで判定すればいい。

682 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 08:42:54 ]
safe_cast ?

683 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 14:51:10 ]
castに失敗した時に、例外が発生したほうがいいならsafe_cast。
nullptrを返してほしいなら、dynamic_cast。
if分の条件でスマートに使いたいなら、T::typeid->IsSubclassOf(obj)もしくはIsInstanceOfType()の組み合わせで。

684 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:30:52 ]
public ref class A : public Generic::IEnumerable<Object^>
{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator();
};
コンパイルエラーになるのだが、こういう実装はだめなの?

685 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:47:51 ]
エラーメッセージぐらい書(ry
System::Collections::IEnumerable::GetEnumeratorの方の宣言がない

686 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:57:42 ]
>>685
public 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 ^
]

687 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:29:04 ]
そりゃ返値が違うだけの同名同引数メソッドを宣言できるわけないだろ?
別名定義する必要がある。リファレンスのinterface classの解説見れ

688 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:51:04 ]
>>687
以下でコンパイル通りました。
public ref class A : Generic::IEnumerable<Object^>
{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator() = Generic::IEnumerable<Object^>::GetEnumerator;
virtual Collections::IEnumerator^ GetEnumerator2() = Collections::IEnumerable::GetEnumerator;
};
ありがとうございました。

689 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:15:44 ]
GetEnumerator2のほうはprivateにしたほうが

690 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:34:04 ]
>>689
早速private: + sealedにしました。
重ね重ねありがとう



691 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:56:00 ]
マネージクラスも共変できたらいいのにと思う。

692 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:58:42 ]
共変ができないのはなんでだろう
CLI 上の制約?

693 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:20:10 ]
>>691
Genericsは共変/反変をサポートしてるけど
標準クラスライブラリと有名どころの言語がサポートしていないので事実上死に設定

694 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:33:11 ]
たしかデリゲートもIL上は共変・反変できたような。

695 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 21:08:19 ]
C#はデリゲートなら共変反変おk

696 名前:デフォルトの名無しさん [2007/12/08(土) 17:56:12 ]
(C/C++スレから誘導されて来ました)
VS2005にて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配列使え!って怒られてしまうんですよね・・・)

697 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:16:54 ]
普通にできるはずだが?
エラーメッセージとか番号とかちゃんと書けよ

698 名前:デフォルトの名無しさん [2007/12/08(土) 18:21:12 ]
C++/CLIでSTLって使えないんですかね。。。
アンマネージ内で使いたいんですが、#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
とエラーが出ます。。。



699 名前:696 [2007/12/08(土) 18:25:37 ]
>>697
アンマネージクラスだと普通にできますが、マネージ環境だと
Hoge *hoge[10]; のところで
「error C4368: hoge' をマネージ 'test01:managedClass01' のメンバとして定義できません。混合型はサポートされていません」
といったエラーになります。

このエラーでググると「マネージ環境なんだからarray<>使うべし」といった見つかるのですが、
例文はintの配列とかそんなんばっかりで、今回のような場合はどうすりゃいいのか・・・といった感じです。

よろしくお願いいたします。

700 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:38:07 ]
>>699
ttp://msdn2.microsoft.com/ja-jp/library/xhfb39es(VS.80).aspx
Hoge *hoge[10]をメンバにしようとしてるんだろ。



701 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:41:38 ]
>>698
普通に使えるが?
ファイルぶっ壊れてるんじゃね?

702 名前:デフォルトの名無しさん [2007/12/08(土) 21:20:59 ]
>>701
まじですか。。。
再インストールしてみます、ありがとですω

703 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 00:51:43 ]
>>>701
再インストールしたところ思いっきり動きました。
5時間悩んでたのが馬鹿らしい。。。
ありがとでした。

704 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 09:02:32 ]
>>699
やりたいことと少し違うかも知れんが、
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; } 
};


705 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 11:06:54 ]
array<IntPtr>^ _ptrs = gcnew array<IntPtr>(10);

_ptrs[0] = IntPtr( new Hoge() );
・・・

でよくね?

706 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 19:48:19 ]
Conditional属性は使えないの?
諦めてマクロにするしかない?

707 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 09:08:28 ]
>>1
は?お前バカか?
.NET開発のデファクトスタンダードはC#だろ。常識的に考えて
いまさら時代遅れのC++なんて勉強する気しねーよ。
俺はJavaから始めたからよ。

で、ホントはC#よりC++/CLIのほうが未来ありそうなん?

708 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 11:09:09 ]
>>707
C++ と C++/CLI の区別が出来ない人は
他の人を馬鹿呼ばわりする資格はありません

709 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 11:30:45 ]
>>1の一行目は皮肉みたいなもんだろ
www.microsoft.com/japan/msdn/vs05/visualc/VS05Cplus.aspx
たぶんこういうのが元ネタだけどタイトルの割に内容は微妙にネガティブw

710 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:20:05 ]
C++/CLIはC++にどっぷり漬かった俺にはなんか納得できないものがある。



711 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 13:52:34 ]
全然チェックしてないけど.NET3.5で言語に手は加わってんの?
マーシャリングライブラリが付くって話は聞いたことがあるけど あとSTLと
この辺は言語そのものじゃないしな

712 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:18:30 ]
>>710
C++ がすでに何でもありなところを、さらに C++/CLI でなんでもありになってるので好感もてない?ポインタがふたとおりあるとか。

713 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:27:01 ]
ポインタじゃないよトラッキングハンドルだよ

714 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 02:35:25 ]
C++ のネイティブ・クラスをマネージドに委託できると嬉しいんだよな
普通にクラス作って gcnew したらマネージドになってくれるような機能

715 名前:デフォルトの名無しさん [2007/12/16(日) 10:15:37 ]
BCCで使えるの?

716 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 10:37:32 ]
gcc-cil はどうなったん?

717 名前:デフォルトの名無しさん [2007/12/18(火) 01:30:20 ]
なあ、Windowsアプリ作るならC#のほうが楽じゃね?
C++にマネージコードが混ざるとうっとおしい。

718 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 08:43:23 ]
つ C++ Builder

719 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:58:38 ]
おまえらがC#に移行しない理由は何?

720 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:10:26 ]
いつまで待ってもドトネトが必要とされない。




721 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:40:58 ]
Managed DirectX が消滅した

722 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:44:58 ]
というか C++/CLI と C# は使う場所がちがうだろ、常識的に考えて ...

723 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:46:48 ]
 ( <●><●>)   C丼だけで全部を作れないということは分かってます
  (U      )つ  
    u  u

724 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:54:40 ]
C#でC++よりも効率のいいデバイスドライバーって作れるの?

725 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:18:28 ]
ここC++/CLIスレなんだけど

726 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:24:39 ]
C#は.NETを必要とする代わりに便利な環境を提供するものだけど
C++/CLIはどうしても.NETが必要な人のためのものだからな

727 名前:デフォルトの名無しさん [2007/12/19(水) 01:40:55 ]
.NETが必要なこと自体に遭遇したことがない



728 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:06:30 ]
リッチなGUIを簡単に作れるのは魅力的なんだが

729 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:23:58 ]
.NETは美しいんだよ。
APIのドキュメントと長時間睨めっこしなくて済む


730 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:39:59 ]
それなんてDelphi/VCL?



731 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 14:20:22 ]
某は見苦しさを極めてるからなw

732 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 21:21:14 ]
>>724
そもそもC#で作ったデバイスドライバなんてあるの?

733 名前:デフォルトの名無しさん [2007/12/26(水) 00:46:25 ]
マネージド、アンマネージドのクラスや配列の解放について質問があります。

なるべく使い終わったクラスを即時メモリ解放したくて、
delete しているのですが、タスクマネージャで確認しても、解放しているようには見えません。
マネージもアンマネージも、deleteしたタイミングでメモリ解放されるのでしょうか?
それとも、マネージはGCに頼るしかなく、アンマネージはdeleteのあるタイミングでメモリ解放されるのでしょうか?



734 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:50:47 ]
アンマネージドでも確保したメモリをプールして使いまわしてるだけだから、
deleteしたからといって、即座にメモリがOSに返還されるわけではないよ。

735 名前:デフォルトの名無しさん [2007/12/26(水) 09:49:21 ]
既定の new や malloc から先はどうやってるのか
追いかけたことないけど,「必要なら持っていっても
いいよ」っていうマークでもつけておいて必要に応じて
OS が回収できるようにしているのかな?

736 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:36:14 ]
newやmallocはHeap系APIに丸投げでねーの?

737 名前:デフォルトの名無しさん [2007/12/26(水) 12:43:27 ]
>>736
ん?システムコールに丸投げ?
もっと,こう,自前でヒープを管理していると思うんだけど.

738 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 12:50:54 ]
>>737
ちょいと階層は深いけど最終的にはそうなってるようだね>VC2005で確認。
そうなると500KB以上は個別にVirtualAlloc/VirtualFreeで、
小さいのは一元管理で縮小せずに再利用だろう。

もしかしてLINKオプションの/HEAPオプションは使われてないかも?

739 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:04:01 ]
>>737
Win32APIはシステムコールではないよ。
Windowsのシステムコールは非公開でげすよ。

740 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 18:06:00 ]
ttp://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%B3%E3%83%BC%E3%83%AB

システムコールとは、オペレーティングシステム (OS)
(より明確に言えばOSのカーネル)の機能を呼び出すために使用される機構のこと。
実際のプログラミングにおいては、OSの機能は関数 (API) 呼び出しによって実現されるので、
OSの備える関数 (API) のことを指すこともある



741 名前:デフォルトの名無しさん [2007/12/26(水) 21:10:12 ]
>>739
Windows においてはシステムコールはサブシステムの裏に隠れて
いて直接呼び出すことはできないってこと?
Win32 API って POSIX レイヤと同じレイヤ?

742 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:37:07 ]
基本的に同じ。ただ、GDI関係は性能の都合でWin32 APIはカーネルのほうまで突っ込んでいたはず。
これをシステムコールというのかはわからないけど、
そういうサブシステムの下に位置するネイティブAPIと呼ばれるがNTDLL.DLLから公開されている。

9xの場合はVxDをDeviceIOControlで呼び出すことがシステムコールに相当するといっていいと思う。

743 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:22:48 ]
ファイナライザって要らない子?

744 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:31:21 ]
Disposeし忘れたときに必要

745 名前:デフォルトの名無しさん [2007/12/31(月) 00:50:26 ]
C++/CLIくだすれって消えてる?あるならそちらに誘導してもらえれば嬉しいです(’・ω・)
おとなしく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を使えなくて困ってます。



746 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 05:08:13 ]
メンバにBitmapとか描画バッファを用意して
button1_Clickで描画、PaintでBitBltが妥当じゃね?

747 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:55:55 ]
>>745
Form.CreateGraphicsは?
.NET使うならC#は読み書きできるようになった方がいろいろ便利だよ

748 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 10:16:58 ]
あけおめです。
>>746-747
レスありがとうございます。
まず>>747のようにbutton1_Clickに
Graphic^ g=CreateGraphics();
としてボタンでの描画は成功したんですが、今度はForm1_Paintが呼ばれたときに描画されたものが消えてしまったので
>>746の方法をとろうとしたんですが、ドキュメント見たりググったりしてもいまいち描画バッファ→画面のBitBltのやり方が
分からなかったので、
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#も勉強してみます(’・ω・)
ありがとうございました。

749 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 19:39:43 ]
make_publicの使い方に詳しい方いますか?

Releaseで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ヘッダ)に記述しているのですが、
どう対処すればよいのでしょうか?

750 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 10:05:33 ]
ガベージコレクションが走るスレッドっていうのは、どのスレッドかは確定してないんですよね?
ということは、ガベージコレクションが走る際に呼び出すアンマネージリソースの処理は
スレッドセーフにしておかなければならないということかな?

具体的には参照カウントオブジェクトのラッパーをC++/CLIで作って.NETで使おうとしてるんだけど
Release関数をスレッドセーフにしなきゃならんのかなと。
(Interlockedにすればいいだけの話なんで、それ自体はどうってことないのですが)



751 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 11:45:06 ]
ファイナライザスレッドは独立したスレッドなのでどのみちスレッドセーフは必要だろう

752 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:40:31 ]
ファイナライザ中でthisに属するオブジェクトも生存は保証されていないしね
本当に最後の手段なんだから、基本的にはGC任せにしない方がいいよ

753 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:43:49 ]
値型メンバは確実に生存してるぜ? その値型が持つ参照型はともかく

754 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 13:48:15 ]
>>751-752
ありがとうございます。

明示的にDisposeてことになると思うんですが、
そうなるとDisposeしなければならないインスタンスを持つクラスがデータ構造の奥深くにあると
どんどんDispose呼び出しが感染していって親クラスのとこまで行ってしまいますよね。

面倒くさいなぁと思いつつも、仕方が無いなぁとも感じてるんですが
やっぱりそんなもんですかね…

755 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 23:19:17 ]
アンマネージリソースを取り扱う以上、これは仕方ねっス。
頭切り替えるしかねっス。
ちなみにアンマネージリソース絡みでSafeHandleてのもあるんスが、
これの経緯とか調べるとさらに頭痛のタネが増えるのでオススメっす。

756 名前:デフォルトの名無しさん [2008/01/19(土) 09:08:52 ]
C++/CLIのメソッド引数に%をつけることについて質問があります。
マネージ型の配列や構造体をメソッドに渡すとき、”^”をつけますが、 この渡し方で配列や構造体の”ポインタ”が渡されると思っていました。
”^”の引数があるメソッドを持ったクラスライブラリをVBで参照したら “ByVal”となっていました。

ここで質問ですが、”^”でなく”^%”としなければ配列や構造体が 値渡し(配列全体がCopy?)になるのでしょうか?%をつける、 という概念がC++/CLIで現れたため悩んでいます。
できるならば 配列や構造体は値渡しでなく、アドレス渡し、配列渡しをしたいのですが・・・


757 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:13:22 ]
^は参照型 そのまま渡すと参照をコピー
%はC++の&、C#のref/outに当たる参照渡し
「参照型 参照渡し」で調べればいいよ

758 名前:デフォルトの名無しさん [2008/01/19(土) 09:54:02 ]
>>757
ありがとうございます。調べてみました。参照型の^引数はアドレスをコピー、参照型の^%渡しはアドレスを参照渡しする、ということですね。
ということは参照型の場合、どちらの方法で渡してもパフォーマンスに大きな影響はないということでしょうか。
参照型と参照渡しの違いを理解しないといけないのですね。

759 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:52:27 ]
.NETで参照渡しはあんまり使わないよ
参照で渡すことが多いんだったら初めから参照型にする

760 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:59:01 ]
TryParseとかあるじゃん



761 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:33:21 ]
スレ立ったのが2006年とかC++/CLIは使われてないの?
今からやるならC#のがいいかね?

762 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:06:34 ]
アンマネージC++もC#も使えるようになった上で、
もしも必要に迫られたときにやっと登場する言語だからね

763 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:54:30 ]
俺は間違っても#なんか使わん。意地でCLI

764 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:55:23 ]
シーナンバー

765 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:42:52 ]
>>761
そりゃ今からやるならC#だな
それよりVB.NETがいいに決まってるけどw
少なくともC++/CLIなんて論外だ
まあ.NETやること自体が間違いかもしれないが・・・

766 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:51:49 ]
なぜVBを推すのか

767 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 23:32:44 ]
ref じゃないクラスで managed なクラスのイベント捕まえようとしてるのだけど
やり方がわからないので教えてください。

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のコンパイルエラーがでて怒られます。

768 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 23:52:38 ]
>767
そりゃ、混合型は駄目だろ
ネイティブはネイティブ、マネージドはマネージドで扱わないと

769 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:25:09 ]
あ、hoge_wrapper::_hoge の型は
gcroot<hoge ^> _hoge;
って宣言してました。転記ミスです。


770 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:59:04 ]
いや、そこもそうだけど、gcnew しているイベント・ハンドラにネイティブの
ポインタ this を渡してるだろ?
マネージドでイベントアダプタみたいな物を作ったら?



771 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:13:10 ]
MAKE_DELIGATE っていうのを見つけて、試してみたら意図したとおりに動くみたいです。
中身を見てみたら 770 さんの言うとおりの動きなのかな?

とりあえず解決しましたー。ありがとです。






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

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

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