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


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

くだすれC++/CLI(初心者用)part2



1 名前:./1256645713/662 mailto:sage [2010/03/15(月) 09:41:19 ]
おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!

このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。

前スレッドはこちら
くだすれC++/CLI(初心者用)
pc8.2ch.net/test/read.cgi/tech/1142144110/l1

dat落ち姉妹スレ
C++/CLI part3
pc12.2ch.net/test/read.cgi/tech/1206447234/l1
pc11.2ch.net/test/read.cgi/tech/1142147319/l1
pc8.2ch.net/test/read.cgi/tech/1126450441/l1

managed C++ やろうぜ!! 002
pc8.2ch.net/test/read.cgi/tech/1139043535/l1

33 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:28:42 ]
あと public static ね

34 名前:デフォルトの名無しさん mailto:sage [2010/08/05(木) 23:46:40 ]
C++/CLIに書き換えてる奇特なものです

char www[100];
char* ptr;
ptr = www + i;

array<char>^ www = gcnew array<char>(100);
array<char>^ ptr;
ptr = www + i; ← ?

?の部分をご教授くださいm(_ _)m

35 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 00:53:22 ]
CLI配列はポインタじゃないから無理

36 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 10:21:40 ]
pin_ptr してもいいけどさ、www[i] で駄目な理由は何なの?

37 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 08:14:59 ]
C++の感覚なら毎回[i+a]としないで最初からオフセット付けときたいのは当然だろ
無理なので常にwwwとiをセットにして持ちまわるのが普通
メソッドの引数にもオフセットを指定できるようにする

38 名前:デフォルトの名無しさん mailto:sage [2010/08/07(土) 22:43:16 ]
perlのように return a, b できるようにしてくんないかな



39 名前:デフォルトの名無しさん mailto:sage [2010/08/08(日) 12:07:55 ]
.NET4ではTuple型自体は導入されたのでC#やVBでは将来的に
言語レベルでサポートされる可能性はある。
C++/CLIはほぼ見捨てられてるので期待するだけ無駄。

40 名前:デフォルトの名無しさん mailto:sage [2010/08/17(火) 21:49:08 ]
>>34
array<char>^ www = gcnew array<char>(100);
interior_ptr<char> ptr;
ptr = &www[0] + i;

41 名前:デフォルトの名無しさん [2010/08/21(土) 06:53:22 ]
VC2010 EEを使用しています。

RS-232Cで通信を行い、プログラムを終了させようとして
this->Close();
を行うと、エラーメッセージも出ないままプログラムが固まってしまいます。

ポートを閉じてないことが原因かと思い、
serialPort1->Close();
を実行してみたところ、今度はここで同じように固まってしまいました。

vsug.jp/tabid/63/forumid/46/postid/9991/scope/posts/Default.aspx
を、参考に、BeginInvokeを使用していますが、ダメでした。

この場合、どこを見れば良いのでしょうか?
よろしくお願いします。



42 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:16:15 ]
画像処理を行いたいのですが、
Bitmap、Image、Graphic・・・どのコンポーネントを使うのがお得なのでしょうか

43 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 16:36:42 ]
>>42
どんな画像処理をするかが分からないと、
えらべないと思われます

44 名前:42 mailto:sage [2010/09/18(土) 16:48:33 ]
カラー画像をモノクロにしたり、コントラストかけたり、拡大縮小したりの初歩的なことがしたいです。
あと、今のところはCUIで行いたいです。

45 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 18:01:22 ]
>>44
俺はあまり詳しくないが、
ぐぐると
ttp://msdn.microsoft.com/ja-jp/academic/cc998604.aspx
ここで
Bitmap クラスを利用することにより、画像に対してピクセル単位で様々な処理を行うことができます
と書いてある
.netのクラスを使うなら、おそらくやりたいことはこういうことだろう


46 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:40:29 ]
Bitmap使ってみたけれど、画像の保存の仕方がわからない・・・
WriteBitmap("C:\\・・・",data)とかdata.Save(・・・)ってな感じでできないのかな

47 名前:デフォルトの名無しさん mailto:sage [2010/09/18(土) 23:43:33 ]
普通にSaveメソッドあるだろ

48 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 05:14:50 ]
ホントだ。ごめん、見逃してたわ。

49 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 03:53:30 ]
なぜ下記のようなプログラムでエラーが発生するのかわかりますか??

 --- プログラム ---
#include "stdafx.h"
using namespace System;
using namespace System::Drawing;

int main(array<System::String ^> ^args){
  Bitmap^ image = gcnew Bitmap("test.jpeg");
  image->SetPixel(0,0,Color::Black);           ←ここでなぜかエラー起きます
  image->Save("test2.bmp");
  return 0;
}

 --- エラー内容 ---
ハンドルされていない例外: System.ArgumentException: 使用されたパラメータが有効ではありません。
場所 System.Drawing.Bitmap..ctor(String filename)
場所 main(String[] args) 場所 c:\documents and settings\***\デスクトップ\test\test.cpp:行 10
場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\dd\vctools\crt_bld\self_x86\crt\src\mcrtexe.cpp:行 309

50 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 07:25:44 ]
>>49
test.jpegはちゃんとプロジェクトファイルと同じ階層にある?

余計なお世話かも知れないが、.netでやるなら
C#で作ったほうが楽なんじゃないだろうか・・・
わざわざマイナーな環境で挑戦するよりもいいと思うんだが

51 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 08:08:59 ]
>>49
落ちてる場所は、その上の行だぞ。



52 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 11:32:08 ]
これだけ利用者に嫌われてる言語も珍しいな
初心者が質問するたびに使うなと勧められる

53 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:44:55 ]
>>50-51
ありがとう。jpegじゃなくてjpgだったという凡ミスしていたことに気づけたわ

・・・一度C#に浮気してみる

54 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 13:53:46 ]
>>52
嫌われているというか、言語自体が初心者お断りだからな
初心者が無謀なことしようとしていたら、そりゃ止めるだろう

55 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 14:01:21 ]
C++も.NETも使いこなせる人が、止むを得ず使うための物。
使わなくていいなら使いたくない。

56 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 15:01:38 ]
始めようにも資料が無さ過ぎる
MDI作るときどうするかとか
ちょっとしたことの逆引きがネット上で全く出てこない


ようやくOpenGL表示できるようになって
C++の頃の遺産をつかえると思ったのに


57 名前:デフォルトの名無しさん mailto:sage [2010/09/20(月) 16:33:26 ]
C#でできるから、それを参照にすればいい
なにもかもC++/CLIで済ませようとしないことをお勧めする

58 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 02:27:48 ]
嫌ってはいないんだ
ただ何故かこの言語とのファーストコンタクトというか接し方が
一言入れておかないと不幸にしかならなそうな人が多いのよね

59 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 09:55:56 ]
WinFormsデザイナとかC++/CLIにそもそも要らないんだよな
こういうのがあるから「Visual C++ 2008 で簡単GUIプログラミング」みたいな勘違い本やサイトが出て初心者が道を間違える

60 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:18:00 ]
56ですが自分
C++の文法がある程度使えて
フォームデザインが総合開発環境上で扱えて
至れり尽くせりじゃん、と思ってとっかかりました

現実は情報が全く無く
よくわからないクラスとかいっぱいあって
解説も無くて

どうしようと途方にくれていましたが、QTとかよりは
導入コストも再勉強のコストも無いだろうと信じて使ってます。

だって、CやC++だとGUI作るの辛いんだもん
っていう理由だとダメですか

61 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:32:23 ]
まあ正直C++の名前が付いてるだけで
マネージ部分はC++とは直接関係なくて学び直し必要だし

それなら素直にC#
C#2.0の範囲までなら多分C++/CLIより簡単だし
サンプルも多いし将来WPF/Silverlightとかにも応用できるし
C#やっとけば逆にC++/CLIを橋渡し用ぐらいなら書けるようになるし



62 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 13:44:31 ]
けっきょくC++風に文法を汚したC#と普通のC++を無理矢理くっつけただけの代物だからな

63 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 14:03:20 ]
>>62
それを一応形にできたところは評価できる。

64 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:28:25 ]
#define健在なり

65 名前:デフォルトの名無しさん mailto:sage [2010/09/27(月) 19:37:10 ]
#define private public

66 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:31:06 ]
LPVOIDからarray<String^>^に変換したいのですが、アドバイスください。
//////////Form1_Load//////////
HANDLE hMap;
LPVOID lpBuf;
hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,L"View");
if(hMap==NULL){Form::Close();}
lpBuf=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpBuf==NULL){Form::Close();}
if(GetLastError()==ERROR_ALREADY_EXISTS){//すでに同じ名前のオブジェクトが存在する
lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
///////////ここまで/////////////
つまり二重起動時に共有メモリを使いたいのですが、どうしてもできません。
先人方どんなことでもいいので教えてくだせえ。

67 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:40:23 ]
marshal_asとかじゃねえの

68 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 02:51:50 ]
> LPVOIDからarray<String^>^に変換したい
>  lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
コードの方はarray<String^>^からLPVOIDに変換したいように見える

69 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:19:27 ]
>>67
2008 Express Editionを使っていまして・・・ヘッダーがないらしいです。
www.codeguru.com/forum/showthread.php?t=468408
>>68
コマンドライン引数を得た後、array<String^>^に変換しようと思ったのです。
宣言時からarray<String^>^だとMapViewOfFileでつまずいちゃうので・・・。
どちらにせよ、コマンドライン引数を得た後、
共有メモリarray<String^>^として反映できればいいのですが。

70 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 03:50:07 ]
全体にコードが滅茶苦茶に見えるし
そもそもLoadイベントなんかでやる処理には見えないけど(mainでやることだろ)

共有メモリにString^を書き込みたいのなら
> ttp://www.codeguru.com/forum/showthread.php?t=468408
のリンク先にString^をポインタに変換する方法が載ってるからmemcpyなりなんなりすればいい
複数の文字列を書き込む必要があるなら\0なりなんなりで区切る

71 名前:デフォルトの名無しさん mailto:sage [2010/09/29(水) 06:10:09 ]
共有メモリをやめてSendMessageに妥協しました
とにかく二重起動時にコマンドライン引数を渡すことができました!
皆様、貴重なアドバイスをありがとねん



72 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 12:39:42 ]
C++/CLIにおけるsafe_cast,static_cast,dynamic_castの違いについて教えてくださいよ

safe_cast   :型が合わないと例外が発生、実行コスト中
dynamic_cast:型が合わないとNULLを返す、実行コスト大
static_cast  :型が合わなくても何もしない、実行コスト小

この認識であってますか?


73 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 16:11:05 ]
safe_castとdynamic_castのコストはほぼ同じ。
static_castが速くなるのはダウンキャストの場合だけ。静的に解決できる場合はsafe_castと同じ。

74 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:39:28 ]
>>66
いまさらだけど、.NET Framework 4以降ならMemoryMappedFileクラスを使えばいいと思うよ。

75 名前:デフォルトの名無しさん mailto:sage [2010/10/03(日) 20:52:42 ]
.NETのハンドルのダウンキャストにstatic_cast使うのは激しく疑問
公式の説明でもパフォーマンスをえらく強調してるが、
そのためにわざわざ検証不能コードにしてまでやるほどのものなのかと

76 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:22:23 ]
www.infoq.com/jp/news/2010/10/Co-Evolution-Doubts
>どうやらそれらは、レガシC++アプリケーションをWindows Phoneに移植したいと考えている多くの開発者にとって、C++/CLIは、ベストなルートに見えるのであろう。

地獄への道は善意で舗装されている

77 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:28:08 ]
筆者自身は否定的に見えるけど、まだそんなこと考えてる人もいるんだねぇ

78 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 20:52:06 ]
筆者ほんとにC++/CLI触ったことあるのかな
Silverlightで使える範囲のC++/CLIはC++とは全く互換性なくてただの汚いC#なんだけど

79 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 21:47:31 ]
絶対的処理性能が必要な場合か、過去資産使う時以外はメリットよな?

80 名前:デフォルトの名無しさん mailto:sage [2010/10/08(金) 22:05:21 ]
検証可能なコードしか使えない場合は処理性能同じだし過去資産も使えないよ

