C++/CLI について語ろうぜ Part2at TECH
C++/CLI について語ろうぜ Part2 - 暇つぶし2ch408:デフォルトの名無しさん
07/08/05 02:07:15
ref class だと
デストラクタってDisposeじゃなかった?
だからvirtualにならないとつじつまが合わない気が・・・


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

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

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

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

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

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


412:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/08/06 00:13:39
void plusA(int^ x) {
(*x)++;
}

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

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

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

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

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



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

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

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

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

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


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

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

が発生する。

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

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

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

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

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

420:デフォルトの名無しさん
07/08/07 19:42:36
>>419
stdafx.h
stdafx.cpp
main.cpp
resource.h

だけの状態?

421:デフォルトの名無しさん
07/08/07 20:48:11
すまんLNK2022だった


422:デフォルトの名無しさん
07/08/07 23:26:28
アノニマスな構造体があったの?

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

お騒がせスマソ

>>422
なかった

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

425:デフォルトの名無しさん
07/08/18 12:05:30
別に何も無いよ

426:デフォルトの名無しさん
07/08/19 05:45:05
え?そうなの?

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

427:デフォルトの名無しさん
07/08/19 08:36:21
>>424
URLリンク(msdn2.microsoft.com)(VS.80).aspx

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


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

430:デフォルトの名無しさん
07/08/19 22:34:08
DirectXのコードなんだが

D3DFORMAT fmt = (D3DFORMAT)21;


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


432:デフォルトの名無しさん
07/08/19 22:44:36
実体が unsigned long int なんじゃね?

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


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


435:デフォルトの名無しさん
07/08/19 23:48:25
これで普通に代入できたぞ?

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

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

436:デフォルトの名無しさん
07/08/19 23:52:56
version違いの*.hがあって、21がない方のをincludeしてるとか。

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

438:デフォルトの名無しさん
07/08/20 23:24:44
C++/CLIって実際どのくらい使われてるの?

439:デフォルトの名無しさん
07/08/21 01:02:33
Dの5倍くらい。

440:デフォルトの名無しさん
07/08/21 06:26:53
>>438
俺仕事で使ってる
ただのラッパークラスだが

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

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

443:デフォルトの名無しさん
07/08/21 20:55:14
安価ミス
>>441

444:デフォルトの名無しさん
07/08/21 23:01:14
>435
enumは int だし。ってのはCの仕様だっけか。


445:428
07/08/22 21:45:58
どうやらint関係なしに
直接D3DFMT_R8G8B8を入れても
<未定義の値>になる。

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



446:デフォルトの名無しさん
07/08/22 22:32:24
enum は含まれる値を全て表現可能なサイズの型になる。

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

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

448:デフォルトの名無しさん
07/08/23 21:02:06
>>447
ちゃんと21が出たw
VC8です

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

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

450:デフォルトの名無しさん
07/08/29 18:35:42
追記です
VS2005上での話です。

451:デフォルトの名無しさん
07/09/01 15:44:35
この言語ほんとに流行りそうなの?

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

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

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

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

455:デフォルトの名無しさん
07/09/01 23:46:12
Objective-C つかったことないや

456:デフォルトの名無しさん
07/09/01 23:48:42
はいはい死滅死滅

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

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

459:デフォルトの名無しさん
07/09/02 16:07:58
がるぽっ

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

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

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

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

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

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

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

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

465:デフォルトの名無しさん
07/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です
07/09/07 18:08:54
ごめんなさい。
<add key="HOGE" value="ほげほげ" />

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


467:デフォルトの名無しさん
07/09/08 09:39:16
レベル高すぎ

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

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

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

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

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

473:デフォルトの名無しさん
07/09/22 11:09:00
>>472
VistaでDDBの速度的有利さは事実上消滅したけどな

474:デフォルトの名無しさん
07/09/22 12:22:14
DirectDraw(笑)

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

476:デフォルトの名無しさん
07/09/22 15:55:56
馬鹿?

477:デフォルトの名無しさん
07/09/22 20:13:30
.NETは最初から馬鹿だよ。

