07/10/07 13:27:43
GCは構文のシンメトリーが崩れるから糞
553:デフォルトの名無しさん
07/10/07 13:31:57
明示的にdeleteすればおk
554:デフォルトの名無しさん
07/10/07 23:08:41
>>552
爆破すれ
555:デフォルトの名無しさん
07/10/08 02:30:34
>>554
ECMAに通報しました(・∀・)
556:デフォルトの名無しさん
07/10/08 07:26:39
コナンか
557:デフォルトの名無しさん
07/10/08 07:45:17
C++/CLIより懐の広い言語って
存在するの?
558:デフォルトの名無しさん
07/10/08 10:43:31
D言語
559:デフォルトの名無しさん
07/10/08 11:16:37
>>558
多重継承ができないじゃん。
560:デフォルトの名無しさん
07/10/09 13:57:19
多重継承いらないし。
561:デフォルトの名無しさん
07/10/09 14:08:14
>>560 もっと広い心を持てよ。
562:デフォルトの名無しさん
07/10/10 07:33:54
Mixinは素晴らしい世界
563:デフォルトの名無しさん
07/10/10 10:38:20
しかし、未だにデザイン以降の仕様の影すらみえない罠
564:デフォルトの名無しさん
07/10/10 16:33:13
VC2005さんに
/clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall' が無効です
言われた。
仲直りするにはどうしたらいいですか?
stdcallは譲れない
565:デフォルトの名無しさん
07/10/10 17:01:07
pure safeを諦める
566:デフォルトの名無しさん
07/10/10 17:36:17
>pure safe
これって、価値ある?
567:デフォルトの名無しさん
07/10/10 19:05:03
C#やVB.NET並みには
568:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/11 10:09:14
pure は .net Framework 専用だろ
/clr をつけたら、必要なライブラリは明示的に追加しろや
それか MDX か XNA でも使うんだな
570:デフォルトの名無しさん
07/10/11 18:22:36
>>568
手順4だけでいいからやれ。
URLリンク(www.microsoft.com)
571:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/11 22:23:12
自クラスのインスタンス生成時に親クラスの参照渡しとけばいいんじゃないの?
573:571
07/10/11 22:31:31
自クラス→生成するインスタンス
親クラス→生成元インスタンスってことですか?
生成するクラスをDestClassとすると
DestClass destClass(this);
みたいなことでしょうか?
574:デフォルトの名無しさん
07/10/12 00:34:52
>>571
普通にイベントで実装したらまずい?非同期操作はどの辺でからむのだろ。
575:デフォルトの名無しさん
07/10/12 01:29:41
C++/クリ
576:デフォルトの名無しさん
07/10/12 08:49:21
AsyncDelegate って AsyncResult のプロパティだろ?
AsyncResult にサンプルあるじゃん
577:デフォルトの名無しさん
07/10/14 00:49:28
黒川紀章氏のような一生に憧れるな。
ご冥福をお祈りいたします。
578:デフォルトの名無しさん
07/10/14 01:19:16
C++は別にJavaのような言語になる必要性を感じない。
579:デフォルトの名無しさん
07/10/14 01:34:07
C++とjavaとC#の速度の違いを解説してるようなHPとか書籍あったら教えてください
580:デフォルトの名無しさん
07/10/20 14:42:15
今勉強しるのですが、これ無くならないですよね?
581:デフォルトの名無しさん
07/10/20 14:47:54
そんな心配がいるほど勉強に時間かかるようなもんかね?
582:デフォルトの名無しさん
07/10/20 18:29:49
>>581
ドトネトのことを全く知らないと混乱するかも。
あと、古い情報(Managed C++)を見てしまって
混乱していた人がここに約一名。
583:デフォルトの名無しさん
07/10/21 20:24:04
ManagedDirectX2.0は消えた
584:デフォルトの名無しさん
07/10/28 22:39:07
MSのC++/CLIがC++委員会に却下されたが、そうすると
次世代WindowsからC#しかサポートしない、Windows
プログラミングやりたかったらVB.netやC#使え!
と嫌がらせしてくるんじゃないかと不安。
VBやC#が嫌いだから困る。
今はMFC使っているが、今後もMFCは
サポートされるのだろうか?
MFCが駄目ならC++/CLIを使うが、それも
サポートされないとなると。。。
585:デフォルトの名無しさん
07/10/29 00:54:19
現状は 0x の仕様策定待ちでしょ。だから、ライブラリ拡張しかしてないだけで
MFC のサポートが切れたら、WTLでも使えばいい
RADなくても大丈夫でしょ
586:デフォルトの名無しさん
07/10/29 07:37:41
委員会氏ね
587:デフォルトの名無しさん
07/10/29 11:13:27
>>585
こういう事いうからC++基地外は。。。
RADはあった方がいい。
588:デフォルトの名無しさん
07/10/29 11:35:54
RADは必須だが、MFCのビルダーはカンベン。
589:デフォルトの名無しさん
07/10/29 14:17:53
MFCのビルダーって何?
590:デフォルトの名無しさん
07/10/29 17:04:22
RAD で具体的には何を指してるの?
C++/CLI のデザイナのこと?
591:デフォルトの名無しさん
07/10/29 17:12:20
ま、一般的にはソースと連携するGUIエディタ。
コードジェネレータ以降のもの。
592:デフォルトの名無しさん
07/10/29 17:24:18
じゃ,コードオナペット機能とかも?
593:デフォルトの名無しさん
07/10/29 21:20:00
MFCのどこがRODなんだよ
594:デフォルトの名無しさん
07/10/29 22:51:30
RODって何だよ
595:デフォルトの名無しさん
07/10/29 23:15:21
ヤンキースの選手だよ
596:デフォルトの名無しさん
07/10/30 00:10:20
THE PAPER
597:デフォルトの名無しさん
07/10/30 09:03:02
いや、だからVisual C++/MFCはRADを目指してるように見せかけてた。
しかし、C++のRADができあがると開発者がオプソに流れちゃう。
598:デフォルトの名無しさん
07/10/30 10:47:58
>>597
それが C++/CLI + フォームデザイナではないのか?
あくまでネイティブにこだわる?
599:デフォルトの名無しさん
07/10/30 10:56:11
>あくまでネイティブにこだわる?
これは詭弁。
実体は、M$が非ネイティブにこだわる。
gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
ターゲットマシンが別0$になっちゃう。
600:デフォルトの名無しさん
07/10/30 11:02:02
C# で mono とか tcl/tk とか何かならわかるが、
pure C++ で Win32 アプリがRADで開発できても、
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
ってことにはならないと思うが。
601:デフォルトの名無しさん
07/10/30 11:17:25
>ってことにはならないと思うが。
ってことにはならない、じゃなくて、M$が阻止する。
売る側からしたら端末みたく膨大な数を売るものだったら1台あたりに0$代払いたくない。
開発マシンとターゲットマシンと別々なのはふつー。
Winの前の時代なら、UNIXで開発&Makeして汎用機(メインフレム)に転送していた。
602:デフォルトの名無しさん
07/10/30 11:18:57
>UNIXで開発&Makeして汎用機に転送していた。
あ、やっぱ、コンパイルは汎用機でやってたね。
603:デフォルトの名無しさん
07/10/30 11:21:44
>>601
そういう意味じゃなくてさ、MS の作る Win32 アプリの RAD の出してきたコードを
gccでコンパイルしても、実行できる環境が Linux にある?
Wine がそんなに実用的になってる?
604:デフォルトの名無しさん
07/10/30 11:48:30
>>603
Windowsヘッダーがgcc環境に移植されてM$が慌てたのを知らないの?
RADなら製品としては成立しなくて終了したっぽいけど、Delphi / Kylix、 C++ Builder / C++ Builder Linux があるお。
605:デフォルトの名無しさん
07/10/30 11:53:54
>>603
あ、C++ BuilderにwxWidgetsのプラグインがあってポトペタできる。
wxWidgetsだからLinuxとMacは対応できる。
606:デフォルトの名無しさん
07/10/30 11:57:58
>>605
MS がクロスプラットフォームな UI フレームワークを採用した RAD を
出すわけないと思うけど。pure C++ になったとしても、Win32 べったりでそ。
次はそれに文句言うの?
それとも Wine があるから
>gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、
>ターゲットマシンが別0$になっちゃう。
だ、って主張?
>>604
漏れも cygwin は使ってるけど、そういうおまいは使ってるのか?
きつい言葉だが、現実見えてる?
607:デフォルトの名無しさん
07/10/30 12:00:06
じゃ、wxWidgetsだ!
MFCアプリケーションをLinuxに移植する
URLリンク(www.ibm.com)
608:デフォルトの名無しさん
07/10/30 12:55:39
おおい、C++/CLI スレなんだかから、
RAD にかんしては mono で Windows.Form
が使えるかどうかってのがメインの話題にならんの?
そういう俺は Hello world しか試したことがないよ。
mono では。
609:デフォルトの名無しさん
07/10/30 13:01:01
mono=Hello worldツール
610:デフォルトの名無しさん
07/10/30 13:06:45
RHD = Rapid "Hello world" Development
611:デフォルトの名無しさん
07/10/30 13:07:06
RAD = RApid "Hello world" Development
612:デフォルトの名無しさん
07/10/30 13:12:21
CLI = Common "Hello World" Language Infrastructure
613:デフォルトの名無しさん
07/10/30 13:13:08
HAL = HALlo world is typo.
614:デフォルトの名無しさん
07/10/30 13:25:47
V$ドトネトは、ドトネト Framework の機能を最大限に利用することによって、Hello worldの生産性を劇的に向上させます。
615:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/30 16:54:58
>>615
その方法でいいと思うよ。
>ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう?
その為の混合モードだから。関数はマネージドとネイティブの両方のエントリーを持っている。
#pragma unmanagedを使うのは DllMainとlongjmpのときくらいじゃなったかな。
617:デフォルトの名無しさん
07/10/30 18:20:31
>>616
ありがとうございます。
これで実装を進めることにします。
618:デフォルトの名無しさん
07/10/31 01:42:07
IntPtrで与えられたポインタをマネージ型のByte配列に変換したいのですが、できるのでしょうか?
アンマネージへの変換はMSDNの参照などによりわかったのですが、
マネージへはまだわかっておりません。
アンマネージに変換して使用して配列を扱ってもいいのですが、なるべくマネージ型でまとめたいと思いまして・・・
そもそも無理だとしたらIntPtrのReadByteを使うしかありませんか?
どなたかご教授ください。
619:デフォルトの名無しさん
07/10/31 01:49:26
>>618
なにがやりたいのかさっぱり和漢ねえ
620:デフォルトの名無しさん
07/10/31 07:42:28
それへ知ってハッキングでもする気か?
621:デフォルトの名無しさん
07/10/31 08:04:03
ポインタにするにはちょっとGCさえごまかせば済む話だが、
配列はオブジェクトなので新しく作る必要がある。
C++/CLI使っててポインタを使わない意味はないだろ。
622:デフォルトの名無しさん
07/10/31 14:11:18
何やりたいかわからんが、Marshal::Copy とかか?
623:デフォルトの名無しさん
07/10/31 14:13:53
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――‐┬┘
|
____.____ |
| | | |
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | |
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ C++/CLI
624:デフォルトの名無しさん
07/10/31 16:38:39
懐かしすぎるぞそのAAw
625:デフォルトの名無しさん
07/10/31 19:27:06
配列が三つもあるとかあほすぎ
626:デフォルトの名無しさん
07/10/31 21:46:23
618への回答にinterior_ptrっていいだろうかw?
マネージ型には違いないぞ。
627:デフォルトの名無しさん
07/11/01 09:56:33
たぶん、IntPtr に格納されたアドレス値をバイト配列に変換したい訳じゃないとは思うんだが(w
628:デフォルトの名無しさん
07/11/01 09:58:54
c++/cliを使うメリットってなんすか?
C++に中間吐かせるなんて、ビャーネが知ったら泣くぞ
629:デフォルトの名無しさん
07/11/01 10:05:13
C++ を越えた変態になれる
630:デフォルトの名無しさん
07/11/01 10:09:50
ま、C++と文法的に相性が悪かったCOMの悪夢の続きを見れるとか。
631:デフォルトの名無しさん
07/11/01 10:28:51
.netライブラリを使える
632:デフォルトの名無しさん
07/11/01 10:43:22
ドトネトライブラリはイラネ
既存のC/C++ライブラリを使いたいわけ。
633:デフォルトの名無しさん
07/11/01 13:46:59
>>632
そういう人がなぜこのスレッドにいるのかわからん。
634:デフォルトの名無しさん
07/11/01 13:53:20
何ていうか、分からないから見てみる、みたいな。
.NET「本音」相談室
URLリンク(www.atmarkit.co.jp)
635:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/11/01 19:04:11
>>635
IDEが作成したファイルに手を加えるのはあまりよくない。
別のファイルに書こう。
637:デフォルトの名無しさん
07/11/01 19:11:14
>>635
ええ、絶対間違ってると思ってtest.cppってファイルを作って同じのを書いたのですが、
hogehoge という型指定子が見つかりませんと言われてしまうんです。
638:635
07/11/01 19:24:35
//test.cpp
class hogehoge{};
//Form1.h
>>635の#pragma managedより下
って書いてみたんですけど、ヘッダーがコンパイルされたときには
test.cppはまだコンパイルされてないからこういう事になってるんですかね・・・?
639:デフォルトの名無しさん
07/11/01 19:28:28
>>637
先にCをやってきな
640:デフォルトの名無しさん
07/11/01 19:38:55
>>639
C++もだろ。
641:デフォルトの名無しさん
07/11/01 19:39:25
だな。
642:635
07/11/01 19:41:44
URLリンク(www.asahi-net.or.jp)
とりあえずここに書いてることは大体理解出来るんですが、
足がかりになるようなページ教えていただけませんか?
643:デフォルトの名無しさん
07/11/01 20:05:07
ヘッダと cpp の関係がわかってないのかな?
Form.h が メインの cpp に include されてコンパイルされる前に、hogehoge なるクラスが
定義されていないといけないんだよ
だから、hogehoge をヘッダに定義して、Form1.h で include すればいいんだけど
この説明の意味、わかる?
次はたぶん、混合型はサポートされていません。て、エラーになると予言(w
644:635
07/11/01 20:28:37
>>643
ヘッダーを作らないといけないのを全く理解してませんでした。
IDEでクラスを作って見よう見まねでいじったらうまく行きました^^
丁寧にありがとうございましたmm
645:デフォルトの名無しさん
07/11/02 10:16:10
まぁ、別に cpp を include してもいいんだけどな
646:デフォルトの名無しさん
07/11/02 12:23:45
いやいや、リンクしたときに定義が衝突するでしょ
647:デフォルトの名無しさん
07/11/02 16:58:28
それよりおれは>>635の1行目が気になる
648:デフォルトの名無しさん
07/11/03 09:36:00
それよりおれは>>647の1行目が気になる
649:デフォルトの名無しさん
07/11/05 01:27:44
C++/CLIって、仕事あるか?
650:デフォルトの名無しさん
07/11/05 14:08:18
>>647
実は俺も気になってた。
651:デフォルトの名無しさん
07/11/05 16:50:50
>>649
3ds/maxの会社
652:デフォルトの名無しさん
07/11/05 17:38:42
CLI穴だらけじゃん(`Д')ノ
じゃあみんなで補完しあおうぜ(=゚ω゚)ノ
議論盛り上がりまくり(゚д゚)ウマー
ドトネト対応(・∀・)イイ!
ってのが製作者の狙いということか( ゚Д゚)ハッ
いや…なん違うような(;´Д`)
653:デフォルトの名無しさん
07/11/05 21:55:56
なすてnullptrなんて作たんだろ、nullで統一してよ
654:デフォルトの名無しさん
07/11/06 00:15:35
ぬるぽ
655:デフォルトの名無しさん
07/11/06 00:37:10
>>653
> なすてnullptrなんて作たんだろ、nullで統一してよ
'\0' と混同する人がいないとも限らないからかな…
656:デフォルトの名無しさん
07/11/06 00:52:35
#define null 0としているプログラムは探せば結構ありそうに思う。
そんなコードでも変更なしに使えるようにという配慮では?
657:デフォルトの名無しさん
07/11/08 18:41:43
え C++/CLIはヘッダーに全部実装するのが流儀だろ
cppファイルなんていらんのですよ
658:デフォルトの名無しさん
07/11/08 20:35:57
実体化しないのかよ
まさか、プリコンパイルヘッダに全部うわなんだおまえやめr
659:デフォルトの名無しさん
07/11/09 10:19:51
>>649
このあいだ、基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって仕事があって
何を使っても良かったし、ずっと自分が面倒みる事になる事は分ってたから
C++/CLI のラッパーで対応したが。
レアケースなのは間違いないな。
660:デフォルトの名無しさん
07/11/09 10:29:36
>基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって
これ、何ていうドトネトアプリの破滅。
661:デフォルトの名無しさん
07/11/11 16:39:40
>>え C++/CLIはヘッダーに全部実装するのが流儀だろ
あ、やはりそうなのか?
662:デフォルトの名無しさん
07/11/11 17:10:26
こより的には、そのやり方はちょっと…
663:デフォルトの名無しさん
07/11/15 19:56:20
C#でいう「インターフェイス メンバの明示的実装」をやるにはどうすればいいの?
664:デフォルトの名無しさん
07/11/15 20:35:39
自己解決
private: virtual Object^ Clone() = ICloneable::Clone { ... }
665:デフォルトの名無しさん
07/11/15 21:43:18
CLI 部分については C++/CLI って C# よりむしろ VB に近いと思う瞬間の一つだな
raise とか
666:デフォルトの名無しさん
07/11/15 22:15:02
>>662
マイナー杉
667:デフォルトの名無しさん
07/11/16 11:38:24
>raise とか
これ、何てDelphi?
668:デフォルトの名無しさん
07/11/20 22:11:41
2008入れてみた。
STL/CLI使えるぽ。
669:デフォルトの名無しさん
07/11/21 00:02:11
.net fx 2.0 指定でも使える?
670:デフォルトの名無しさん
07/11/24 09:45:51
この言語って、どの程度流行ってんの?
671:デフォルトの名無しさん
07/11/24 09:49:10
各国で静かなブームですよ
672:デフォルトの名無しさん
07/11/24 11:01:19
TreeViewとListViewにxVN_GETDISPINFO相当の機能がなかったので、
Controlから派生させて自作したよ('A`)
(VirtualModeもパフォーマンスがよくなかった・・・)
C#だとAPIや定数の定義が面倒だが、C++/CLIだとWin32ヘッダそのままインクルードして使えるから楽でいい。
だがそんなことするくらいなら最初っから
つMFC
・・・そんな感じだ。
673:デフォルトの名無しさん
07/11/24 11:21:38
メッセージぐらいならわざわざControl使わんでもどうとでもなるが。
Notify系メッセージならWM_REFLECTION付きで当該コントロールに来るし。
674:デフォルトの名無しさん
07/11/24 11:22:08
いやWTL最強
675:デフォルトの名無しさん
07/11/24 21:35:28
>>673
メッセージぐらいではどうにもならんのですよ。
WM_NOTIFY + WM_REFLECTでメッセージ引っ掛けても、先が続かん
676:デフォルトの名無しさん
07/11/27 18:43:18
Windowsプログラムを組む必要がない場合
CLIを勉強する意味ある?
677:デフォルトの名無しさん
07/11/27 18:44:30
Windows以外で動く独自のCLIを開発する場合とか。
678:デフォルトの名無しさん
07/11/27 18:48:44
( ゚д゚ )( ゚д゚ )( ゚д゚ )…
679:デフォルトの名無しさん
07/11/28 12:51:24
独自にCLRを実装するなら、CLI の勉強は必要だな
C++/CLI は不要だが
680:デフォルトの名無しさん
07/11/30 00:41:11
Object型の変数の値が、値型Tのボクシングされたオブジェクトであるかどうかを
調べるにはどうすればいいんでしょうか
C#では obj is T とするところです
681:デフォルトの名無しさん
07/11/30 00:58:20
参照型同様dynamic_cast<T^>(obj)がnullptrになるか否かで判定すればいい。
682:デフォルトの名無しさん
07/11/30 08:42:54
safe_cast ?
683:デフォルトの名無しさん
07/11/30 14:51:10
castに失敗した時に、例外が発生したほうがいいならsafe_cast。
nullptrを返してほしいなら、dynamic_cast。
if分の条件でスマートに使いたいなら、T::typeid->IsSubclassOf(obj)もしくはIsInstanceOfType()の組み合わせで。
684:デフォルトの名無しさん
07/12/01 08:30:52
public ref class A : public Generic::IEnumerable<Object^>
{
public:
virtual Generic::IEnumerator<Object^>^ GetEnumerator();
};
コンパイルエラーになるのだが、こういう実装はだめなの?
685:デフォルトの名無しさん
07/12/01 08:47:51
エラーメッセージぐらい書(ry
System::Collections::IEnumerable::GetEnumeratorの方の宣言がない
686:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/01 09:29:04
そりゃ返値が違うだけの同名同引数メソッドを宣言できるわけないだろ?
別名定義する必要がある。リファレンスのinterface classの解説見れ
688:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/01 15:15:44
GetEnumerator2のほうはprivateにしたほうが
690:デフォルトの名無しさん
07/12/01 16:34:04
>>689
早速private: + sealedにしました。
重ね重ねありがとう
691:デフォルトの名無しさん
07/12/01 16:56:00
マネージクラスも共変できたらいいのにと思う。
692:デフォルトの名無しさん
07/12/01 17:58:42
共変ができないのはなんでだろう
CLI 上の制約?
693:デフォルトの名無しさん
07/12/02 02:20:10
>>691
Genericsは共変/反変をサポートしてるけど
標準クラスライブラリと有名どころの言語がサポートしていないので事実上死に設定
694:デフォルトの名無しさん
07/12/02 02:33:11
たしかデリゲートもIL上は共変・反変できたような。
695:デフォルトの名無しさん
07/12/04 21:08:19
C#はデリゲートなら共変反変おk
696:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/08 18:16:54
普通にできるはずだが?
エラーメッセージとか番号とかちゃんと書けよ
698:デフォルトの名無しさん
07/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
07/12/08 18:25:37
>>697
アンマネージクラスだと普通にできますが、マネージ環境だと
Hoge *hoge[10]; のところで
「error C4368: hoge' をマネージ 'test01:managedClass01' のメンバとして定義できません。混合型はサポートされていません」
といったエラーになります。
このエラーでググると「マネージ環境なんだからarray<>使うべし」といった見つかるのですが、
例文はintの配列とかそんなんばっかりで、今回のような場合はどうすりゃいいのか・・・といった感じです。
よろしくお願いいたします。
700:デフォルトの名無しさん
07/12/08 18:38:07
>>699
URLリンク(msdn2.microsoft.com)(VS.80).aspx
Hoge *hoge[10]をメンバにしようとしてるんだろ。
701:デフォルトの名無しさん
07/12/08 18:41:38
>>698
普通に使えるが?
ファイルぶっ壊れてるんじゃね?
702:デフォルトの名無しさん
07/12/08 21:20:59
>>701
まじですか。。。
再インストールしてみます、ありがとですω
703:デフォルトの名無しさん
07/12/09 00:51:43
>>>701
再インストールしたところ思いっきり動きました。
5時間悩んでたのが馬鹿らしい。。。
ありがとでした。
704:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/12/09 11:06:54
array<IntPtr>^ _ptrs = gcnew array<IntPtr>(10);
_ptrs[0] = IntPtr( new Hoge() );
・・・
でよくね?
706:デフォルトの名無しさん
07/12/09 19:48:19
Conditional属性は使えないの?
諦めてマクロにするしかない?
707:デフォルトの名無しさん
07/12/15 09:08:28
>>1
は?お前バカか?
.NET開発のデファクトスタンダードはC#だろ。常識的に考えて
いまさら時代遅れのC++なんて勉強する気しねーよ。
俺はJavaから始めたからよ。
で、ホントはC#よりC++/CLIのほうが未来ありそうなん?
708:デフォルトの名無しさん
07/12/15 11:09:09
>>707
C++ と C++/CLI の区別が出来ない人は
他の人を馬鹿呼ばわりする資格はありません
709:デフォルトの名無しさん
07/12/15 11:30:45
>>1の一行目は皮肉みたいなもんだろ
URLリンク(www.microsoft.com)
たぶんこういうのが元ネタだけどタイトルの割に内容は微妙にネガティブw
710:デフォルトの名無しさん
07/12/15 13:20:05
C++/CLIはC++にどっぷり漬かった俺にはなんか納得できないものがある。
711:デフォルトの名無しさん
07/12/15 13:52:34
全然チェックしてないけど.NET3.5で言語に手は加わってんの?
マーシャリングライブラリが付くって話は聞いたことがあるけど あとSTLと
この辺は言語そのものじゃないしな
712:デフォルトの名無しさん
07/12/16 01:18:30
>>710
C++ がすでに何でもありなところを、さらに C++/CLI でなんでもありになってるので好感もてない?ポインタがふたとおりあるとか。
713:デフォルトの名無しさん
07/12/16 01:27:01
ポインタじゃないよトラッキングハンドルだよ
714:デフォルトの名無しさん
07/12/16 02:35:25
C++ のネイティブ・クラスをマネージドに委託できると嬉しいんだよな
普通にクラス作って gcnew したらマネージドになってくれるような機能
715:デフォルトの名無しさん
07/12/16 10:15:37
BCCで使えるの?
716:デフォルトの名無しさん
07/12/16 10:37:32
gcc-cil はどうなったん?
717:デフォルトの名無しさん
07/12/18 01:30:20
なあ、Windowsアプリ作るならC#のほうが楽じゃね?
C++にマネージコードが混ざるとうっとおしい。
718:デフォルトの名無しさん
07/12/18 08:43:23
つ C++ Builder
719:デフォルトの名無しさん
07/12/18 11:58:38
おまえらがC#に移行しない理由は何?
720:デフォルトの名無しさん
07/12/18 13:10:26
いつまで待ってもドトネトが必要とされない。
721:デフォルトの名無しさん
07/12/18 13:40:58
Managed DirectX が消滅した
722:デフォルトの名無しさん
07/12/18 13:44:58
というか C++/CLI と C# は使う場所がちがうだろ、常識的に考えて ...
723:デフォルトの名無しさん
07/12/18 13:46:48
( <●><●>) C丼だけで全部を作れないということは分かってます
(U )つ
u u
724:デフォルトの名無しさん
07/12/18 15:54:40
C#でC++よりも効率のいいデバイスドライバーって作れるの?
725:デフォルトの名無しさん
07/12/18 17:18:28
ここC++/CLIスレなんだけど
726:デフォルトの名無しさん
07/12/18 17:24:39
C#は.NETを必要とする代わりに便利な環境を提供するものだけど
C++/CLIはどうしても.NETが必要な人のためのものだからな
727:デフォルトの名無しさん
07/12/19 01:40:55
.NETが必要なこと自体に遭遇したことがない
728:デフォルトの名無しさん
07/12/19 10:06:30
リッチなGUIを簡単に作れるのは魅力的なんだが
729:デフォルトの名無しさん
07/12/19 11:23:58
.NETは美しいんだよ。
APIのドキュメントと長時間睨めっこしなくて済む
730:デフォルトの名無しさん
07/12/19 11:39:59
それなんてDelphi/VCL?
731:デフォルトの名無しさん
07/12/19 14:20:22
某は見苦しさを極めてるからなw
732:デフォルトの名無しさん
07/12/25 21:21:14
>>724
そもそもC#で作ったデバイスドライバなんてあるの?
733:デフォルトの名無しさん
07/12/26 00:46:25
マネージド、アンマネージドのクラスや配列の解放について質問があります。
なるべく使い終わったクラスを即時メモリ解放したくて、
delete しているのですが、タスクマネージャで確認しても、解放しているようには見えません。
マネージもアンマネージも、deleteしたタイミングでメモリ解放されるのでしょうか?
それとも、マネージはGCに頼るしかなく、アンマネージはdeleteのあるタイミングでメモリ解放されるのでしょうか?
734:デフォルトの名無しさん
07/12/26 00:50:47
アンマネージドでも確保したメモリをプールして使いまわしてるだけだから、
deleteしたからといって、即座にメモリがOSに返還されるわけではないよ。
735:デフォルトの名無しさん
07/12/26 09:49:21
既定の new や malloc から先はどうやってるのか
追いかけたことないけど,「必要なら持っていっても
いいよ」っていうマークでもつけておいて必要に応じて
OS が回収できるようにしているのかな?
736:デフォルトの名無しさん
07/12/26 11:36:14
newやmallocはHeap系APIに丸投げでねーの?
737:デフォルトの名無しさん
07/12/26 12:43:27
>>736
ん?システムコールに丸投げ?
もっと,こう,自前でヒープを管理していると思うんだけど.
738:デフォルトの名無しさん
07/12/26 12:50:54
>>737
ちょいと階層は深いけど最終的にはそうなってるようだね>VC2005で確認。
そうなると500KB以上は個別にVirtualAlloc/VirtualFreeで、
小さいのは一元管理で縮小せずに再利用だろう。
もしかしてLINKオプションの/HEAPオプションは使われてないかも?
739:デフォルトの名無しさん
07/12/26 18:04:01
>>737
Win32APIはシステムコールではないよ。
Windowsのシステムコールは非公開でげすよ。
740:デフォルトの名無しさん
07/12/26 18:06:00
URLリンク(ja.wikipedia.org)
システムコールとは、オペレーティングシステム (OS)
(より明確に言えばOSのカーネル)の機能を呼び出すために使用される機構のこと。
実際のプログラミングにおいては、OSの機能は関数 (API) 呼び出しによって実現されるので、
OSの備える関数 (API) のことを指すこともある
741:デフォルトの名無しさん
07/12/26 21:10:12
>>739
Windows においてはシステムコールはサブシステムの裏に隠れて
いて直接呼び出すことはできないってこと?
Win32 API って POSIX レイヤと同じレイヤ?
742:デフォルトの名無しさん
07/12/27 15:37:07
基本的に同じ。ただ、GDI関係は性能の都合でWin32 APIはカーネルのほうまで突っ込んでいたはず。
これをシステムコールというのかはわからないけど、
そういうサブシステムの下に位置するネイティブAPIと呼ばれるがNTDLL.DLLから公開されている。
9xの場合はVxDをDeviceIOControlで呼び出すことがシステムコールに相当するといっていいと思う。
743:デフォルトの名無しさん
07/12/27 22:22:48
ファイナライザって要らない子?
744:デフォルトの名無しさん
07/12/27 22:31:21
Disposeし忘れたときに必要
745:デフォルトの名無しさん
07/12/31 00:50:26
C++/CLIくだすれって消えてる?あるならそちらに誘導してもらえれば嬉しいです(’・ω・)
おとなしくC#いけって話かなぁ。。。
URLリンク(homepage3.nifty.com)
ここを参考にしながらForm1_Paintが呼ばれたときに
DrawlineとかDrawRectangleで描画するプログラム書いてるんですが、
その処理がとても重いので(他の理由もあるのですが)ボタンを押されたときだけ画面を更新するようにしたいんですが、どうしたら良いでしょうか。
(Form1_Paintだとウィンドウの移動などでも更新されてしまうので、それを避けたいということです。)
button1ってボタン作って、button1_Clickに全部書きゃ良いじゃんとか思ったんですが、
引数が(System::Object^ sender, System::EventArgs^ e)なのでe->Graphicsを使えなくて困ってます。
746:デフォルトの名無しさん
07/12/31 05:08:13
メンバにBitmapとか描画バッファを用意して
button1_Clickで描画、PaintでBitBltが妥当じゃね?
747:デフォルトの名無しさん
07/12/31 10:55:55
>>745
Form.CreateGraphicsは?
.NET使うならC#は読み書きできるようになった方がいろいろ便利だよ
748:デフォルトの名無しさん
08/01/01 10:16:58
あけおめです。
>>746-747
レスありがとうございます。
まず>>747のようにbutton1_Clickに
Graphic^ g=CreateGraphics();
としてボタンでの描画は成功したんですが、今度はForm1_Paintが呼ばれたときに描画されたものが消えてしまったので
>>746の方法をとろうとしたんですが、ドキュメント見たりググったりしてもいまいち描画バッファ→画面のBitBltのやり方が
分からなかったので、
URLリンク(www.atmarkit.co.jp)
を見ながら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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/01/13 10:05:33
ガベージコレクションが走るスレッドっていうのは、どのスレッドかは確定してないんですよね?
ということは、ガベージコレクションが走る際に呼び出すアンマネージリソースの処理は
スレッドセーフにしておかなければならないということかな?
具体的には参照カウントオブジェクトのラッパーをC++/CLIで作って.NETで使おうとしてるんだけど
Release関数をスレッドセーフにしなきゃならんのかなと。
(Interlockedにすればいいだけの話なんで、それ自体はどうってことないのですが)
751:デフォルトの名無しさん
08/01/13 11:45:06
ファイナライザスレッドは独立したスレッドなのでどのみちスレッドセーフは必要だろう
752:デフォルトの名無しさん
08/01/13 13:40:31
ファイナライザ中でthisに属するオブジェクトも生存は保証されていないしね
本当に最後の手段なんだから、基本的にはGC任せにしない方がいいよ
753:デフォルトの名無しさん
08/01/13 13:43:49
値型メンバは確実に生存してるぜ? その値型が持つ参照型はともかく
754:デフォルトの名無しさん
08/01/13 13:48:15
>>751-752
ありがとうございます。
明示的にDisposeてことになると思うんですが、
そうなるとDisposeしなければならないインスタンスを持つクラスがデータ構造の奥深くにあると
どんどんDispose呼び出しが感染していって親クラスのとこまで行ってしまいますよね。
面倒くさいなぁと思いつつも、仕方が無いなぁとも感じてるんですが
やっぱりそんなもんですかね…
755:デフォルトの名無しさん
08/01/13 23:19:17
アンマネージリソースを取り扱う以上、これは仕方ねっス。
頭切り替えるしかねっス。
ちなみにアンマネージリソース絡みでSafeHandleてのもあるんスが、
これの経緯とか調べるとさらに頭痛のタネが増えるのでオススメっす。
756:デフォルトの名無しさん
08/01/19 09:08:52
C++/CLIのメソッド引数に%をつけることについて質問があります。
マネージ型の配列や構造体をメソッドに渡すとき、”^”をつけますが、 この渡し方で配列や構造体の”ポインタ”が渡されると思っていました。
”^”の引数があるメソッドを持ったクラスライブラリをVBで参照したら “ByVal”となっていました。
ここで質問ですが、”^”でなく”^%”としなければ配列や構造体が 値渡し(配列全体がCopy?)になるのでしょうか?%をつける、 という概念がC++/CLIで現れたため悩んでいます。
できるならば 配列や構造体は値渡しでなく、アドレス渡し、配列渡しをしたいのですが・・・
757:デフォルトの名無しさん
08/01/19 09:13:22
^は参照型 そのまま渡すと参照をコピー
%はC++の&、C#のref/outに当たる参照渡し
「参照型 参照渡し」で調べればいいよ
758:デフォルトの名無しさん
08/01/19 09:54:02
>>757
ありがとうございます。調べてみました。参照型の^引数はアドレスをコピー、参照型の^%渡しはアドレスを参照渡しする、ということですね。
ということは参照型の場合、どちらの方法で渡してもパフォーマンスに大きな影響はないということでしょうか。
参照型と参照渡しの違いを理解しないといけないのですね。
759:デフォルトの名無しさん
08/01/19 10:52:27
.NETで参照渡しはあんまり使わないよ
参照で渡すことが多いんだったら初めから参照型にする
760:デフォルトの名無しさん
08/01/20 22:59:01
TryParseとかあるじゃん
761:デフォルトの名無しさん
08/01/22 21:33:21
スレ立ったのが2006年とかC++/CLIは使われてないの?
今からやるならC#のがいいかね?
762:デフォルトの名無しさん
08/01/22 22:06:34
アンマネージC++もC#も使えるようになった上で、
もしも必要に迫られたときにやっと登場する言語だからね
763:デフォルトの名無しさん
08/01/22 22:54:30
俺は間違っても#なんか使わん。意地でCLI
764:デフォルトの名無しさん
08/01/22 22:55:23
シーナンバー
765:デフォルトの名無しさん
08/01/26 16:42:52
>>761
そりゃ今からやるならC#だな
それよりVB.NETがいいに決まってるけどw
少なくともC++/CLIなんて論外だ
まあ.NETやること自体が間違いかもしれないが・・・
766:デフォルトの名無しさん
08/01/29 01:51:49
なぜVBを推すのか
767:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/03 23:52:38
>767
そりゃ、混合型は駄目だろ
ネイティブはネイティブ、マネージドはマネージドで扱わないと
769:デフォルトの名無しさん
08/02/04 00:25:09
あ、hoge_wrapper::_hoge の型は
gcroot<hoge ^> _hoge;
って宣言してました。転記ミスです。
770:デフォルトの名無しさん
08/02/04 00:59:04
いや、そこもそうだけど、gcnew しているイベント・ハンドラにネイティブの
ポインタ this を渡してるだろ?
マネージドでイベントアダプタみたいな物を作ったら?
771:デフォルトの名無しさん
08/02/05 01:13:10
MAKE_DELIGATE っていうのを見つけて、試してみたら意図したとおりに動くみたいです。
中身を見てみたら 770 さんの言うとおりの動きなのかな?
とりあえず解決しましたー。ありがとです。