81 名前:デフォルトの名無しさん mailto:sage [2010/10/09(土) 21:36:15 ]
音の再生ってC++/CLIでできるの?
画像の場合ピクチャボックスみたいな感じに楽に音楽再生させたいのだけど



82 名前:デフォルトの名無しさん mailto:sage [2010/10/10(日) 23:03:16 ]
ネイティブのC++でできるなら同じ方法でできる
.NET使ってもできる
どちらにしてもC++/CLIとは直接関係ない話

83 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:46:33 ]
サンクス
これ絶対初心者向けじゃない気がする

84 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 00:49:57 ]
「気がする」ではない。
絶対初心者向けではない、その通りだ。

85 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 06:02:46 ]
ですよね
俺みたいな勘違い君が集まるから
スレタイ変えると平和になる気がする

86 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 11:40:19 ]
「C#でアプリを作っているが、C++のライブラリで音を鳴らしたい」もしくは
「C++(非CLI)でアプリを作っているが、.NETのライブラリを使って音を鳴らしたい」
→そこだけC++/CLIを部分的に使おう
という風に特別な意図を持って言語であって、
>>81のような質問が出てくる時点でC++/CLIを使うのは間違っている

87 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 12:08:45 ]
前者はCLIでなくていいだろ

88 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 13:10:09 ]
そんなに大きなライブラリでなければ>>19方式がベターだな

89 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 15:50:17 ]
初心者用のC++/CLIじゃなくて
C++/CLIの初心者向けのスレなんだよなw

90 名前:デフォルトの名無しさん mailto:sage [2010/10/11(月) 16:27:40 ]
C++/CLI初心者にクラスチェンジできる条件が、

1) C++習得レベル一定以上
2) .NET習得レベル一定以上

だからな

91 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 02:47:19 ]
C++とC#があった上で補助的に使うもんだからねぇ
みんな言うように初心者が使う物じゃないね。



92 名前:デフォルトの名無しさん [2010/10/12(火) 15:18:47 ]
こんなのに熟練したくないわ
どうしても必要なときにちょっと調べてその場が凌げれば充分

93 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 18:55:47 ]
C++にGCを導入した言語。そう考えれば実用性は高いはず。


94 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 19:17:34 ]
C++と、GCをサポートした別の言語を混ぜた言語。
アンマネージとマネージの境界は常に意識する必要がある。

95 名前:デフォルトの名無しさん mailto:sage [2010/10/12(火) 20:52:46 ]
仕事では使いたくないが、趣味でいじるのなら楽しい。
Express Editionだと実行中のプロセスにアタッチできるのが
C++しかないってのも使ってる理由のひとつ。


96 名前:デフォルトの名無しさん mailto:sage [2010/10/27(水) 21:11:21 ]
日経のムックでC++/CLIが宣伝されてるな。
簡単GUIプログラミング!みたいな見事な勘違い記事だった。騙されて道を誤る初心者が不憫でならない。

97 名前:デフォルトの名無しさん mailto:sage [2010/10/30(土) 18:38:53 ]
道を踏み外しそうになり、C++Builderにシフトできました

98 名前:デフォルトの名無しさん mailto:sage [2010/10/31(日) 02:19:24 ]
初心者はC#いじっとけ

99 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:54:01 ]
増えた言語仕様って、ref, ^, gcnew だけでしょ?


100 名前:デフォルトの名無しさん mailto:sage [2010/11/02(火) 23:59:30 ]
ジェネリック,トラッキング参照,ファイナライザ,プロパティ,イベント,デリゲート, etc
CLI拡張の部分だけでも言語仕様書の量がC#並み

101 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 00:03:31 ]
2種類の言語が同居してる構造だな。



102 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 04:25:15 ]
D言語よりマシ。

103 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 16:45:49 ]
Z言語になるころには
なんとなくこんな感じ、って思い描いたものが
1行で組みあがるくらいに

なるわけねぇ

104 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:28:32 ]
ref classのメンバーに構造体がある場合、その構造体のポインターはどうやって取得すればいいの?
pin_ptr<SCRIPT_STRING_ANALYSIS*> pssa = &(this->構造体型の変数);
こういう風にしてもうまくいかないんだが