478:デフォルトの名無しさん
07/09/22 20:14:39
>>475
Direct3DとWPFは仲間はずれ?

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

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

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

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

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

482:デフォルトの名無しさん
07/09/23 12:28:25
C#のほうが解析しやすい言語だから

483:デフォルトの名無しさん
07/09/23 12:57:21
解析なんてしてないだろw


484:デフォルトの名無しさん
07/09/23 13:05:02
>>483

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


486:デフォルトの名無しさん
07/09/25 17:51:40
使える

487:デフォルトの名無しさん
07/09/26 23:29:57
プロパチー見ろ

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

489:デフォルトの名無しさん
07/09/27 06:58:21
>>488
Win32

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

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

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

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

494:デフォルトの名無しさん
07/09/27 11:09:31
>>492
ネイティブってどういう意味で使ってるの?

495:デフォルトの名無しさん
07/09/27 11:10:25
>>494
マネージドアプリをアンマネージドアプリにする混ぜ物。

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

497:デフォルトの名無しさん
07/09/27 12:50:00
WTLを忘れるな

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

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


500:デフォルトの名無しさん
07/09/27 16:21:17
全然

501:デフォルトの名無しさん
07/09/27 18:14:05
C#程度でキモいっつーんならC++とか使えないだろ

502:デフォルトの名無しさん
07/09/27 18:18:33
>>488
楽したいならC# + C++/CLIとかWPFとか
厳しい道を行きたいなら DirectX Graphics


503:デフォルトの名無しさん
07/09/27 20:00:15
おまえ、なんかものすごい勘違いしてない?

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

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

506:デフォルトの名無しさん
07/09/28 01:44:23
なにを言っているんだ

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

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

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

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

511:デフォルトの名無しさん
07/09/29 00:18:26
>509
Primitive型と値型は初期化される

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

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

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

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

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


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

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

517:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/30 19:52:08
>517
それは C++/CLI なの?

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

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


520:デフォルトの名無しさん
07/09/30 23:37:16
>>519
ライブラリは /MDでコンパイルしてます?

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

522:デフォルトの名無しさん
07/09/30 23:44:19
誤爆スンマソ

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

524:デフォルトの名無しさん
07/10/01 12:15:21
無くない

525:デフォルトの名無しさん
07/10/01 13:00:02
ドトネトにはイミナイ

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


527:デフォルトの名無しさん
07/10/01 18:04:15
修行するぞ。
修行するぞ。
修行するぞ。

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

529:デフォルトの名無しさん
07/10/01 18:22:30
ISOがタダシイ

530:デフォルトの名無しさん
07/10/01 19:11:49
C※にでもすればいいのに。

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

532:デフォルトの名無しさん
07/10/01 21:01:04
>531
ウホッ! 最高だな(w

533:デフォルトの名無しさん
07/10/02 16:13:50
変態の俺にピッタリだ。

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

535:デフォルトの名無しさん
07/10/02 17:49:09
MixedType ってなに?
boost::any とか?
boost::optional とか?

536:デフォルトの名無しさん
07/10/02 18:13:20
混合型

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

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

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

539:デフォルトの名無しさん
07/10/03 20:30:52
人に聞くときゃ、エラーを出せよ

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

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

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

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

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

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

544:デフォルトの名無しさん
07/10/05 14:28:39
C++xCLI とか CLI++ とか?

545:デフォルトの名無しさん
07/10/05 15:08:34
C#ってのはどうだろ?

546:デフォルトの名無しさん
07/10/05 15:19:30
>545
巣に(・∀・)カエレ!!

547:デフォルトの名無しさん
07/10/05 15:37:04
VBってのはどうだろ?

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

549:デフォルトの名無しさん
07/10/05 15:55:36
普通に検索できないか?

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

551:デフォルトの名無しさん
07/10/05 18:39:54
昔はC#とかも検索できんかったけどな

552:デフォルトの名無しさん
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 さんの言うとおりの動きなのかな?

とりあえず解決しましたー。ありがとです。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch