おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。
前スレッドはこちら
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l1
dat落ち姉妹スレ
C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/l1
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l1
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l1
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l1
探検
くだすれC++/CLI(初心者用)part2
■ このスレッドは過去ログ倉庫に格納されています
2010/03/15(月) 09:41:19
153デフォルトの名無しさん
2011/02/06(日) 11:51:41154デフォルトの名無しさん
2011/02/06(日) 12:50:45 boostを完璧にコンパイルできないだろとか言い始めるのかと思ったら
斜め上をいく馬鹿だったか
斜め上をいく馬鹿だったか
155デフォルトの名無しさん
2011/02/08(火) 22:27:38 初心者です。
ストリップメニューを開くと5個ぐらい項があって
3つチェックされているとして、その3という数字を取りたいのですが
どうすれば良いでしょうか?
開く部分の変数はStripMenuItem1です。
for(int = 0;i<StripMenuItem1->項目数;i++){if(StripMenuItem1->子項目->checked == true){temp++;}}
みたいなのはありますでしょうか?どうすれば良いでしょうか?よろしくおねがいします
ストリップメニューを開くと5個ぐらい項があって
3つチェックされているとして、その3という数字を取りたいのですが
どうすれば良いでしょうか?
開く部分の変数はStripMenuItem1です。
for(int = 0;i<StripMenuItem1->項目数;i++){if(StripMenuItem1->子項目->checked == true){temp++;}}
みたいなのはありますでしょうか?どうすれば良いでしょうか?よろしくおねがいします
156デフォルトの名無しさん
2011/02/08(火) 22:55:33 自前で数えろよ、毎回書くのがいやなら関数にしとけ。
157デフォルトの名無しさん
2011/02/08(火) 23:02:04158デフォルトの名無しさん
2011/02/08(火) 23:03:11 >>156
レスありがとうございます
申し訳ありません。理解できません
何か関数があるのでしょうか?
自前で数えるといっても、2個チェックのときは2と自動で取ってこれるようにしたいのです。
そういえば
if(項の変数->checked == true){temp++;}
を何行も書けばいいだけですね。ありがとうございました!
レスありがとうございます
申し訳ありません。理解できません
何か関数があるのでしょうか?
自前で数えるといっても、2個チェックのときは2と自動で取ってこれるようにしたいのです。
そういえば
if(項の変数->checked == true){temp++;}
を何行も書けばいいだけですね。ありがとうございました!
159デフォルトの名無しさん
2011/02/08(火) 23:03:52 >>157
ありがとうございました!
ありがとうございました!
160デフォルトの名無しさん
2011/02/08(火) 23:11:25161デフォルトの名無しさん
2011/02/09(水) 00:53:00 次スレでは「初心者用」を消して、
> - C++プログラミング
> - .NETプログラミング (C#, VB.NET, etc.)
>
> に不自由する方はお引き取りください
とか若干きつめに書いておけばいいじゃね?
何年先になるかは分からんけどw
4,5年ぐらい?ww
> - C++プログラミング
> - .NETプログラミング (C#, VB.NET, etc.)
>
> に不自由する方はお引き取りください
とか若干きつめに書いておけばいいじゃね?
何年先になるかは分からんけどw
4,5年ぐらい?ww
162デフォルトの名無しさん
2011/02/09(水) 06:13:09 WCHAR f[] = aToolStripMenuItem->Text->ToCharArray();
cli::array<Type,dimension> ^' から 'WCHAR []' に変換できません。
->ToCharArray();でWCHARが帰ると思っていたのですがなぜでしょうか?どうすれば良いですか?
cli::array<Type,dimension> ^' から 'WCHAR []' に変換できません。
->ToCharArray();でWCHARが帰ると思っていたのですがなぜでしょうか?どうすれば良いですか?
163デフォルトの名無しさん
2011/02/09(水) 06:31:17 そのWCHAR[]をどうしたいかによる
164デフォルトの名無しさん
2011/02/09(水) 06:33:29165デフォルトの名無しさん
2011/02/09(水) 07:06:40166デフォルトの名無しさん
2011/02/09(水) 07:48:58167デフォルトの名無しさん
2011/02/09(水) 09:38:59 このスレでもC++、.NETの初心者は対象外だけどな
168デフォルトの名無しさん
2011/02/09(水) 11:16:29 >162
文字列操作はこれがひっかかったぞ
ttp://vene.wankuma.com/prog/CppCli_strings.aspx
文字列操作はこれがひっかかったぞ
ttp://vene.wankuma.com/prog/CppCli_strings.aspx
169デフォルトの名無しさん
2011/02/09(水) 11:18:17170デフォルトの名無しさん
2011/02/09(水) 15:36:36 C++と.NETの両方を極めないとCLIは使いこなせないからな
171デフォルトの名無しさん
2011/02/12(土) 16:44:50 Express EditionでもC#プロジェクトと同じソリューションに入れられればいいのになあ
VCのExpress Editionが入門者向けというより達人の縛りプレイ用になってるじゃないか
VCのExpress Editionが入門者向けというより達人の縛りプレイ用になってるじゃないか
172デフォルトの名無しさん
2011/02/12(土) 17:53:40 CLI使わないという選択肢はないのかw
173デフォルトの名無しさん
2011/02/12(土) 18:35:17 そんな選択肢があったらこのスレにいない
174デフォルトの名無しさん
2011/02/13(日) 04:23:39 >>171
金払え
金払え
175デフォルトの名無しさん
2011/02/18(金) 09:47:29 ダイアログで値を入力させて、その値を親ウィンドウで処理したい場合に
どうやって値の受け渡しをすればいいの?
親にpublic関数を用意して呼び出すのが簡単なわけだけど
この.hファイルに親の.hファイルをインクルードすると子のデザイナが壊れる
子ダイアログで親の形を認識させる手段がない
どうやって値の受け渡しをすればいいの?
親にpublic関数を用意して呼び出すのが簡単なわけだけど
この.hファイルに親の.hファイルをインクルードすると子のデザイナが壊れる
子ダイアログで親の形を認識させる手段がない
176デフォルトの名無しさん
2011/02/18(金) 10:00:22 子のプロパティを公開して親からアクセスすればいいんじゃねえの?
177デフォルトの名無しさん
2011/02/18(金) 16:30:00 比較関数を書く形式で、リスト(cliext::list)をクラスのメンバで
ソートするにはどうしたら良いでしょうか?
こんな感じじゃないかと思うのですが
「関数呼び出しには引数リストがありません。
メンバへのポインタを作成するために '&Test::Form1::less' を使用してください」
とエラーが出ます
以下コードを簡略化して書いてます
//クラスTest
ref class Test
{
public:
DateTime date;
Test(void){};
};
//比較関数
bool less(Test^ lhs, Test^ rhs)
{
return lhs->date < rhs->date;
}
//リストの作成
list<Test^> list_item;
Test^ item = gcnew Test();
list_item.push_back(item);//(以下省略
//ソートする
list_item.sort(less);
ソートするにはどうしたら良いでしょうか?
こんな感じじゃないかと思うのですが
「関数呼び出しには引数リストがありません。
メンバへのポインタを作成するために '&Test::Form1::less' を使用してください」
とエラーが出ます
以下コードを簡略化して書いてます
//クラスTest
ref class Test
{
public:
DateTime date;
Test(void){};
};
//比較関数
bool less(Test^ lhs, Test^ rhs)
{
return lhs->date < rhs->date;
}
//リストの作成
list<Test^> list_item;
Test^ item = gcnew Test();
list_item.push_back(item);//(以下省略
//ソートする
list_item.sort(less);
178デフォルトの名無しさん
2011/02/18(金) 17:09:32 試してないけど、static にして Test::less じゃね?
179デフォルトの名無しさん
2011/02/18(金) 17:41:53 レスありがとうございます
Form1クラスの上で定義したらできました
いまいちよくわからないですが
これからじっくり理由を考えて見たいと思います、感謝
Form1クラスの上で定義したらできました
いまいちよくわからないですが
これからじっくり理由を考えて見たいと思います、感謝
180デフォルトの名無しさん
2011/02/20(日) 21:49:54.49 VC++のスレでこちらの方がふさわしいのではないかと言うことで移ってきました。
VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を
あげる(薄くする)と言うプログラムを組んでいます。フォームのMouseLeaveイベントと、
MouseEnterイベント発生時にOpacityプロパティを変えることで実現を目論んだのです
が、ウインドウの外枠(サイズを変えるときにドラッグする部分や、上部のウインドウ名
が書かれている部分)にマウスがあると、MouseLeaveイベントが発生して、薄くなって
しまいます。もちろん、ここではたとえ、フォーム外側から移動してきてもMouseEnter
イベントは起きません。
フォームから完全にマウスカーソルがそれた時のみ透明度を高めたいのですが、
どういうイベントを用いればよいんでしょうか?
VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を
あげる(薄くする)と言うプログラムを組んでいます。フォームのMouseLeaveイベントと、
MouseEnterイベント発生時にOpacityプロパティを変えることで実現を目論んだのです
が、ウインドウの外枠(サイズを変えるときにドラッグする部分や、上部のウインドウ名
が書かれている部分)にマウスがあると、MouseLeaveイベントが発生して、薄くなって
しまいます。もちろん、ここではたとえ、フォーム外側から移動してきてもMouseEnter
イベントは起きません。
フォームから完全にマウスカーソルがそれた時のみ透明度を高めたいのですが、
どういうイベントを用いればよいんでしょうか?
181デフォルトの名無しさん
2011/02/21(月) 01:14:11.85 で、その質問内容のどこがC++/CLIに関係しているんだ?
182180
2011/02/21(月) 07:06:34.79 ってことは、.Net Frameworkのスレ探します。
183180
2011/02/21(月) 07:08:31.22 .net Framework関連のスレって見つからないんですが、どこが適切でしょう。
すみません。
すみません。
184デフォルトの名無しさん
2011/02/21(月) 07:51:25.56 ふらっとあたりで聞けばいい
185デフォルトの名無しさん
2011/02/26(土) 23:54:49.36 ref classのメンバー変数にID2D1SolidColorBrush*のようなものがある
template <class T> inline void SafeRelease(T *ppT)
{
unsigned long refCount;
if (*ppT)
{
refCount = (*ppT)->Release();
*ppT = NULL;
}
}
にID2D1SolidColorBrush*のポインターを渡すことが出来ないからpin_ptrで渡してたんだが、いい加減書くのがめんどくさくなってきた
スマートに処理しようと思い、template <class T> inline void SafeRelease(T *%ppT)というパラメーターの関数を定義したんだが、こいつへの渡し方がわからない
誰か教えてくれまいか
template <class T> inline void SafeRelease(T *ppT)
{
unsigned long refCount;
if (*ppT)
{
refCount = (*ppT)->Release();
*ppT = NULL;
}
}
にID2D1SolidColorBrush*のポインターを渡すことが出来ないからpin_ptrで渡してたんだが、いい加減書くのがめんどくさくなってきた
スマートに処理しようと思い、template <class T> inline void SafeRelease(T *%ppT)というパラメーターの関数を定義したんだが、こいつへの渡し方がわからない
誰か教えてくれまいか
186デフォルトの名無しさん
2011/02/27(日) 02:13:39.66 あるプロセスをオープンしようとしてます
読み取り専用で試したが結果は同じ
CLIとしてコンパイルしたWindowsアプリからOpenProcessを呼び出すとフル権限で開ける
C++としてコンパイルしたコンソールアプリからはOpenProcess読み取り専用でもアクセス拒否される
OSはWindows7 64bit
内部のことは分からないですが、OpenProcessは同じ標準process.h内のものを使ってると思う
少なくともソース上ではそういう記述をしてますがコンパイラが何をしてるかまでは定かじゃないです
大きな違いはコンソールアプリであることですが、それが拒否の原因になるんでしょうか?
読み取り専用で試したが結果は同じ
CLIとしてコンパイルしたWindowsアプリからOpenProcessを呼び出すとフル権限で開ける
C++としてコンパイルしたコンソールアプリからはOpenProcess読み取り専用でもアクセス拒否される
OSはWindows7 64bit
内部のことは分からないですが、OpenProcessは同じ標準process.h内のものを使ってると思う
少なくともソース上ではそういう記述をしてますがコンパイラが何をしてるかまでは定かじゃないです
大きな違いはコンソールアプリであることですが、それが拒否の原因になるんでしょうか?
187デフォルトの名無しさん
2011/02/27(日) 18:39:56.37 VC2010を使用しています。
テキストボックスに文字が入力され、エンターを押されたら動作する処理を行いたいのですが、
TextChangedイベントに
if(TextBox1->Text->EndsWith("\r\n"))
では、認識出来ないのですが、どのようにすればよろしいのでしょうか?
よろしくお願いします。
テキストボックスに文字が入力され、エンターを押されたら動作する処理を行いたいのですが、
TextChangedイベントに
if(TextBox1->Text->EndsWith("\r\n"))
では、認識出来ないのですが、どのようにすればよろしいのでしょうか?
よろしくお願いします。
188デフォルトの名無しさん
2011/02/27(日) 19:14:15.81 フレームワークの話しはスレ違い
189デフォルトの名無しさん
2011/02/27(日) 19:44:49.91 フレームワークの話はどこですれば良いのでしょうか?
190デフォルトの名無しさん
2011/02/27(日) 19:48:31.21 C#の質問にして、ふらっとC#で聞くといい
191デフォルトの名無しさん
2011/02/28(月) 15:45:27.41 >185
com::ptr で保持して、リリース処理はそっちで対応しちゃあかんの?
com::ptr で保持して、リリース処理はそっちで対応しちゃあかんの?
193デフォルトの名無しさん
2011/02/28(月) 19:01:42.54194デフォルトの名無しさん
2011/02/28(月) 19:28:37.85 >193
それ用のクラスだぜ
あとは .net Framework の System::Runtime::InteropServices::SafeHandle を実装したら?
それ用のクラスだぜ
あとは .net Framework の System::Runtime::InteropServices::SafeHandle を実装したら?
195デフォルトの名無しさん
2011/02/28(月) 20:58:29.72 DirectXのリソースの解放にSafeHandleは使えないんじゃなかったっけ
最近のは知らんけど
最近のは知らんけど
196デフォルトの名無しさん
2011/02/28(月) 23:42:18.77 >187
KeyPress
KeyPress
197デフォルトの名無しさん
2011/03/01(火) 00:17:52.54 >195
詳しく
詳しく
198デフォルトの名無しさん
2011/03/01(火) 01:40:02.26 Direct3D自体の作成/解放が1スレッドに限定されるのに対し
ファイナライザスレッドでどーのこーのみたいな話だったか
使えないというか使う意味がない、みたいな
ファイナライザスレッドでどーのこーのみたいな話だったか
使えないというか使う意味がない、みたいな
199デフォルトの名無しさん
2011/03/10(木) 18:48:24.24 printfとか普通に書いたとき、
なんでprintfがアンマネージのコードって
コンパイラは理解できるの?
それらしい印になるようなキーワードを
特に書いてないような気がするのだが?
なんでprintfがアンマネージのコードって
コンパイラは理解できるの?
それらしい印になるようなキーワードを
特に書いてないような気がするのだが?
200デフォルトの名無しさん
2011/03/10(木) 18:56:54.84 内部的には #pragma managed や unmanaged 指定がされてんじゃね?
#include か #using かで切り分けてるんだと思うけど
#include か #using かで切り分けてるんだと思うけど
201デフォルトの名無しさん
2011/03/15(火) 00:19:49.85 失礼します。
Form1からForm2を開き、Form2を表示した状態でForm1のテキストボックスにフォーカスを合わせたいのですが、何か良い方法はありますでしょうか?
Form2のShownイベントで、Form1->TextBox1->Forcus();を実行してみましたが、Form1が見つかりませんでした。
よろしくお願いします。
Form1からForm2を開き、Form2を表示した状態でForm1のテキストボックスにフォーカスを合わせたいのですが、何か良い方法はありますでしょうか?
Form2のShownイベントで、Form1->TextBox1->Forcus();を実行してみましたが、Form1が見つかりませんでした。
よろしくお願いします。
202デフォルトの名無しさん
2011/03/15(火) 14:20:33.94 見つかりませんでしたじゃなくて
見つかる様にするんだよ。
作成時にインスタンス渡すとか、間を取り持つ作るとか
見つかる様にするんだよ。
作成時にインスタンス渡すとか、間を取り持つ作るとか
203201
2011/03/23(水) 22:44:49.12 http://imagingsolution.blog107.fc2.com/blog-entry-109.html
ここを参考に、Ownerを指定してもダメでした。
と、言うよりサンプル通りに作ってみても
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2039: 'Form2_Load' : 'Form2Test::Form2' のメンバーではありません。
1> d:\vc2010\test\form2test\form2test\Form2.h(15) : 'Form2Test::Form2' の宣言を確認してください。
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2065: 'Form2_Load' : 定義されていない識別子です。
(以下略)
と、なってしまいました。
Form2.hの宣言
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"Form2";
this->Text = L"Form2";
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
this->ResumeLayout(false);
Form2.cppにて
#include "Form1.h"
using namespace Form2Test;
System::Void Form2::Form2_Load(System::Object^ sender, System::EventArgs^ e) {
Form1^ PForm;
if(this->Owner != nullptr){
PForm = static_cast<Form1^>(this->Owner);
}
}
この記述では間違っているのでしょうか?VC2010を使用してます。
よろしくお願いします。
ここを参考に、Ownerを指定してもダメでした。
と、言うよりサンプル通りに作ってみても
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2039: 'Form2_Load' : 'Form2Test::Form2' のメンバーではありません。
1> d:\vc2010\test\form2test\form2test\Form2.h(15) : 'Form2Test::Form2' の宣言を確認してください。
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2065: 'Form2_Load' : 定義されていない識別子です。
(以下略)
と、なってしまいました。
Form2.hの宣言
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"Form2";
this->Text = L"Form2";
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
this->ResumeLayout(false);
Form2.cppにて
#include "Form1.h"
using namespace Form2Test;
System::Void Form2::Form2_Load(System::Object^ sender, System::EventArgs^ e) {
Form1^ PForm;
if(this->Owner != nullptr){
PForm = static_cast<Form1^>(this->Owner);
}
}
この記述では間違っているのでしょうか?VC2010を使用してます。
よろしくお願いします。
204デフォルトの名無しさん
2011/03/24(木) 02:14:35.75 本当にForm2はグローバル名前空間なのか?
とりあえずヒントだけ出したけど、C++、.NET、プログラミングの基礎にあたる内容はスレチだから返答は不要
というか、C++/CLIはコンパイル可能なコードすら書けないようなプログラミング初心者が使うものじゃない
とりあえずヒントだけ出したけど、C++、.NET、プログラミングの基礎にあたる内容はスレチだから返答は不要
というか、C++/CLIはコンパイル可能なコードすら書けないようなプログラミング初心者が使うものじゃない
205デフォルトの名無しさん
2011/03/24(木) 04:38:21.64 VC++2010&CLIで4.0以前(4.0は含まない)のNETを使う方法はありますか?
MSDNには3.5を利用するには2008SP1を入れろとかありましたが
NETのバージョンごとに入れるのはさすがに無駄すぎるので。
MSDNには3.5を利用するには2008SP1を入れろとかありましたが
NETのバージョンごとに入れるのはさすがに無駄すぎるので。
206デフォルトの名無しさん
2011/03/24(木) 11:57:27.41 http://msdn.microsoft.com/ja-jp/library/ff770576.aspx
プロジェクトファイルをテキストエディタで編集しろということらしい
C++/CLIで作った混合アセンブリはCLR2(.NET2.0-3.5)向けにコンパイルすると
CLR4では動作しなくなるので注意
インテリセンスも削られてるのでC++/CLIなら2008で作業するほうがいいよ
プロジェクトファイルをテキストエディタで編集しろということらしい
C++/CLIで作った混合アセンブリはCLR2(.NET2.0-3.5)向けにコンパイルすると
CLR4では動作しなくなるので注意
インテリセンスも削られてるのでC++/CLIなら2008で作業するほうがいいよ
207デフォルトの名無しさん
2011/03/24(木) 20:41:15.80 >>206
http://msdn.microsoft.com/ja-jp/library/47w1hdab.aspx
こちらのページを読んだところ
2010は4.0だけ、2008SP1なら3.5だけなのかと思ってしまったのですが
2008SP1は2.0〜3.5まで扱えるんですね
2008を入れることにします
ありがとうございました
http://msdn.microsoft.com/ja-jp/library/47w1hdab.aspx
こちらのページを読んだところ
2010は4.0だけ、2008SP1なら3.5だけなのかと思ってしまったのですが
2008SP1は2.0〜3.5まで扱えるんですね
2008を入れることにします
ありがとうございました
208デフォルトの名無しさん
2011/04/01(金) 22:50:53.88 質問です
画面を表示させ、ボタンを押したら表示されている画面をbitmapイメージとして保存(出来れば印刷も)したいのですが、
そういう事は可能なのでしょうか?
サンプルソース等探してみたのですが見つからなくて行き詰ってしまいました。
画面を表示させ、ボタンを押したら表示されている画面をbitmapイメージとして保存(出来れば印刷も)したいのですが、
そういう事は可能なのでしょうか?
サンプルソース等探してみたのですが見つからなくて行き詰ってしまいました。
209デフォルトの名無しさん
2011/04/01(金) 22:54:32.68 C# スクリーンショット でググれ
C#だぞ。C++/CLIじゃないぞ。
C#だぞ。C++/CLIじゃないぞ。
210デフォルトの名無しさん
2011/04/01(金) 22:57:17.22211デフォルトの名無しさん
2011/04/02(土) 12:02:12.18 フォーム上にメニューバーを追加したいんですが
どういうソース書けばいいんでしょうか?
どういうソース書けばいいんでしょうか?
212デフォルトの名無しさん
2011/04/02(土) 12:06:00.79 C# MenuStrip でググれ
C#だぞ。C++/CLIじゃないぞ。
C#だぞ。C++/CLIじゃないぞ。
213デフォルトの名無しさん
2011/04/02(土) 12:31:38.06 サンクス
214デフォルトの名無しさん
2011/04/02(土) 17:27:27.97 質問です。
テキストファイルから設定を読み取り、動的にリンクを生成し、別プログラムを起動するランチャーを作っています。
動的にリンクは生成できますが、イベントハンドラに仕込むコールバック関数を動的には生成できないため、
1つのコールバック関数を呼び出しそのなかで起動するプログラムを判断せざるを得ないと考えました。
gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandlerで登録される関数には、
呼び出し元のリンクが引数に渡されるので、cliext::mapで事前に、リンクとコマンドラインの組を格納して判断に用いよう
と考えました。が、リンクのハンドラ( System::Windows::Forms::Label^ )はoperator <が定義されておらず
ソートできないため使用できませんでした。
それではcliext::vectorに、リンクとコマンドラインのcliext::pairを格納しようと思いましたが、どうやらムリみたいです。
実際コンパイルエラーになりました。参考ウェブサイト:
ttp://blogs.wankuma.com/episteme/archive/2007/11/21/109646.aspx
ttp://d.hatena.ne.jp/crimsonwoods/20071130/1196384990
どうすれば、リンクとコマンドラインの型を管理できるでしょうか。
リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、
コマンドラインをメンバ変数として持たせるというのも考えましたがどうも無理やり過ぎる気がします。
何かよい方法はないでしょうか。
テキストファイルから設定を読み取り、動的にリンクを生成し、別プログラムを起動するランチャーを作っています。
動的にリンクは生成できますが、イベントハンドラに仕込むコールバック関数を動的には生成できないため、
1つのコールバック関数を呼び出しそのなかで起動するプログラムを判断せざるを得ないと考えました。
gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandlerで登録される関数には、
呼び出し元のリンクが引数に渡されるので、cliext::mapで事前に、リンクとコマンドラインの組を格納して判断に用いよう
と考えました。が、リンクのハンドラ( System::Windows::Forms::Label^ )はoperator <が定義されておらず
ソートできないため使用できませんでした。
それではcliext::vectorに、リンクとコマンドラインのcliext::pairを格納しようと思いましたが、どうやらムリみたいです。
実際コンパイルエラーになりました。参考ウェブサイト:
ttp://blogs.wankuma.com/episteme/archive/2007/11/21/109646.aspx
ttp://d.hatena.ne.jp/crimsonwoods/20071130/1196384990
どうすれば、リンクとコマンドラインの型を管理できるでしょうか。
リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、
コマンドラインをメンバ変数として持たせるというのも考えましたがどうも無理やり過ぎる気がします。
何かよい方法はないでしょうか。
215デフォルトの名無しさん
2011/04/02(土) 17:39:23.59216デフォルトの名無しさん
2011/04/02(土) 17:45:48.60217デフォルトの名無しさん
2011/04/02(土) 17:58:52.75 やったらもう戻ってこないだろう
218デフォルトの名無しさん
2011/04/02(土) 18:01:20.52 コントロールのTagプロパティを使う手もあるけどね
C++/CLIはC++とC#を理解して
その上でもしも両方同時に必要になったときに橋渡しするために嫌々ちょっとだけ使う言語です
C++/CLIはC++とC#を理解して
その上でもしも両方同時に必要になったときに橋渡しするために嫌々ちょっとだけ使う言語です
219デフォルトの名無しさん
2011/04/02(土) 18:38:49.60220デフォルトの名無しさん
2011/04/03(日) 17:02:31.86 >>214
手元にあるvs2010では問題なく動いた
手元にあるvs2010では問題なく動いた
221デフォルトの名無しさん
2011/04/03(日) 18:14:41.51 CLIはすぐデザイナが壊れるし
IDEが自動でインデントをぐちゃぐちゃに破壊してくれるので
C++をラップするくらいにしか使わない
IDEが自動でインデントをぐちゃぐちゃに破壊してくれるので
C++をラップするくらいにしか使わない
222デフォルトの名無しさん
2011/04/03(日) 19:08:09.39 VSの次のバージョンではC++/CLIのWinFormsデザイナは削除したほうがいいと思う
>>219のようなかわいそうな人を生むだけで害悪しかない
>>219のようなかわいそうな人を生むだけで害悪しかない
223デフォルトの名無しさん
2011/04/03(日) 21:53:39.15 C++もかわいそう
別に「統合」してくれと頼んだわけでもないのに
へんな統合開発環境の下で働かされてる
別に「統合」してくれと頼んだわけでもないのに
へんな統合開発環境の下で働かされてる
224デフォルトの名無しさん
2011/04/10(日) 21:32:31.72 繰り返しの多い処理をするとメモリオーバーになってしまいます
どのようにメモリを解放するのですか?
どのようにメモリを解放するのですか?
225デフォルトの名無しさん
2011/04/10(日) 21:42:17.88 再現するソース出して
226デフォルトの名無しさん
2011/04/10(日) 21:49:49.30 こういうこと?
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
227デフォルトの名無しさん
2011/04/22(金) 05:33:09.44 C++/CLIのコードをビルドしたアセンブリにアンマネージコードが
含まれてないかチェックする方法って知ってますか?
なぜこういうことを聞くかというとこのクラスライブラリをマネージコードから
使う必要が出てきたためです。
含まれてないかチェックする方法って知ってますか?
なぜこういうことを聞くかというとこのクラスライブラリをマネージコードから
使う必要が出てきたためです。
228デフォルトの名無しさん
2011/04/22(金) 10:25:23.73 /clr:pure
229デフォルトの名無しさん
2011/04/22(金) 11:04:57.59 それで分かればいいよねぇ
230デフォルトの名無しさん
2011/04/22(金) 11:11:26.93 意味がわからん
混在アセンブリはマネージコードから使えるけど
セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
まず間違いなく/clr:pureではダメで/clr:safeでないといけない
でも/clr:safeなんて世の中にあるC++/CLIのコードのほとんどがコンパイルできないよw
混在アセンブリはマネージコードから使えるけど
セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
まず間違いなく/clr:pureではダメで/clr:safeでないといけない
でも/clr:safeなんて世の中にあるC++/CLIのコードのほとんどがコンパイルできないよw
231227
2011/04/23(土) 09:53:36.44 >>228-230
レスありがとう
> 混在アセンブリはマネージコードから使えるけど
> セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
> まず間違いなく/clr:pureではダメで/clr:safeでないといけない
説明不足でした
とにかくC++/CLIのコードのすべてのパブリックなクラスとメンバに
マネージコードからアクセスできるようにしたいんです
アンマネージコードが含まれてるとそれができないんじゃないかと思って質問しました
レスありがとう
> 混在アセンブリはマネージコードから使えるけど
> セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
> まず間違いなく/clr:pureではダメで/clr:safeでないといけない
説明不足でした
とにかくC++/CLIのコードのすべてのパブリックなクラスとメンバに
マネージコードからアクセスできるようにしたいんです
アンマネージコードが含まれてるとそれができないんじゃないかと思って質問しました
232デフォルトの名無しさん
2011/04/23(土) 11:45:11.72 アンマネージコードは含まれててもいい
というかそのためのC++/CLI
というかそのためのC++/CLI
233デフォルトの名無しさん
2011/04/23(土) 12:23:54.63 何を持って出来ないと思ったかがポイントかな。
とりあえず動くコードを張っとこう。
VS2010だとこのままで動くし、
VS2005-2008の場合はmanifestをちょこちょこいじる必要がある。
// cl /LD /O1 /clr test1s.cpp
#include <iostream>
class baz { public: void say() { std::cout << "Hello BAZ" << std::endl; }};
public ref class Foo { public: void Say() { std::cout << "Hello FOO" << std::endl; baz b; b.say(); }};
ref class Bar { public: void Say() { std::cout << "Hello BAR" << std::endl; baz b; b.say(); }};
// csc /o /r:test1s.dll test1.cs
using System;
class Program {
static void Main() {
new Foo().Say();
// new Bar().Say();// internalは呼び出せない。
}
}
とりあえず動くコードを張っとこう。
VS2010だとこのままで動くし、
VS2005-2008の場合はmanifestをちょこちょこいじる必要がある。
// cl /LD /O1 /clr test1s.cpp
#include <iostream>
class baz { public: void say() { std::cout << "Hello BAZ" << std::endl; }};
public ref class Foo { public: void Say() { std::cout << "Hello FOO" << std::endl; baz b; b.say(); }};
ref class Bar { public: void Say() { std::cout << "Hello BAR" << std::endl; baz b; b.say(); }};
// csc /o /r:test1s.dll test1.cs
using System;
class Program {
static void Main() {
new Foo().Say();
// new Bar().Say();// internalは呼び出せない。
}
}
234デフォルトの名無しさん
2011/04/23(土) 12:31:41.38 clrをマネージだけで使うとかかなりマゾい人だな
235デフォルトの名無しさん
2011/04/23(土) 14:15:04.04 そんな有り得ないというか無意味な使い方を想定するのは不毛だし
C++/CLIみたら混在しているものと見なせばいいよ
C++/CLIみたら混在しているものと見なせばいいよ
236227
2011/04/23(土) 18:24:35.15 >>232-235
レスありがとう
アンマネージが含まれてもマネージから呼び出せるということだけど
C++/CLIのソースコードで画像処理とかやってて、
例えばビットマップの構造体をnewして先頭からのバイト数でアクセスするとか、
その情報を渡してWin32APIを呼ぶとかしまくってるんだけど、
これってアンマネージにコンパイルされるよね。
こんなメソッドをC#から呼んでまともに動作するんだろうかって心配なんです。
レスありがとう
アンマネージが含まれてもマネージから呼び出せるということだけど
C++/CLIのソースコードで画像処理とかやってて、
例えばビットマップの構造体をnewして先頭からのバイト数でアクセスするとか、
その情報を渡してWin32APIを呼ぶとかしまくってるんだけど、
これってアンマネージにコンパイルされるよね。
こんなメソッドをC#から呼んでまともに動作するんだろうかって心配なんです。
237デフォルトの名無しさん
2011/04/23(土) 19:13:47.90 やっぱり、Managed Unmanagedの意味を取り違えてたか。
その程度ならManagedでコンパイルされてるよ。ただしunsafeだけどね。
その程度ならManagedでコンパイルされてるよ。ただしunsafeだけどね。
238227
2011/04/24(日) 11:33:12.50239デフォルトの名無しさん
2011/04/24(日) 19:03:40.58 文字列を逆順にするプログラムを書こうとした場合、自分で考えると以下のようになりました。
---------------------------
#include <string>
string str = "abcde"
string new_str;
int i;
int length = str.size();
for (i=0; i<length; ++i) {
new_str[i] = str[length-i-1];
}
---------------------------
なにかかカッコ悪い感じがするのですが、
一番スマートな書き方はどのような感じになりますでしょうか?
PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、
C++のstringライブラリにありましたでしょうか?
あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。
何故でしたでしょうか・・?
ご教示いただけますと幸いです。
---------------------------
#include <string>
string str = "abcde"
string new_str;
int i;
int length = str.size();
for (i=0; i<length; ++i) {
new_str[i] = str[length-i-1];
}
---------------------------
なにかかカッコ悪い感じがするのですが、
一番スマートな書き方はどのような感じになりますでしょうか?
PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、
C++のstringライブラリにありましたでしょうか?
あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。
何故でしたでしょうか・・?
ご教示いただけますと幸いです。
240デフォルトの名無しさん
2011/04/24(日) 19:23:40.94 スレ違い
241239
2011/04/24(日) 19:27:37.31 すみません
242デフォルトの名無しさん
2011/04/24(日) 19:43:51.75 このスレ的にはこういう回答になる(笑
// cl /FUSystem.Core.dll /clr:safe test2.cpp
using namespace System;
using namespace System::Linq;
int main(array<String^>^ args) {
String^ str = "abcde";
String^ new_str = gcnew String(Enumerable::ToArray(Enumerable::Reverse(str)));
Console::WriteLine(new_str);
}
拡張メソッドは使えなかったっけ?ちとスマートじゃないな。
// cl /FUSystem.Core.dll /clr:safe test2.cpp
using namespace System;
using namespace System::Linq;
int main(array<String^>^ args) {
String^ str = "abcde";
String^ new_str = gcnew String(Enumerable::ToArray(Enumerable::Reverse(str)));
Console::WriteLine(new_str);
}
拡張メソッドは使えなかったっけ?ちとスマートじゃないな。
243デフォルトの名無しさん
2011/04/24(日) 20:55:50.28 WCHAR [32]' から 'System::Object ^' に変換できません
というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
244デフォルトの名無しさん
2011/04/24(日) 21:08:28.84 System::Object^ v_obj = gcnew System::String(v_wchar);
245デフォルトの名無しさん
2011/04/24(日) 22:09:06.50 たぶんこれかな
msclr::interop::marshal_as
msclr::interop::marshal_as
246デフォルトの名無しさん
2011/04/24(日) 22:36:22.37 >244
ありがとうございました。その逆の変換はどうするんでしょうか?
ありがとうございました。その逆の変換はどうするんでしょうか?
247デフォルトの名無しさん
2011/04/24(日) 23:47:43.19 >>242
今時サロゲートペアすら考えないコーディングは絶滅すべき
今時サロゲートペアすら考えないコーディングは絶滅すべき
248デフォルトの名無しさん
2011/04/25(月) 04:59:47.67249デフォルトの名無しさん
2011/04/27(水) 16:00:21.03 >>247
サロゲートペア対応に挑戦しようと思うのだが、VS2010expressのコンパイラでエラーになる。
なんかスマートな対応方法ないすか?
literal String^ str = L"「叱る」と「\uD842\uDF9Fる」";
error C3850: '\uD842': ユニバーサル文字名が無効な文字を指定しています。
error C3850: '\uDF9F': ユニバーサル文字名が無効な文字を指定しています。
サロゲートペア対応に挑戦しようと思うのだが、VS2010expressのコンパイラでエラーになる。
なんかスマートな対応方法ないすか?
literal String^ str = L"「叱る」と「\uD842\uDF9Fる」";
error C3850: '\uD842': ユニバーサル文字名が無効な文字を指定しています。
error C3850: '\uDF9F': ユニバーサル文字名が無効な文字を指定しています。
250デフォルトの名無しさん
2011/04/27(水) 21:36:58.89 >>249
ググると𠮟るのユニコードは「20B9F」となってるけど。
ググると𠮟るのユニコードは「20B9F」となってるけど。
251デフォルトの名無しさん
2011/04/27(水) 21:40:24.11 textBoxに入力した文字を分割して配列に割り当てる方法がわかりません
252デフォルトの名無しさん
2011/04/27(水) 22:11:33.08 C# 文字列 分割 でググれ
C#だぞ。C++/CLIじゃないぞ。
C#だぞ。C++/CLIじゃないぞ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- 【悲報】維新の政治資金でガールズバー、高市首相「良いか悪いかは国民の皆さまが判断されること」 [115996789]
- 【マギレコ】VIPでマギアレコード&マギアエクセドラ【まどドラ】
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【速報】俳優の三浦春馬さん、自宅で死亡 自殺とみられる←この衝撃を超える速報テロ、いまだない
- 衛生的に気持ち悪くて性風俗店行ったこと無いんだ
- 【悲報】タンパク質さん、寿命を縮めることが判明