105 名前:デフォルトの名無しさん mailto:sage [2010/11/03(水) 17:41:24 ]
>>104
自己解決した
単にpin_ptrの型を間違っていただけだった

106 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:14:40 ]
これって変数名とかに全角文字がつかえるのだな。
  int 数値 = 0;
みたいに。
うっかり全角アルファベット混ぜたりしたら大変だな。



107 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 20:26:13 ]
それCLIでない方のC++でもできるよ
コンパイラが共通なんだから

108 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:11:50 ]
>>106
今のパソコンて、ゼロに斜線が入らないから、うっかり

int 数値 = O;

とかしてしまうとやばいぜw

109 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 04:36:06 ]
どっかでOが定義済みでないと通らないだろ

110 名前:デフォルトの名無しさん mailto:sage [2010/11/12(金) 13:04:12 ]
Windows Mobile用のWM_GESTUREが入ったgesture.hは何を入れたら良いんですか?

Windows Mobile 6 Professional SDK Refresh.msiと
試しにVS2010EEを入れてみたけど
ダメでした

Windows Mobile 6 Professional SDK Refresh.msiは2環境でインストールして
いるのでインストーラがコケたとかでは無さそうです
定義だけなのでGoogle Codeとかでも良いのですが、MS系は上手く手に入りません。

くだすれですがよろしくお願いします。

111 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 12:22:30 ]
queue<array<String^>^ > queue_dwnload;
こう宣言すると
System.ArgumentException' の初回例外が発生しました。
とイミディエイトウィンドウにメッセージが出るんだけど
宣言の仕方どこが間違ってますか?



112 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 17:42:15 ]
つ STL/CLI

#include <cliext/queue>
using namespace System;

cliext::queue<array<String^>^ > queue_dwnload;


113 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 18:21:47 ]
すまん書き足りなかった、インクルードはちゃんとしてて
プログラムも正常に動作してます

それでもう少しシンプルなコードで試してみたんだけど
VS2008で新規作成、プロジェクト、CLRのwindowsフォームアプリケーション
のテンプレートでプロジェクトを作成して
#include <cliext/queue>を追加
~Form1(){}の下あたりに
cliext::queue<array<String^>^ > queue_dwnload;を追加
デバッグ実行する
これだけでメッセージが出ます、キューの宣言は間違ってないみたいだけど
何が原因なんだろう?

114 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 19:06:11 ]
VS2010にしてしまっているので再現できないが、
~Form1()と同じprotectedには出来ないのかコンパイル時に警告がでる。
privateにしたらどう?

private: cliext::queue<array<String^>^ > queue_dwnload;


115 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 22:52:09 ]
private:付けてもだめでした

116 名前:デフォルトの名無しさん mailto:sage [2010/11/14(日) 14:34:28 ]
とりあえず問題の切り分けだな。
まずコンパイルが警告なしで通るかどうか。
通るならデバッグ実行とデバッグなし実行で差があるかどうか。
別のPCでも再現するかどうか。

117 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 11:27:46 ]
使用環境:VS2008 Professional Edition
プロジェクト:CLR クラスライブラリ
目的:コピーコンストラクタ、代入演算子を潰したい

エラーの出ないコード。
 ref class Hoge sealed {
  private:
   Hoge % operator=( Hoge const % rhd ) { return *this; } ;
   Hoge( Hoge const % src ) {} ;
 }

実装したいコード。
 ref class Hoge sealed {
  private:
   Hoge % operator=( Hoge const % ) ; // error LNK2020 未解決のトークン(06000001) Hoge::op_Assign
   Hoge( Hoge const % ) ; // error LNK2020 未解決のトークン(06000003) Hoge::ctor
 }

C++/CLIでメンバ関数の実装をせずに放置というのは可能でしょうか?

118 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 18:43:31 ]
そもそもref classは定義しない限りコピーとか無理じゃなかったか

119 名前:デフォルトの名無しさん mailto:sage [2010/12/02(木) 19:44:11 ]
C#などから使わせるつもりなら演算子のオーバーロードは全部staticにしないといけないし
代入演算子やコピーコンストラクタはそもそもオーバーロードできないし
constも使えないし参照渡しや参照返しもダメ(そもそもref classだから無意味)
つかまずC#やるべき。.NETの常識が無さすぎ。

120 名前:117 mailto:sage [2010/12/02(木) 22:33:30 ]
>>118
そうなんですか、回答ありがとうござます。

>>119
回答ありがとうございます。
msdn.microsoft.com/ja-jp/library/sy1y3y1t(VS.80).aspx
このサンプルコードのコンパイルが通らなかったのですが、そもそもサンプルが間違ってるという事なのでしょうか?
あと、.NETの常識を学ぶのにオススメの書籍などあれば教えていただけると幸いです。


121 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 11:24:33 ]
Lock に関係ない実装は省略して書いてるだけでしょ
間違ってると言うより、そこは問題とは関係ない部分なだけ



122 名前:117 mailto:sage [2010/12/03(金) 12:41:30 ]
>>121
回答ありがとうございます。
別途実装をするしか無いという事ですね。分かりました。

そうすると >>119 の回答から考えて、C#などから使わせるつもりが無いなら、
・演算子のオーバーロードはstaticにする必要はない
・代入演算子やコピーコンストラクタはオーバーロードできる
・constも使えて参照渡しや参照返しもOK
ということでしょうか?

123 名前:デフォルトの名無しさん mailto:sage [2010/12/03(金) 15:36:41 ]
C++/CLIではref classのメソッドにconstを付けられないから
C#やVBと相互運用しないとしてもconstパラメータは事実上役に立たない。

124 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 13:39:31 ]
趣旨がわからないね。
C++スタイルでやりたいだけなら、そもそもC++/CLI 使う必要性がないんでない?

125 名前:117 mailto:sage [2010/12/04(土) 14:33:18 ]
>>123
回答ありがとうございます。
Hoge % operator=( Hoge % arg ) { 代入処理の実装 } ;
これだと代入元が書き換えられそうで気持ち悪いですけど、そういう流儀なのですね。分かりました。

>>124
>>122 の質問に関しては元々あった疑問ではありません。
>>119 の解答に書かれている内容に関しての事実確認です。
趣旨に関してはスレ違いだと思いますので書きません。

126 名前:デフォルトの名無しさん mailto:sage [2010/12/04(土) 14:48:36 ]
%もいらん
ref classだから常にポインタ渡し

127 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 13:03:24 ]
>>124
MSのサンプルだか自動生成されるコードだかで、
あんな風にrefクラス上でC++っぽいことをやっているものを見た覚えがある。
元の質問者のコードもそういうのに影響されたのではないかと思う。

128 名前:デフォルトの名無しさん mailto:age [2010/12/05(日) 14:36:18 ]
private ref struct A{
UInt32 data[5];
};
これがコンパイル通らないんだけど、
array<UInt32>^ data;とかにしていちいちgcnewするしかないんですか?
データ宣言するだけのためにコードなんて書きたくないので、うまい解決法お願いします。


129 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 15:20:34 ]
うん、array<UInt32>^にしてコンストラクタ書くしかないんではないかなあ。

130 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:27:52 ]
C#では構造体でstackallocが使えるからvalue classならいけるだろうと思ったけど無理なのね
この手の機能でC#に負けてどうする

131 名前:デフォルトの名無しさん mailto:sage [2010/12/05(日) 21:36:00 ]
CStringを使うには何をインクルードすればよいの?
atlstr.h、atlbase.h、atlapp.hは入れてるけどコンパイルとまる



132 名前:デフォルトの名無しさん [2010/12/06(月) 21:09:33 ]
VC++2010 ExpressEditionです。

System::windows::form::timer で一秒ごとにlabel->textを更新していますが(要は時計です)
最小化から復帰するとlabel->textが更新されなくなります、何故でしょう。

133 名前:デフォルトの名無しさん mailto:sage [2010/12/07(火) 22:12:40 ]
最小化したときにとめたタイマーを元に戻すんだキバヤシ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<122KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef