[表示 : 全て 最新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

18 名前:12,14 mailto:sage [2010/03/26(金) 09:55:14 ]
>>17
説明不足でした。
(当然の疑問ですよね)

そのCのライブラリというのが、元がスタティックしか考慮されておらず、
DLL用にはなってなく(__declspec(dllexport)のような記載は一切なし)、
選択肢として
1 Cのソースをdll対応に修正(__declspecを全関数に追加)
2 元のCには手を加えず、新しくラッパーを作る

があり、今後もCの方は勝手にバージョンが上がっていくので、
それなら、元のソースに手を加えない方向でやろうとなった次第です。


19 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 10:26:08 ]
だからってそのラッパーをC++/CLIで書く必要はないだろ
Cで薄ーいラッパー書いて普通のネイティブDLLとしてコンパイルすればおk
C++のライブラリとなると面倒だけどそうでないならC++/CLIはできるだけ避けたほうが賢明

20 名前:12,14 mailto:sage [2010/03/26(金) 12:05:28 ]
>>19
その手がありましたか!
C#でDllImportして、
DLL関数に渡す構造体、DLL関数から受け取る構造体は
[StructLayout(LayoutKind.Sequential)]を用いてC#側に定義して
やりとりするという事ですね。

試してみます

21 名前:デフォルトの名無しさん [2010/04/25(日) 20:06:11 ]
【初心者歓迎】C/C++室 から誘導されてきました。

Form1とForm2があり、Form1からForm2を呼び出すようにしています。
また、Form2に配置したボタンを押すと関数が呼び出されて、所望の処理をするようにしています。
以下の2点について教えてください。

1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。

両方ともポインタを使えば出来そうな気がするのですが、例えば2.の方ではForm2を指すポインタの宣言の仕方が
わからないです。

よろしくお願いします。


22 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:24:49 ]
>>21
ポインタじゃなくて参照になる。
Form2^ form2;

23 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:26:28 ]
>>21
動くかどうかは試してない。

【Form1.h】
ref class Form1 {
public: System::Void Form1Func() {〜}
private: System::Void Form2Func();
private: System::Void Form1_KeyDown(〜) {Form2Func();}
}
【Form1.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form1::Form2Func(){
Form2^ form2 = safe_cast<Form2^>(Application::OpenForms["Form2"]);
form2->Form2Func();
}
【Form2.h】
ref class Form2 {
public: System::Void Form2Func() {〜}
private: System::Void Form1Func();
private: System::Void Form2_KeyDown(〜) {Form1Func();}
}
【Form2.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form2::Form1Func()
{
Form1^ form1 = safe_cast<Form1^>(Application::OpenForms["Form1"]);
form1->Form1Func();
}


24 名前:21 [2010/04/25(日) 23:09:54 ]
>>22>>23
ありがとうございます。
残念ながらうまくいかないです。

環境はVS2005 C++ WinXP SP3
Form1(親フォーム)からはForm2.hをインクルードして
Form2^ frm = gcnew Form2();
frm->ShowDialog();
とできるのですが、Form.hではForm1.hをインクルードすると循環参照になってしまうようでエラーになります。
また、Form2.h内で関数宣言だけしてForm2.cpp内でForm1.hをインクルードして実行部分を書こうとしましたが
Form2.h内の関数宣言(>>23のprivate: System::Void Form1Func();にあたる部分)がコンパイルエラーになってしまいます。



25 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:31:54 ]
なんでこういう意味での初心者がC++/CLIなんてマニアックな言語触ってるんだろう……?

> Form2に配置したボタンを押すと関数が呼び出されて
> 1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
Form1関係ないよね? Form2が勝手にやってろって話

> 2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。
Form1がForm2を作ったとき、Form2のFormClosedイベントに引っかけるとかすればいいんじゃね?

// Form1内のForm2を表示させる処理
Form2^ form = gcnew Form2();
form->FormClosed += gcnew FormClosedEventHandler(this, &Form1::OnForm2Closed);
form->Show();

// Form1内で定義
private: void OnForm2Closed(Object^ sender, FormClosedEventArgs^ e) {
  this->Close();
}

×アイコンで閉じたときはForm1は閉じない、ボタン押したときだけとかなら
Form2にCloseWithParentみたいなプロパティ用意して
表示させるときのForm2^はメンバ変数に保持しておいて
OnForm2Closedで確認

26 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 09:58:49 ]
C++/CLIだと、Cのランタイム例外のハンドリングが出来ない臭いんだけど、どうすれば良いんだろう…
ハンドラ設定してるのに動いてくれない
例えば_tcsftime(..., L"%h", ...);みたいなやつ

※普通の例外じゃないんで、マネージand/orネイティブでもtry catch出来ない



27 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:43:17 ]
そもそもCRTが例外なんて投げないはずだが

> 727 :デフォルトの名無しさん[sage]:2008/07/03(木) 13:51:22
>     なんで、VC++2008の、strftime _tcsftimeは、
>     書式に無い文字を渡すと例外終了するのかなあ。
>    単に無視してくれりゃいいのに。
>    自前でパースしてから、渡してやるしか無いのかな。
> 729 :デフォルトの名無しさん[sage]:2008/07/03(木) 14:11:02
>     ちょっと見てみたけど
>     _ASSERTE( ( "Invalid format directive" , 0 ) );
>     だからデバッグ時だけの話じゃん。

28 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:35:20 ]
>>27
msdn.microsoft.com/ja-jp/library/ksazx244(v=VS.80).aspx

試してみると早いかも…

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
tm tmNow;
__time64_t tNow;
TCHAR sz[20];
try
{
_time64(&tNow);
_localtime64_s(&tmNow, &tNow);
_tcsftime(sz, 20, L"%h", &tmNow);
}
catch (...)
{
Console::WriteLine("error!");
}
Console::ReadLine();

return 0;
}


29 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:07:44 ]
ハンドラ設定ってなんだ普通に_set_invalid_parameter_handlerで呼んでくれたが

30 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 22:16:23 ]
SerialPortクラスを使ってデータを受信する際、
・SerialPort::Data_Receivedイベントで受信
・受信データはQueueクラス経由でメインスレッドから受信
・メインスレッドでは、あるバイト数を数秒以内に受信できない場合タイムアウト
を、実装したいのですが、タイムアウト処理はどのように記述したら良いのでしょうか?

// Data_Receivedイベント
private: System::Void serialPort_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
int length = serialPort->BytesToRead;

array<unsigned char>^ buffer = gcnew array<unsigned char>(length);

serialPort->Read(buffer, 0, length);

Queue^ sync_queue = Queue::Synchronized(m_queue);

for (int i = 0; i < length; i++)
{
sync_queue->Enqueue(buffer[i]);
}
}


31 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:09:02 ]
マネージクラスのインスタンスをグローバルスコープっぽく参照する方法ないの?
全コンストラクタでやりとりするようなマンドクセ方法がいやだ

32 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 15:55:49 ]
クラスの静的メンバに入れとけばいいだけ

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は定義しない限りコピーとか無理じゃなかったか






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

前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