くだすれC++/CLI(初心者用)
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/03/12(日) 15:15:10「どんなにくだらないC++/CLIプログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
姉妹スレ
【.NET】 C++/CLI について語ろうぜ 【最適】
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l50
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l50
0002デフォルトの名無しさん
2006/03/12(日) 15:15:54http://www.microsoft.com/japan/msdn/vs05/visualc/TransGuide.asp#transguide_topic
[特集] Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005
http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
Calling Native Functions from Managed Code
http://msdn2.microsoft.com/library/ms235282(en-US,VS.80).aspx
C++/Cli Essentials
http://www.amazon.com/exec/obidos/tg/detail/-/0321174054/
Shared Source Cli Essentials
http://www.amazon.co.jp/exec/obidos/ASIN/059600351X
C++/CLI設計者のblog
http://blogs.msdn.com/hsutter/
http://blogs.msdn.com/slippman/
STL.NET
http://www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp
http://www.dinkumware.com/
C++の今後
http://216.55.183.63/pdc2005/slides/TLN309_Sutter.ppt
0003デフォルトの名無しさん
2006/03/12(日) 15:38:520004デフォルトの名無しさん
2006/03/12(日) 16:25:24UInt64 hogeを入力したら、16進数変換して、文字変数tmpを返す処理を
よく使う処理なので関数化したいのですが、変数のスコープで調べて見ましたが
明確な解決方法がみつかりませんよろしくオナガイシマス
関数
String^hex_convert(UInt64 hoge)
{
wchar_t foo[16];
memset(foo,0,16*sizeof(wchar_t));
_i64tow_s(hoge,foo,16,16);
String^tmp=gcnew String(foo);//この部分では変数tmpはString型として定義されている
return tmp += " (System::String)";
}
本体側のソース
UInt64 hoge =Convert::ToUInt64(textBox1->Text,16);
{
hex_convert(hoge);
textBox2->Text = tmp;//変数tmpは未定義と怒られる
}
0005デフォルトの名無しさん
2006/03/12(日) 16:28:220006デフォルトの名無しさん
2006/03/12(日) 16:47:11それにしてもなめられたコードをもらったもんだな。
String^ hex_convert(UInt64 hoge)
{
return hoge.ToString("X") + " (System::String)";
}
そしてそれを使う方。
{
UInt64 hoge = Convert::ToUInt64(textBox1->Text, 16);
textBox2->Text = hex_convert(hoge);
}
しかしこれでは何が駄目なのか。変換してまた変換するのは無駄だと思う。
こうすればtextBox1->Textが十六進法の文字列としてとして正当かどうか調べたければ、
こうすれば十分。Convert::ToUInt64が変換できなければ冷害を投げてくれる。
{
(void)Convert::ToUInt64(textBox1->Text, 16);
textBox2->Text = textBox1->Text;
}
0007デフォルトの名無しさん
2006/03/12(日) 17:17:08TryParse便利だよTryParse
0008デフォルトの名無しさん
2006/03/12(日) 18:10:03変換部分は関数化しなくても良い理由はよくわかりました
ただ関数化したかった理由として書込み部分で、基数変換があったからです
//buttun2(Open File)で開いたファイルを読込み(ARG_2)、変数i(Dec→Hex)と結合し変数の数だけファイルを作る
private:
System::Void button4_Click(System::Object^ sender, System::EventArgs^ e){
for(UInt64 i = h_start;i < h_end; i ++)
{
String^hoge = Convert::ToString(i);
wchar_t foo[16];
memset(foo, 0, 16*sizeof(wchar_t));
_i64tow_s (i,foo,16,16);
String ^tmp = gcnew String(foo);
StreamWriter^ sw = gcnew StreamWriter ("d:\\hoge\\hoge_"+hoge+ ".txt");
sw->Write(tmp + System::Environment::NewLine+ARG_2);
sw->Close();
}
String^hoge = Convert::ToString(i->hoge,16);
MSDNを読んだらiからhogeへ基数変換できると思ったのですが、
: error C2227: '->hoge' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
MSDNではジェネリック型のユーザーは、制約を満たさない型引数を置き換えることはできません。
多分この部分でエラーが出ていると思うのですがこれ以上深く原因を掘り下げれません。解説お願い出来ないでしょうか。
0009デフォルトの名無しさん
2006/03/12(日) 18:36:28アロー演算子の意味分かってるか?
0010デフォルトの名無しさん
2006/03/12(日) 18:45:34そうなんですよね構造体のメンバー変数参照するわけだから、
変数を代入する振る舞いではないですよね
0011デフォルトの名無しさん
2006/03/12(日) 20:36:28自分のコードの中に答えがあるとは、
相変わらず何やってんだか
0012デフォルトの名無しさん
2006/03/12(日) 21:35:43TryParseは基数を指定できるように見えないのだが。
0013デフォルトの名無しさん
2006/03/12(日) 21:36:29StreamWriterは自動変数でいいと思う。
0014デフォルトの名無しさん
2006/03/12(日) 22:10:52NumberStyles.HexNumber
0015デフォルトの名無しさん
2006/03/12(日) 22:40:11知らなかった。thx!
0016デフォルトの名無しさん
2006/03/13(月) 19:21:17StreamReader、StreamWriter
両方にくっつけないと、だめな仕様みたいですね
当たり前と言えば当たり前のことなんだが
ヘッダー辺りに、ちょろちょろっと、宣言して
「このプログラムはshift-jisなんだぞ、いいな下々のものよ」ってな
感じににはできないわけ?
0017デフォルトの名無しさん
2006/03/13(月) 19:34:290018デフォルトの名無しさん
2006/03/13(月) 19:40:310019デフォルトの名無しさん
2006/03/13(月) 20:00:48System::IO::StreamReader(openFileDialog1->FileName,System::Text::Encoding::GetEncoding("Shift_JIS"));
って読み込んで
sw->Write(hoge,System::Text::Encoding::GetEncoding("Shift_JIS"));
こんな感じで書き出さない?
これだと読む時も書く時も、Text::Encoding::GetEncoding("Shift_JIS"));
が必要なんだけど、これをもっと簡単にする方法って無いのかなってこと
0020デフォルトの名無しさん
2006/03/13(月) 20:21:550021デフォルトの名無しさん
2006/03/13(月) 22:36:050022デフォルトの名無しさん
2006/03/14(火) 23:39:530023デフォルトの名無しさん
2006/03/14(火) 23:43:020024デフォルトの名無しさん
2006/03/15(水) 00:12:38外なら短い別名付けることを考える。
0025デフォルトの名無しさん
2006/03/15(水) 00:32:290026デフォルトの名無しさん
2006/03/15(水) 00:36:54gcnewしたオブジェクトは明示的にdeleteしなくていいみたいだけど、
gcnewってnewより遅いとかデメリットありますか?
これから新しく書くコードは全部gcnew使った方が良い?
0027デフォルトの名無しさん
2006/03/15(水) 00:40:570028デフォルトの名無しさん
2006/03/15(水) 00:50:38移植性を考えなければ、マネージドで書いておくのがいいんじゃね?
とはいえ漏れはコア部分は全部ネイティブで書いて、
GUIの部分だけマネージドで書いてるけど。
GUIのところだけネイティブから Application::Run(gcnew Form1);
みたくやってそっちはマネージにお任せ、って感じで。
0029デフォルトの名無しさん
2006/03/15(水) 01:11:25今日初めてCLIで"Hello, World"しました。
明日もよろしく。
0030デフォルトの名無しさん
2006/03/15(水) 01:58:52GCに任せないすぐDisposeしなきゃいけない場合は
deleteする必要あるよ。
0031デフォルトの名無しさん
2006/03/15(水) 02:52:290032デフォルトの名無しさん
2006/03/15(水) 02:56:11void func(void **pp) {
*pp = new Object;
}
のように関数の引数で新しいインスタンスを返すような実装はどのようにやればいいのでしょうか?
void func2(ArrayList ^*pp) {
*pp = gcnew ArrayList
}
のような関数で試してみたらfunc2呼び出し部分でコンパイルエラーになってしまいました・・・
0033デフォルトの名無しさん
2006/03/15(水) 02:59:55void func(ArrayList^% pr) { pr = gcnew ArrayList(); }
0034デフォルトの名無しさん
2006/03/15(水) 08:40:16それだとポインタへの参照だから、void func(void*& rp)が対応すると思う。
正確さを期するならこうだと思う
void f(cli::interior_ptr<ArrayList^> pp)
{
*pp = gcnew ArrayList();
}
ただこうする必要性は全く無いから実用上は33の方法で十分。
ちなみに外に見せるものならOut属性を付ければC#などからout引数として認識される。
void func([System::Runtime::InteropServices::Out] ArrayList^% pr)
0035デフォルトの名無しさん
2006/03/15(水) 09:34:05質問:
C++でvirtual constructorが無いのは何故か?
0036デフォルトの名無しさん
2006/03/15(水) 09:39:51オブジェクトを作るときには本当の型がわかっているから。
スレ違いだからこれ以上の話はこっちへ。
http://pc8.2ch.net/test/read.cgi/tech/1139931895/l50
0037デフォルトの名無しさん
2006/03/15(水) 11:34:32java awt.Grahics
{
java class(strings arg[])
{
"谷川浩司名人”;
System.out.printlin.;
}
}
0038デフォルトの名無しさん
2006/03/15(水) 18:55:46using namespace System;
という宣言以外、他に必要ありませんか?
0039デフォルトの名無しさん
2006/03/15(水) 19:04:00using namespace System::Net::Mail;
毎回ネームスペースを修飾するなら何もいらん。
0040デフォルトの名無しさん
2006/03/15(水) 20:28:06http://msdn2.microsoft.com/ja-JP/library/system.net.mail.smtpclient(VS.80).aspx
ここにSMTPでメール送信するサンプルが書いてあるんだけど
ユーザIDやパスワード認証のコードが書いてないんだけど
これじゃあ、メール送信できないよね、
C++/CLIでSMTPのユーザIDやパスワード認証ってどうやんの?
0041デフォルトの名無しさん
2006/03/15(水) 20:29:230042デフォルトの名無しさん
2006/03/15(水) 20:39:1740ですが
使えなくて当然って落ちだね
0043デフォルトの名無しさん
2006/03/15(水) 20:56:38SmtpClient.Credentialsの説明を読んでたらそんな気がしてきた。普通にメーラーを作るのには向いてなさそうだ。
0044デフォルトの名無しさん
2006/03/15(水) 21:03:240045デフォルトの名無しさん
2006/03/15(水) 21:05:57ttp://www.codeproject.com/csharp/smtppop3mailserver.asp
0046デフォルトの名無しさん
2006/03/15(水) 21:26:12PerlやPHPなら簡単に実装出来る機能なのになぁ・・・
0047デフォルトの名無しさん
2006/03/15(水) 21:28:020048デフォルトの名無しさん
2006/03/15(水) 21:46:24PerlやPHPじゃぁGUI作れねーんだよな
0049デフォルトの名無しさん
2006/03/15(水) 23:44:13>>34
ありがとうございます、試してみます
正確に**を再現しようとするとcli::interior_ptr<ArrayList^>になるのですね
勉強になりました
0050デフォルトの名無しさん
2006/03/15(水) 23:50:32このスレノートンでUnix.Penguinとか言うウイルスに認定される・・・
0051デフォルトの名無しさん
2006/03/15(水) 23:52:08>3
0052デフォルトの名無しさん
2006/03/15(水) 23:58:50thx
勝手にノートンに消されちゃうのつらいなあ
0053デフォルトの名無しさん
2006/03/16(木) 11:20:48で、zs = New GZipOutputStream(fs); とか使われてるんだが、
C++/CLIからも使えるか?
0054デフォルトの名無しさん
2006/03/16(木) 11:26:120055デフォルトの名無しさん
2006/03/16(木) 11:34:04System.IO.Compression.GZipStream2.0で追加だから使えるよ。
Microsoft.VisualBasicやらMicrosoft.JSharpやらのは使えても使わないほうがいいけど、
System系だから安心して使ってよし。
0056デフォルトの名無しさん
2006/03/16(木) 11:38:46C++/CLIなんてのに手を出すのなら使えるものは親でも使え、で良いと思うけど。
0057デフォルトの名無しさん
2006/03/16(木) 12:08:120058デフォルトの名無しさん
2006/03/16(木) 12:32:32J#のは別にインストールしなきゃいかんからね。
0059デフォルトの名無しさん
2006/03/16(木) 12:51:44ライセンスの関係上仕方ないんだろうけど、
正直、使いみちが無い・・・・・
手持ちの Java のコードも結構有って、
VS でいじりたいんだけどなぁ。
0060デフォルトの名無しさん
2006/03/16(木) 19:34:380061デフォルトの名無しさん
2006/03/16(木) 21:25:43VS2005 Std を買ってきたがJ#だけインストールからはずしてやった。
0062デフォルトの名無しさん
2006/03/16(木) 22:52:53解説サイトってないですか?
比較の対象がC#ばっかりで、C#知らないと全然分からない。
0063デフォルトの名無しさん
2006/03/16(木) 23:07:29読めなかったらプログラマ辞めちまえ
0064デフォルトの名無しさん
2006/03/17(金) 22:38:56: error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
怒られますどうしてデツカ
sGoodDate( int Year, int Month, int Day )
{
return ((Month>=1)&&(Month<=12)&&(Day>=1)&&(Day<=DaysInMonth(Year,Month)));
}
0065デフォルトの名無しさん
2006/03/17(金) 22:48:18返値の型が指定されてないから。
sGoodDate( int Year, int Month, int Day )
↓
int sGoodDate( int Year, int Month, int Day )
0066デフォルトの名無しさん
2006/03/17(金) 22:53:580067デフォルトの名無しさん
2006/03/17(金) 22:54:36それはやりました
そうすると今度は、
error C3861: 'DaysInMonth': 識別子が見つかりませんでした
になります
0068デフォルトの名無しさん
2006/03/17(金) 23:03:360069デフォルトの名無しさん
2006/03/17(金) 23:42:21そもそもC/C++できるのか?
sGoodDateよりも前にDaysInMonthの宣言はあるのか?
0070デフォルトの名無しさん
2006/03/18(土) 00:14:45#include <iostream>
using namespace std;
int IsGoodDate( int Year, int Month, int Day )
{
return ((Month>=1)&&(Month<=12)&&(Day>=1)&&(Day<=DaysInMonth(Year,Month)));
}//IsGoodDate
int DaysInMonth( int nYear, int nMonth )
{
const int nDaysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if ( ( nMonth < 1 ) || ( 12 < nMonth ) )
return 0;
if ( (2 == nMonth) && IsLeapYear(nYear) )
return 29;
return nDaysInMonth[nMonth-1];
}//DaysInMonth
int main (void)
{
int Year=0, Month=0, Day=0;
cin >> Year >>Month >> Day;
cout << ((Month>=1)&&(Month<=12)&&(Day>=1)&&(Day<=DaysInMonth(Year,Month)));
return(0)
}
0071デフォルトの名無しさん
2006/03/18(土) 00:18:28IsGoodDateはDaysInMonthを知らないだろ
ってかこれはC++/CLIじゃねぇ
0072デフォルトの名無しさん
2006/03/18(土) 00:28:590073デフォルトの名無しさん
2006/03/18(土) 01:49:310074デフォルトの名無しさん
2006/03/18(土) 11:06:12まぁ、Cから勉強して出直してこいってこったな
使用する前に宣言されていないと、使えねぇんだよ
0075デフォルトの名無しさん
2006/03/18(土) 11:08:430076http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 19:59:19もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0077デフォルトの名無しさん
2006/03/20(月) 02:34:30System.Web.Mail.SmtpMail.SmtpServer = "mail.hoge.co.jp";
っていうコード
C/C++的にはどう書いたらイイデツカ
0078デフォルトの名無しさん
2006/03/20(月) 08:19:08静的メンバと名前空間へのアクセスには :: スコープ解決演算子。
System::Web::Mail::SmtpMail::SmtpServer = "mail.hoge.co.jp";
0079デフォルトの名無しさん
2006/03/20(月) 19:59:18結果は
hoge.cpp
.\hoge.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
.\hoge.cpp(5) : error C3083: 'Mail': '::' の左側のシンボルには、型を指定しなければなりません
.\hoge.cpp(5) : error C3083: 'SmtpMail': '::' の左側のシンボルには、型を指定しなければなりません
.\hoge.cpp(5) : error C2039: 'SmtpServer' : 'System::Web' のメンバではありません。
.\hoge.cpp(5) : error C2065: 'SmtpServer' : 定義されていない識別子です。
でした
orz
0080デフォルトの名無しさん
2006/03/20(月) 20:02:48> .\hoge.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
関数の返値が未定義
> .\hoge.cpp(5) : error C3083: 'Mail': '::' の左側のシンボルには、型を指定しなければなりません
> .\hoge.cpp(5) : error C3083: 'SmtpMail': '::' の左側のシンボルには、型を指定しなければなりません
> .\hoge.cpp(5) : error C2039: 'SmtpServer' : 'System::Web' のメンバではありません。
> .\hoge.cpp(5) : error C2065: 'SmtpServer' : 定義されていない識別子です。
DLLの参照不足
0081デフォルトの名無しさん
2006/03/20(月) 20:35:48using namespace System.Web.Mail
?
0082デフォルトの名無しさん
2006/03/20(月) 23:19:18プロジェクトのDLL参照で追加
0083デフォルトの名無しさん
2006/03/21(火) 03:58:360084デフォルトの名無しさん
2006/03/21(火) 08:51:320085デフォルトの名無しさん
2006/03/21(火) 10:13:55MSDNに書いてある。
http://msdn2.microsoft.com/ja-jp/library/system.web.mail.smtpmail(VS.80).aspx
0086デフォルトの名無しさん
2006/03/21(火) 13:22:52System Webなんだね
やっとメールが送れたお
0087デフォルトの名無しさん
2006/03/21(火) 16:56:230088デフォルトの名無しさん
2006/03/21(火) 17:58:08GUIにしたら、コンパイルはできても、例外エラーがでてメール送れないんだよね
なんでだろう??
The server rejected one or more recipient address.
The server response was:550 5.11<System Windows.Forms.TextBox>///User
GUIのプログラム
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
String^ Mailsever = "mail.hoge.ne.jp";
String^ From = "[email protected]";
String^ To;
String^ Title;
String^ Message;
To = Convert::ToString(textBox1);
Title = Convert::ToString(textBox2);
Message = System::Convert::ToString(textBox3);
System::Web::Mail::SmtpMail::SmtpServer = Mailsever;
System::Web::Mail::SmtpMail::Send(
From,
To,
Title,
Message);
return;
}
0089デフォルトの名無しさん
2006/03/21(火) 18:06:240090デフォルトの名無しさん
2006/03/21(火) 18:17:15To = Convert::ToString(textBox1);
を
String^ To = [email protected]
にしたら、成功したけど
TitleやMessageが入力したものに余分なものがくっついている
どうやらそれが原因のようです
Messageにaaaといれたら
System.Windows.Forms.TextBox, Text: aaa
なんだよね、To = Convert::ToString(textBox1);
これでいいよね?
t聞いてみる。
0091デフォルトの名無しさん
2006/03/21(火) 18:19:06○textBox3にaaaと入力
です
0092デフォルトの名無しさん
2006/03/21(火) 18:26:25その辺かなり最低限しか実装してなかったはず
どっかで見たけど結論は「Socket 使って自前でプロトコル喋れ」だった
0093デフォルトの名無しさん
2006/03/21(火) 18:28:32コンソールアプリケーションとして作成したソフトをベースとして、メイン関数
のみをwindowsフォームに置き換えました。/clrpureオプションでコンパイル
する分にはネイティブの時より2割遅い程度だったのですが、/clrとして
windowsフォーム以外のソースのincludeの下に#pragma unmanagedを入れると
速くなるどころか1/10程度の速度になってしまいました。何とか元の
速度で動かす方法はないでしょうか。これだけでは情報が不足しているかも
しれませんが、何かアドバイスがあればお願いします。
0094デフォルトの名無しさん
2006/03/21(火) 18:29:59->Text
できたお、まだまだ不慣れやなC++の書き方
0095デフォルトの名無しさん
2006/03/21(火) 20:42:02マネージドとアンマネージドの切り替えには時間が掛かる。
だからフォーム以外全部マネージドでは頻繁に、
マネージドとアンマネージドの切り替えが起こるので遅くなって当然。
0096デフォルトの名無しさん
2006/03/21(火) 21:26:03System::Net::Mail使って見ようと思ってMSDN見てるけど
使い方は大体同じ感じだけど
messageの使い方がミソかな?
SubjectやBodyをコピーコンストラクターで使うみたいなんだけど
エンコードもきっちり決まってんのかな??
コンパイラ君が素直に言うこと聞いてくれないお
なんか制限が多い感じがするNE
0097デフォルトの名無しさん
2006/03/21(火) 23:03:58今、作っているのは思考ゲームで、思考ルーチンは全部アンマネージドの
つもりです。その間はGUIは動かないので、マネージドとの切り替えは
ないものと考えています。ただし、アンマネージド指定をしたソースの
出力コードを見てみるとコンストラクタ等一部がMSILになってしまって
おり、これが響いているかもしれません。
が
0098デフォルトの名無しさん
2006/03/21(火) 23:08:03例えばマネージドの関数内でアンマネージドの関数何度も呼べばその度にマーシャリングが発生してパフォーマンスが落ちる。
0099デフォルトの名無しさん
2006/03/21(火) 23:28:16マネージド⇔アンマネージドの切り替えは本来ほとんど必要ないと
思うのですが、避ける方法はないでしょうか。
------Form1.h内容----- (自動生成されたものに追加)
#include "myclass.h"
マウスのクリックにより、MyClassのインスタンスを作成し、
そのメンバー関数think()を呼び出す。
------myclass.h内容----
クラスMyClassの宣言
------mycalss.cpp内容
#include "myclass.h"
#pragma unmanaged
クラスMyClassのメンバー関数の定義
メンバー関数think()からは直接・間接的にもMyClassのメンバー関数
しか呼ばない。また、その処理時間は秒単位でかかる。
0100デフォルトの名無しさん
2006/03/21(火) 23:41:39ならばmyclass.h内のMyClassの宣言とForm1.h内のthinkをアンマネージドに放り込んだらどうかと思う。
0101デフォルトの名無しさん
2006/03/23(木) 14:57:45下記二点を見直し、コンソールアプリケーションと同等のパフォーマンスになりました。
ありがとうございます。
(1) MyClassの宣言をアンマネージドにした。
#pragma unmanagedを#include"myclass.h"の前に持って来ました。当初こうしても
まったくunmanagedにならなかったのですが、プリコンパイル済みヘッダをやめる
ことでうまくいきました。
(2) Form1.h内でのアンマネージドの呼び出しをすべて、アンマネージドでの
グローバル関数経由としました。
どうも、一つのアンマネージドの関数をマネージドからとアンマネージドから
呼び出すと、アンマネージドからその関数の呼び出しが遅くなるようです。
(マネージドからの呼び出しはどこかにあるだけで、実際には呼び出さなくても
遅くなる)
いったいどういう仕組みなのかご存知の方はご教授ください。
0102デフォルトの名無しさん
2006/03/24(金) 02:19:22デザイナの読み込み時に、1つ以上のエラーが発生しました。
エラーは遺憾一覧表示されます。コードの変更の必要なエラーもありますが、
プロジェクトを再度ビルドすると解決できるエラーもあります。
C++ CodeDOM parser error: Line: 146, Column: 34 --- Unexpected token for a 'term'
コンパイルも正常、プログラムも走るんだけど、どうしたら直りますかか?
// comboBox1
//
this->comboBox1->DropDownWidth = 150;
array<Object^>^ objectArray = {
"hoge_1",
"hoge_2",
"hoge_3",
"hoge_4",
"hoge_5",
};
this->comboBox1->Items->AddRange( objectArray );
this->comboBox1->FormattingEnabled = true;
this->comboBox1->Location = System::Drawing::Point(144, 75);
this->comboBox1->Name = L"comboBox1";
this->comboBox1->Size = System::Drawing::Size(121, 20);
this->comboBox1->TabIndex = 7;
0103デフォルトの名無しさん
2006/03/24(金) 02:20:58×エラーは遺憾一覧表示〜
○エラーは以下に一覧表示〜
0104デフォルトの名無しさん
2006/03/24(金) 07:39:380105デフォルトの名無しさん
2006/03/24(金) 18:32:420106デフォルトの名無しさん
2006/03/24(金) 18:57:49予約語のこと?
0107デフォルトの名無しさん
2006/03/24(金) 19:10:22すみません、C++始めたばかりで良く分かりません。
命令(予約語ですか)一覧とそれを説明したサイトがあれば
学習しやすいかと思いまして。
0108デフォルトの名無しさん
2006/03/24(金) 19:15:19そもそも多分 C++/CLI じゃなくてただの C++ だろうから恐らくスレ違い。
そして命令一覧とかというと HSP 辺りから出てきた雰囲気。
0109デフォルトの名無しさん
2006/03/24(金) 19:19:39スレ違いすみません。前はBASIC使ってました。
0110デフォルトの名無しさん
2006/03/24(金) 19:23:340111デフォルトの名無しさん
2006/03/24(金) 19:52:15永遠に遺憾に思いつづけておけ。そして二度と来るな
0112デフォルトの名無しさん
2006/03/24(金) 20:04:23そういうお前も二度と来るな、いいな覚えておけ
0113デフォルトの名無しさん
2006/03/25(土) 03:31:500114デフォルトの名無しさん
2006/03/26(日) 10:22:10C++/CLIではSocket クラスを使うと思うのですが、どのメソッドを使ったら
よいのでしょうか?
0115デフォルトの名無しさん
2006/03/26(日) 10:39:110116デフォルトの名無しさん
2006/03/26(日) 18:04:07public void hoge(string foo)
こんなのがあったのですが、C++/CLI的に書くには
どうしたらイイデツカ
当然これは駄目でした
public void hoge(string^ foo)
0117デフォルトの名無しさん
2006/03/26(日) 19:47:320118デフォルトの名無しさん
2006/03/26(日) 19:54:090119デフォルトの名無しさん
2006/03/28(火) 13:19:04public:
void hoge(System::String^ foo)
アクセス指定は個々の宣言につけるものではなく、続く宣言に対して一括で指定する。
C++/CLIにstring型は無いから、System::Stringにする必要がある。
0120デフォルトの名無しさん
2006/03/31(金) 16:20:36どうしたらいいのでしょうか?
0121デフォルトの名無しさん
2006/03/31(金) 16:34:350122デフォルトの名無しさん
NGNGどこまでぐちゃぐちゃにしたらパーサが困るのか試してみようと
思ったんだが、結構耐えれるみたいなんだよな・・・
フォームデザイナ用っぽい #pragma とか重要そうだよな。
それはそうと、複数のフォームをフォームデザイナで作って、
複数のスレッドから
Application::Run(gcnew OreNoForm1);
Application::Run(gcnew OreNoForm2);
ってやってフォームを複数開くアプリケーションを作りたいんだけど、
こういうときって共通のデータはどうやって持つのがいいんだろう。
そして各フォームで発生したイベントのイベントハンドラから
そのデータをどうやっていじるのが便利なんだろう。
できるだけフォームデザイナが生成したコードはいじらずに。
具体的にはシミュレーションの入力値をリアルタイムでいじる
フォームと結果をリアルタイムで可視化するフォームを別に開く
アプリケーションを作りたい。まぁ典型的なMVCモデルなんですが。
0123デフォルトの名無しさん
2006/03/31(金) 18:55:32http://www.codeproject.com/managedcpp/CAutoNativePtr.asp
ネイティブオブジェクトへのポインタを保持して
マネージドコードの中でスマートポインタっぽく振る舞うような
ラッパーって、標準的なモノは用意されていないのでしょうか?
たとえば cli 名前空間とか msclr 名前空間の中にでも。
逆は gcroot, auto_gcroot なんかが用意されていますよね?
0124デフォルトの名無しさん
2006/03/31(金) 18:59:03http://weblogs.asp.net/kennykerr/archive/2005/07/12/419102.aspx
ここにも似たようなモノが
0125デフォルトの名無しさん
2006/03/31(金) 20:01:32>>120
>>122
の質問に座布団3枚
>>121は答えれもせずに
煽るだけ逝っていいよ、もうこないでね
0126120
2006/03/31(金) 22:48:39ありがとうございます。
System::Windows::Forms::Controlから派生したクラス変数でエラーが出ているみたいでした。
このクラスはFormと同じ名前空間にありますが、namespaceを省略せずに
グローバルスコープ演算子のないフルネームで宣言して初期化したら、エラーが消えました。
0127デフォルトの名無しさん
2006/04/13(木) 17:39:42フォーム間で共有するべきデータってどのように
保持するのが定番なんでしょうか?
0128デフォルトの名無しさん
2006/04/13(木) 17:40:25ネイティブのものもありますし、
マネージドなオブジェクトもあります。
0129デフォルトの名無しさん
2006/04/13(木) 18:24:100130デフォルトの名無しさん
2006/04/13(木) 18:34:00フォームデザイナが生成したフォームのクラスの
コンストラクタをいじってしまっていいんでしょうか?
フォームデザイナが生成したコードをいじると、
彼(彼女)が混乱をきたすのではないかと危惧しています。
以前いじりすぎて、「パースできん!」って怒られてしまい
泣く泣くフォームを作り直したことがあります。
0131デフォルトの名無しさん
2006/04/13(木) 18:37:33コンストラクタがイヤならプロパティにすれば?
0132デフォルトの名無しさん
2006/04/13(木) 19:17:100133デフォルトの名無しさん
2006/04/13(木) 19:43:48いや、ヤシはフォーム・デザイナが生成した、これは触るな、って書いてあるところを直接触って
パースできなくなったのを棚に上げて、ここ以下に修正してくださいと記述してあるコンストラクタを
いじって大丈夫か聞いてるんだ
不思議だろ?
0134デフォルトの名無しさん
2006/04/13(木) 19:49:52の中を弄ったんか…。
0135デフォルトの名無しさん
2006/04/14(金) 10:37:220136デフォルトの名無しさん
2006/04/14(金) 21:19:550137デフォルトの名無しさん
2006/04/14(金) 22:58:42TreeView や TreeNode 以外にあるの?
0138デフォルトの名無しさん
2006/04/15(土) 13:58:11コンソールでコンパイルしようとしているんですが、
フォームを作ろうと
System.Window.Forms
をusing namepaseするとWindows以下の名前空間が見つからないという
エラーが出ます。多分オプション辺りで決めるんでしょうが見当が付きません。
どなたかご存知ありませんか?
0139デフォルトの名無しさん
2006/04/15(土) 14:02:240141デフォルトの名無しさん
2006/04/15(土) 14:12:510142デフォルトの名無しさん
2006/04/15(土) 14:38:20dllを参照の追加に設定してないんじゃない?
0143デフォルトの名無しさん
2006/04/15(土) 14:41:44やはり#using指定がするだけでした。
0144デフォルトの名無しさん
2006/04/15(土) 19:09:33cppを間違えて消してしまい、
頑張って復元してみようと試みましたが、復元出来ませんでした。
ncb,vcproi,sln,objのどれかからcppを抽出できないでしょうか?
0145デフォルトの名無しさん
2006/04/15(土) 19:12:09復元するためのツール(Final Data とか)を使ってみても無理なら、
あきらめるしか有りません。世代バックアップの機能もVSに
入ってたらいいのに、なんて思うことは俺もあります。
あ、そういう人は Visual Source Safe を使うのか。
でも一人開発にはちょっとヘビーすぎる気もする。
かといって CVS は VS に統合されてないし。
0146デフォルトの名無しさん
2006/04/15(土) 19:13:29に含まれてましたっけ。含まれてたなら学校行ってインスコしようっと。
今は theSpoke Premium でもらった VS 2005 Professional 使ってます。
0147デフォルトの名無しさん
2006/04/15(土) 19:15:47Visual Studio 2005 Tools for the Microsoft Office System (Dec 2005)
Visual SourceSafe 2005 (Dec 2005)
も含まれているそうな。ひゃっほ。
しかし VS 2005 Professional VS 2005 Tools for the Microsoft Office System
って一緒にインスコできないのかな?CE 向けのアプリも作ってるけど、
同時に Outlook のプラグインも作りたくて。
0148デフォルトの名無しさん
2006/04/15(土) 19:26:04レスありがとうございます。
ああ、やっぱり無理ですかorz
0149デフォルトの名無しさん
2006/04/15(土) 19:37:150150初心者
2006/04/16(日) 05:53:020151デフォルトの名無しさん
2006/04/16(日) 08:23:13だいたいCLI ≒ CLR ≒ .Net Frameworkと思えばよい。
正確には、CLIは.Netのクラスライブラリの仕様を定めたものであり、CLIの一実装がCLRであり、
.Net FrameworkはCLRと.Netプログラムを動かすための基盤などが含まれていると言ったところ。
0152デフォルトの名無しさん
2006/04/16(日) 14:34:330153デフォルトの名無しさん
2006/04/16(日) 14:42:140154デフォルトの名無しさん
2006/04/26(水) 20:58:580155デフォルトの名無しさん
2006/04/26(水) 21:10:01が一番近いんじゃね
0156デフォルトの名無しさん
2006/04/26(水) 21:44:59VC8で現在編集中のファイルを別名で保存するには
どうしたらできますか
0157デフォルトの名無しさん
2006/04/26(水) 21:50:05ファイルをオープンしてるのか、排他してるのか、それによるんでね?
0158デフォルトの名無しさん
2006/04/26(水) 22:11:32http://pc7.2ch.net/pcqa/
0159デフォルトの名無しさん
2006/04/26(水) 22:11:39VS2005で現在編集中のファイルを別名で保存したいんですが
できるの?できないの?
0160デフォルトの名無しさん
2006/04/26(水) 22:14:20http://pc7.2ch.net/pcqa/
0161デフォルトの名無しさん
2006/04/26(水) 22:19:47馬鹿だなぁ。貧乏人はやってみることもできないのか?
ファイルのメニュー見れば出てくるだろ。これだからニート野郎は
0162デフォルトの名無しさん
2006/04/27(木) 00:41:010163デフォルトの名無しさん
2006/04/27(木) 22:53:27は自らを
頭の(・∀・)イイ!!
金持ちと大言しています、もっと自慢してください
0164デフォルトの名無しさん
2006/04/27(木) 23:09:21今、VC「8」って言った
, ,-;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ
/;:;:;:;:;:;:ミミ;:;:;:;:;:;:;:;:;:;`、 / ^ノ^ノ:^)
/;:;:;:;:彡―ー-、_;:;:;:;:;:;:;:;| / _ノ_ノ_ノ /)
|;:;:;:ノ、 `、;;:;:;:;:;:i / ノ ノノ//
|;:/_ヽ ,,,,,,,,,, |;:;:;:;:;:;! ____/ ______ ノ
| ' ゚ ''/ ┌。-、 |;:;:;:;:/ _.. r(" `ー" 、 ノ
|` ノ( ヽ ソ |ノ|/ _. -‐ '"´ l l-、 ゙ ノ
_,-ー| /_` ”' \ ノ __ . -‐ ' "´ l ヽ`ー''"ー'"
| : | )ヾ三ニヽ /ヽ ' "´/`゙ ーァ' "´ ‐'"´ ヽ、`ー /ノ
ヽ `、___,.-ー' | / / __.. -'-'"
| | \ / | l / . -‐ '"´
\ |___>< / ヽ
0165デフォルトの名無しさん
2006/04/29(土) 11:20:06http://dobon.net/vb/dotnet/form/openfiledialog.html
にあるC#のコードをC++に移植したいのですが
教えてください。
[C#]
//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog ofd = new OpenFileDialog();
//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
//OKボタンがクリックされたとき
//選択されたファイルを読み取り専用で開く
System.IO.Stream stream;
stream = ofd.OpenFile();
if (stream != null)
{
//内容を読み込み、表示する
System.IO.StreamReader sr =
new System.IO.StreamReader(stream);
Console.WriteLine(sr.ReadToEnd());
//閉じる
sr.Close();
stream.Close();
}
}
0166デフォルトの名無しさん
2006/04/29(土) 11:21:120167デフォルトの名無しさん
2006/04/29(土) 11:24:35MFC とか言ったりしないだろうな?
0168デフォルトの名無しさん
2006/04/29(土) 11:27:190169デフォルトの名無しさん
2006/04/29(土) 11:39:19よろしくお願いします
0170デフォルトの名無しさん
2006/04/29(土) 11:47:44丸投げされても困る。
0171デフォルトの名無しさん
2006/04/29(土) 12:09:45下記のコードのような感じだと思うのですが
System::IO.Stream stream;
の部分が良く分かりません
他にもエラーは出るのですがとりあえず
'System::IO::StreamReader' の宣言を確認してください。
となってしまいます
//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog^ ofd = gcnew OpenFileDialog();
//ダイアログを表示する
if (ofd->ShowDialog() == ::DialogResult::OK)
{
//OKボタンがクリックされたとき
//選択されたファイルを読み取り専用で開く
System::IO.Stream stream;
stream = ofd->OpenFile();
if (stream != nullptr)
{
//内容を読み込み、表示する
System::IO::StreamReader sr =
gcnew System::IO::StreamReader(stream);
Console::WriteLine(sr::ReadToEnd());
//閉じる
sr->Close();
stream->Close();
}
}
0172デフォルトの名無しさん
2006/04/29(土) 12:57:44・取りあえず参照型の宣言する型には ^ つけとけ
0173デフォルトの名無しさん
2006/04/30(日) 00:30:14ManagedC++とかから扱い始めないと苦しいことになる?
0174デフォルトの名無しさん
2006/04/30(日) 00:38:300175デフォルトの名無しさん
2006/04/30(日) 00:49:08CLI というか .NET に関しては C#/VB.NET のを参考にすることが多いだろうから読めたら便利
0176デフォルトの名無しさん
2006/04/30(日) 02:35:21LoadLibraryしたものを
FreeLibraryするとアボンヌしちゃうんだけどなんでだろう?
FreeLibraryしなくていいのかな...
0177デフォルトの名無しさん
2006/04/30(日) 02:37:440178デフォルトの名無しさん
2006/04/30(日) 03:50:49ありが�dm(__)m
CLIが.NETってこと?
それなら、わざわざC++/CLIをやりながら.NETをする必要がない気がする。
やっぱり英語の資料しか見つからない。
日本語でも莫大な資料を読むのは疲れるのに、英語となれば日本語に脳内変換しないといけないから余計に体力使う。
0179デフォルトの名無しさん
2006/04/30(日) 05:35:000180176
2006/04/30(日) 06:20:41でコンパイルするとやっぱりアボンヌしちゃうな。(Nativeだと大丈夫ぽい)
毎回アボンヌするわけじゃないんだけど、
記述の仕方によっては毎回なるのと、たまになるパターンがあった。
abone.dllでスレッド使ってるのが影響してるのかな?
struct abone_dll
{
HMODULE m_dll;
abone_dll(){m_dll = ::LoadLibraryA("abone.dll");}
~abone_dll(){::FreeLibrary(m_dll);}
};
int main(){ abone_dll dll;}
0181デフォルトの名無しさん
2006/04/30(日) 09:35:56自力で調べて構成する能力がないなら、Express をDLするか、金出して買え
開発環境に手を出すのは、ちゃんとコード組めるようになってからでいい
0182デフォルトの名無しさん
2006/04/30(日) 09:38:44ttp://signe.japan.webmatrixhosting.net/ecma372/08_overview.aspx
0183デフォルトの名無しさん
2006/04/30(日) 09:44:48http://support.microsoft.com/default.aspx?scid=kb%3Bja%3B813808
0184デフォルトの名無しさん
2006/04/30(日) 10:23:46その abone.dll の詳細を。
0185デフォルトの名無しさん
2006/05/05(金) 13:31:47System::Text::Encoding::GetEncoding("Shift_JIS"))
でOKなんだけど
ExcelのCSV形式の場合は何を使ったらいいのでしょうか?
UTF-8でも文字化けするのですが・・・
0186デフォルトの名無しさん
2006/05/05(金) 14:41:240187デフォルトの名無しさん
2006/05/05(金) 16:01:53駄目でした
0188デフォルトの名無しさん
2006/05/05(金) 18:01:48ふつうにエディタでコンマ区切りの日本語文字列作って Excel で開いたが、特に
文字化けしないぞ。コードが悪いんじゃねぇか?
0189デフォルトの名無しさん
2006/05/05(金) 20:22:42Default で別に文字化けしないだろ?
StreamWriter sw("Sample.csv", false, System::Text::Encoding::Default);
sw.WriteLine("あああ, いいい, ううう, えええ, おおお");
sw.Close();
まさか、文字列を別に変換して StreamWriter に渡したりしてないよな
0190デフォルトの名無しさん
2006/05/06(土) 11:06:02C#みたいにタグを自動で入力してくれるようにならない?
0191デフォルトの名無しさん
2006/05/06(土) 11:32:20サンプルなら CodeProject にある
0192デフォルトの名無しさん
2006/05/07(日) 11:44:02教えてください。おねがい。
0193デフォルトの名無しさん
2006/05/07(日) 11:49:220194デフォルトの名無しさん
2006/05/07(日) 11:52:43MSDNで探したら、即効見つかりました。
後で検索した人のために一応コピペでコードを。
property int default[int] {
int get(int index) {
return MyArr[index];
}
void set(int index, int value) {
MyArr[index] = value;
}
}
0195デフォルトの名無しさん
2006/05/07(日) 12:59:050196デフォルトの名無しさん
2006/05/07(日) 13:33:34abc\def\ghi
からghiを取り出したいのですが
0197デフォルトの名無しさん
2006/05/07(日) 13:44:38正規表現でとりだす
単語の区切りが \ のみ固定ならば LastIndexOf で Substring
後ろから自分で一文字ずつ見ていって Substring
0198デフォルトの名無しさん
2006/05/07(日) 14:57:21サンキュー簡単にできたよ
Substringって2番目の引数省略したらLastIndexOfからファイルの最後までを返すんだね
0199デフォルトの名無しさん
2006/05/07(日) 16:28:37今までC++Builderを使用していて、今度からVC++2005を使用します。
GUIアプリを作成を考えています。
フォーム上に配置したボタンのイベントが、全て.hファイルに作られてしまうのですが
処理内容も.hファイルに記述するのが普通なのでしょうか
0200デフォルトの名無しさん
2006/05/07(日) 16:37:540201デフォルトの名無しさん
2006/05/07(日) 17:08:110202デフォルトの名無しさん
2006/05/07(日) 18:02:450203デフォルトの名無しさん
2006/05/07(日) 19:37:22typedef の中身を知らずに、クラスの先行宣言て出来ないんでしょうか。
---
// コンパイルエラー
class CHoge;
class CTest;
typedef CHoge CTest;
---
// コンパイル出来る
class CHoge;
typedef CHoge CTest;
typedef CHoge CTest; // 2度目
---
単に別のヘッダファイルで typedef されているクラスの、ポインタを扱いたい
だけなので、 include を避けたい、というのが目的です。
winxp vc++2005
宜しくお願いします。
0204デフォルトの名無しさん
2006/05/07(日) 20:15:36class CTest; で型名を宣言しているのに、同名の型名をさらに typedef すりゃ当然エラーでしょ
typedef で別の名前にするか、namespace でくるんだら?
0205デフォルトの名無しさん
2006/05/07(日) 21:24:01Stringのメッソッドは沢山あるから、調べれば変換する必要ないかもしれないけど
String^hoge = "abcdef";
//↓これはOKで
array<Char>^foo = file->ToCharArray();
//↓これはなんでNGなんだろう?
char[] foo = hoge->ToChaArray();
0206デフォルトの名無しさん
2006/05/07(日) 21:29:59.NET の配列と C の配列が全く別物だから
System::Text::Encoding::GetBytes で array<System::Byte>^ 経由でコピーするか、
System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi でも使え。
0207デフォルトの名無しさん
2006/05/07(日) 22:29:33arrayからはコピーせずpin_ptrで固定してそのまま使うほうが効率的だと思う。
0208デフォルトの名無しさん
2006/05/07(日) 22:31:06System::Charはwchar_t相当。
wchar_tの文字列でよければPtrToStringCharsをpin_ptrで固定すればよい。
0209デフォルトの名無しさん
2006/05/07(日) 23:59:52>>208の言ってるのはこういうこと?↓
String ^str = "Hello";
// Pin memory so GC can't move it while native function is called
pin_ptr<const wchar_t> wch = PtrToStringChars(str);
>>206の書いてる2つの方法も見て見たいが、多い浮かばん・・・・・
0210デフォルトの名無しさん
2006/05/08(月) 00:27:52キーワードでググれよ
0211デフォルトの名無しさん
2006/05/08(月) 01:41:38誰もframeworkなんて持ってないのにさ
0212デフォルトの名無しさん
2006/05/08(月) 07:05:40そういうこと。
wchはconst wchar_t*として使える。
ただstd::ostreamに出力するときにはstatic_castが必要だったけど。
0213デフォルトの名無しさん
2006/05/11(木) 19:58:51SuspendとResumeの機能の代用はどうしますか?
定石があったら教えてください。お願いします。
0214デフォルトの名無しさん
2006/05/11(木) 20:03:230215デフォルトの名無しさん
2006/05/11(木) 20:25:24スレッドであるフラグを監視し、Thread.Sleep(Infinite) を実行し、
Thread.Interrupt で sleepを抜け出し、ThreadInterruptedException
をキャッチし、スレッドをそのまま再開させる方法。
2つ目
セマフォか、クリィティカルセッションを使用して停止と再開を行う
コードを書く。
の方法しかないの?
0216デフォルトの名無しさん
2006/05/11(木) 22:00:370217デフォルトの名無しさん
2006/05/11(木) 22:33:44自分がつくるどんなプログラムでも使えないので、
なにか名前空間に書くのかなと思ったのですが、いったいどうしたらよいのでしょう。
そのほかにも、string型の変数の宣言ができなかったりするので、string関係全てがダメなようなのですが・・。
0218デフォルトの名無しさん
2006/05/11(木) 22:40:53だったりしないか?
String^
だったりしないか?
0219デフォルトの名無しさん
2006/05/11(木) 22:42:50textBox1->Text = test.ToString;
このような感じでやっているのですがだめなのでしょうか・・・
0220デフォルトの名無しさん
2006/05/11(木) 22:55:10なんで、textBox1->Text なのに、代入する側は test.ToString() なんだよ
0221217
2006/05/11(木) 22:55:41ToStringの後に()を付け忘れていました!!いやはやこれだけだったとは・・・
みなさん本当にありがとうございました。
0223デフォルトの名無しさん
2006/05/13(土) 21:05:45インクルードするヘッダとか、listview1で変更するプロパティ等があれば教えてください。
0224デフォルトの名無しさん
2006/05/13(土) 21:13:340225デフォルトの名無しさん
2006/05/13(土) 21:25:48↓こう書きましたがエラーが出ます
ListView_SetExtendedListViewStyle( m_listctrl.m_hWnd, LVS_EX_FULLROWSELECT );
: error C2065: 'm_listctrl' : 定義されていない識別子です。
: error C2228: '.m_hWnd' の左側はクラス、構造体、共用体でなければなりません型は'unknown-type' です。
: error C2065: 'LVS_EX_FULLROWSELECT' : 定義されていない識別子です。
: error C3861: 'ListView_SetExtendedListViewStyle': 識別子が見つかりませんでした
0226デフォルトの名無しさん
2006/05/13(土) 21:35:20それC++/CLI関係ないだろ。
0227デフォルトの名無しさん
2006/05/13(土) 21:39:29C++/CLIとは全然関係ないですね。それはともかく、そもそも、m_listctrl メンバが存在していないのに
Win32 の拡張スタイル指定をしても無駄です
0228デフォルトの名無しさん
2006/05/13(土) 21:53:46「リストビュー 拡張スタイル VC++」で
ググッテもでてこないんだよな的確なやつが
リストビューの拡張クラス教えて下さい
0229デフォルトの名無しさん
2006/05/13(土) 22:00:01ウィンドウハンドルに対して、ListView_SetExtendedListViewStyle でいいのですけど
あなたはまず、適切な ListView のウィンドウ・ハンドルを取得するところが間違って
いるんです
0230デフォルトの名無しさん
2006/05/13(土) 22:19:24void ListView_SetExtendedListViewStyle(
HWND hwndLV,
DWORD dwExStyle
);
Parameters
hwndLV
Handle to the list-view control that will receive the style change.
dwExStyle
DWORD value that specifies the extended list-view control style. This parameter can be a combination of extended styles.
(´ε`;)ウーン…わからん
0231デフォルトの名無しさん
2006/05/13(土) 23:26:40ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_198.htm
これでも読んで、それでもわからなければ、こっち
ttp://pc8.2ch.net/test/read.cgi/tech/1147183708/
で聞いてください
0232デフォルトの名無しさん
2006/05/14(日) 11:26:20これはやはり自分で書き換えていくしかないのか?
自動でやってくれる変換ツールなんてものはないのか?
0233デフォルトの名無しさん
2006/05/14(日) 20:56:060234デフォルトの名無しさん
2006/05/18(木) 22:44:13TcpClient.Client でメール送信を行う場合
文字セットの形はUTF-8なのでしょうか?
message->Body = Message;
で送信したテキストをOutlookExpressで受信した場合は良いのですが
携帯(Docomo)でだと文字化けしています
0235デフォルトの名無しさん
2006/05/18(木) 22:48:03MailMessage に BodyEncoding があるだろ
0236デフォルトの名無しさん
2006/05/18(木) 22:53:10http://rfc.net/rfc2821.html
0237デフォルトの名無しさん
2006/05/19(金) 21:21:00適当に宣言
}
System::Net::Mail::MailMessage' : クラスはコピー コンストラクタを含んでいません
構造体の引数が足らないって事?
0238デフォルトの名無しさん
2006/05/19(金) 21:35:34gcnew で取得できるのはハンドルなので ^ が必要。
0239デフォルトの名無しさん
2006/05/20(土) 01:20:030240デフォルトの名無しさん
2006/05/20(土) 02:02:47つ Essential .NET
つ プログラミング C# 言語解説
つ C++/CLI 言語仕様書
0241デフォルトの名無しさん
2006/05/20(土) 09:55:06スマソ
お主の言う通りじゃ
拙者以前MailMessageクラスでメーラ作っていたの忘れておった
0242デフォルトの名無しさん
2006/05/20(土) 14:53:11C++/CLIって敷居が高いんですね。
入門学習に仕様書や他の言語の上級者向けの本を読まなくちゃいけないなんて。
0243デフォルトの名無しさん
2006/05/20(土) 14:59:57単に参考にする本や情報がないだけ
おまいさんが入門書やサイトを作ってくれれば、このスレの神になれるよ
0244デフォルトの名無しさん
2006/05/21(日) 00:46:26内のdllをインポートしようとしたら
#import "C:\WINNT\system32\foo.dll"
error C2812: #import は /clr:pure および /clr:safe でサポートされていません
リンカの設定を混在にしても駄目だった
どうしたらいい?
0245デフォルトの名無しさん
2006/05/21(日) 00:53:21プロジェクトのプロパティの構成プロパティの全般の共通言語ランタイムサポートを/clrにするのではないかと思う。
0246デフォルトの名無しさん
2006/05/21(日) 01:11:25対応する lib を使うか、参照で取り込んだら?
0247デフォルトの名無しさん
2006/05/21(日) 16:33:17レジストリの値を取得してファイルに書き込みたいのですが
GUIDというものを知りました、調べたら
「UUIDを16進数32桁の文字列形式で表現する標準的な方法を定め、これをGUIDと呼んでいる。」とあり、下記の様に書いて見ました
StreamWriter^ sw = gcnew ("C:\\foo.txt", false,System::Text::Encoding::GetEncoding("Shift_JIS"));
省略
sw->Write(Conver::ToString(typeGUID,16));
ここで
error C2653: 'Convert' : 識別子がクラス名でも名前空間名でもありません。
error C3861: 'ToString': 識別子が見つかりませんでした
となってしまいます、お助けください。
0248デフォルトの名無しさん
2006/05/21(日) 16:43:15を宣言してないのなら、完全限定名 System::Convert を使わないと駄目
0249デフォルトの名無しさん
2006/05/21(日) 17:09:31何をしようとしているのか謎だけどレジストリを触るなら
つ Microsoft.Win32.Registry
0250デフォルトの名無しさん
2006/05/21(日) 22:24:23246です
sw->Write(System::Convert::ToString(typeGUID,16));
としたら
error C2665: 'System::Convert::ToString' : 37 オーバーロードのどれも、すべての引数の型を変換できませんでした
c:\winnt\microsoft.net\framework\v2.0.50727\mscorlib.dll: 'System::String ^System::Convert::ToString(System::Object ^,System::IFormatProvider ^)' の可能性があります。
c:\winnt\microsoft.net\framework\v2.0.50727\mscorlib.dll: または 'System::String ^System::Convert::ToString(bool,System::IFormatProvider ^)'
省略(約20のエラーMess)
c:\winnt\microsoft.net\framework\v2.0.50727\mscorlib.dll: または 'System::String ^System::Convert::ToString(int,int)'
c:\winnt\microsoft.net\framework\v2.0.50727\mscorlib.dll: または 'System::String ^System::Convert::ToString(__int64,int)'
引数リスト '(GUID, int)' を一致させようとしているとき
どうしたものでしょう?
0251デフォルトの名無しさん
2006/05/21(日) 22:31:13その Guid は System::Guid オブジェクトなのか、ネイティブの GUID 構造体なのかどっちだ?
前者ならインスタンスの ToString メソッド使えばいい話だが。
0252デフォルトの名無しさん
2006/05/21(日) 23:32:450253デフォルトの名無しさん
2006/05/21(日) 23:37:360254デフォルトの名無しさん
2006/05/21(日) 23:43:20Cなら
printf("typeGUID = %.8x\n",typeGUID);
これで終わることなのですが、はまっています
0255デフォルトの名無しさん
2006/05/21(日) 23:54:39printf("#s\n", typeGUID.ToString());
でいけるはずだが
0256デフォルトの名無しさん
2006/05/21(日) 23:56:04sw->Write(typeGUID.ToString());
で、済むと思うが、MSDN ちゃんと見てるか?
0257デフォルトの名無しさん
2006/05/22(月) 19:42:10>>256
いまだに解決できていません
printf("#s\n", typeGUID.ToString());
error C2819: クラス '_GUID' にはオーバーロードされたメンバ 'operator ->' がありません。
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\guiddef.h(22) : '_GUID' の宣言を確認してください。
代わりに '.' を使用しますか?
error C2039: 'ToString' : '_GUID' のメンバではありません。
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\guiddef.h(22) : '_GUID' の宣言を確認してください。
error C2039: 'ToString' : '_GUID' のメンバではありません。
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\guiddef.h(22) : '_GUID' の宣言を確認してください。
_GUIDを見ると、このように定義付けられています。
#ifndef GUID_DEFINED
#define GUID_DEFINED
#if defined(__midl)
typedef struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
byte Data4[ 8 ];
} GUID;
#else
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
#endif
#endif
0258デフォルトの名無しさん
2006/05/22(月) 19:44:11上記のエラーコードはこう書いた時の場合です
sw->Write(typeGUID.ToString());
0259デフォルトの名無しさん
2006/05/22(月) 20:07:26昔のやり方が好きなら、sprintf でも使えばいいんじゃない?
そうすれば、String^ のコンストラクタには SByte* 引数に取るのもあるし。
0260デフォルトの名無しさん
2006/05/22(月) 20:34:29これは読んだか?
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_vccore/html/022c934c-3395-4f04-b498-85ad9bf8c646.htm
0261デフォルトの名無しさん
2006/05/22(月) 20:56:05なんで System::Guid を使わないんだか不思議なんだが。
0262デフォルトの名無しさん
2006/05/22(月) 21:18:46今はじめて読んだなんか難しそうだな
引数に
GUID ng = {0x11111111,0x2222,0x3333,0x44,0x55,0x55,0x55,0x55,0x55,0x55,0x55};
Guid mg;
を渡しているようだが、おいらの場合は何を渡していいかわからんし・・・
>>261
System::Guidを使ったら幸せになれるかな?
0263デフォルトの名無しさん
2006/05/22(月) 21:48:27幸せになれるかどうかは知ったことではないが、適当なGUIDを生成して書き出したいだけならこれだけだぞ。
System::Guid guid = System::Guid::NewGuid();
System::Console::WriteLine(guid);
0264デフォルトの名無しさん
2006/05/22(月) 23:02:31>>262
そのngの中身は適当。深い意味は無い。
単にSystem::Guidと::_GUIDとを変換する関数を使用する例。
0265デフォルトの名無しさん
2006/05/22(月) 23:23:42少し幸せになれそうでしたが、やっぱり問題があります
GUID typeGUID;
while(spEnumTypes->raw_Next(1,&typeGUID,0) == S_OK){
printf("typeGUID = %.8x\n",typeGUID);
System::Guid guid = System::Guid::NewGuid();
System::Console::WriteLine(guid);
}
と出力すると下記の様にtypeGUIDとGUID(System::Console::WriteLine(guid);)の値が異なります
ためしに
System::Console::WriteLine("{0,x8}",guid);
としたら例外エラーが出ます。
typeGUID = 14d96c20
9e65796a-875c-48a7-ac87-bad43680de8e
typeGUID = 220d5cc1
29109995-ac32-4108-9f87-dac14251c3a8
typeGUID = 5e7e8100
f3750553-a6a2-4307-a940-3d1684f14236
typeGUID = 89c39569
e3f1b21b-7a29-4c9c-872c-07629453f52f
typeGUID = e161255a
8f6f3791-1e05-42b4-9d1f-5d821c472a82
0266デフォルトの名無しさん
2006/05/22(月) 23:37:50例外エラーだって、出力フォーマットの問題だろ?
>260 のMSDNに載っているようにやればいいじゃないか
せっかく、ToGuid や FromGuid っていう相互変換サンプルが記述されているのに
typeGUID を取得したら、
Guid mg = FromGUID( ng );
として、それを
Console::WriteLine("{0}", mg);
としてやればいいだろ
0267デフォルトの名無しさん
2006/05/22(月) 23:38:34それじゃマネージドのことはすべて忘れてネイティブの世界でかってにやってくれ。
0268デフォルトの名無しさん
2006/05/22(月) 23:39:24Guid mg = FromGUID( typeGUID );
だな
0269デフォルトの名無しさん
2006/05/22(月) 23:43:060270デフォルトの名無しさん
2006/05/22(月) 23:55:31なかったのか? だから、>249 を示したんだが、華麗にスルーされてるし
0271デフォルトの名無しさん
2006/05/23(火) 00:19:240272デフォルトの名無しさん
2006/05/23(火) 00:21:460273デフォルトの名無しさん
2006/05/23(火) 00:28:050274デフォルトの名無しさん
2006/05/23(火) 21:00:59>>268よろしく
Guid mg = FromGUID( typeGUID );
としたら
error C3861: 'FromGUID': 識別子が見つかりませんでした
となるのですが
0275デフォルトの名無しさん
2006/05/23(火) 22:28:18いや、だから、それは >260 の MSDN のサンプルに相互の変換関数として定義されていると
書いてあるだろ
0276デフォルトの名無しさん
2006/05/24(水) 08:28:220277デフォルトの名無しさん
2006/05/24(水) 08:49:540278デフォルトの名無しさん
2006/05/24(水) 08:53:31サンクスコ
0279デフォルトの名無しさん
2006/05/24(水) 09:58:11C++/CLIのアプリにリンクすることは可能?
0280デフォルトの名無しさん
2006/05/24(水) 10:03:37アセンブリ化されていれば可能
0281デフォルトの名無しさん
2006/05/24(水) 10:18:05できるんでしょうか?(サーバなしで)
0282デフォルトの名無しさん
2006/05/24(水) 10:21:090283デフォルトの名無しさん
2006/05/25(木) 22:23:17C++/CLIもやってみたら、
ILDASMで覗いたら、クラス/構造体のメンバでない関数が、いきなり
関数が定義されているんだけど・・・。
いいのか、これ!?
0284283
2006/05/25(木) 22:24:250285デフォルトの名無しさん
2006/05/25(木) 22:29:43C#/VB 的に駄目なだけで。
0286デフォルトの名無しさん
2006/05/25(木) 23:13:270287デフォルトの名無しさん
2006/05/25(木) 23:26:590288デフォルトの名無しさん
2006/05/25(木) 23:31:280289デフォルトの名無しさん
2006/05/26(金) 20:14:52へぇ〜。
C#,VBでグローバル関数が宣言できないのは、「オブジェクト指向で書きやがれ、ゴルァ」ってことなのかな
0290デフォルトの名無しさん
2006/05/26(金) 21:03:590291デフォルトの名無しさん
2006/05/27(土) 10:21:04274です、おそくなりました、やっとお礼が書けます
>260のMSDNのサンプルって
GUIDと_GUIDを変換して戻り値としてその構造体のポインタを返すという
内容なんですよね?
C言語の基本でしたスマン
0292デフォルトの名無しさん
2006/05/27(土) 11:18:39構造体ではなく、構造体の値そのものを返している。
0293デフォルトの名無しさん
2006/05/27(土) 12:32:06読んでみたら、いい感じなのな。VB並みに冗長なのはちょっとあれだけど、
C#よりこっちのほうがいいような。
0294デフォルトの名無しさん
2006/05/27(土) 16:04:46雑誌なので内容は浅薄なのは否めないけれど、こと活字によるVS8の
情報に飢えているだけに貴重な一冊えある
MSDNでいつ読んでも意味が分からなかった
propertyが理解できたが、実際どのような場面で
アクセサ・メソッドを使うのかまた、疑問が一つふえた
・゚・(ノ∀`)・゚・。藁
0295デフォルトの名無しさん
2006/05/27(土) 16:15:10メソッドの呼び出しを強要できる点。
変数っぽくアクセスできるけど、実態はメソッドの呼び出しだから。
0296デフォルトの名無しさん
2006/05/27(土) 18:54:09Console::WriteLine("{0,4}",foo);
これで合ってますか?
0297デフォルトの名無しさん
2006/05/27(土) 18:56:380298デフォルトの名無しさん
2006/06/03(土) 07:57:00プリコンパイル済みヘッダ無しだと普通にmainがエントリポイント
プリコンパイル済みヘッダを入れるとエントリポイントが_tmain
32apiだとWINAPI WinMain
で、C++/CLIだとまた変わるんですか?
C++/CLIは専用の書籍とか出てるんですか?
32apiやCやC++ならわかるんですがC++/CLIってさわったことが無い
というか、知識が無いのでコードの書き方すら知りません。
どなたかこの超初心者の質問に、しぶしぶお答え願えないでしょうか
0299デフォルトの名無しさん
2006/06/03(土) 08:17:17プリコンパイルドヘッダをインクルードすると_tmainになるでは無く、
<tchar.h>をインクルードすると、_tmainを使うことになる。
VC++のウィザードでプリコンパイルドヘッダを使うようにするともれなく、
stdafx.hの中に<tchar.h>のインクルードが記述されるというだけ。
mainから始めたければstdafx.hの中に<tchar.h>のインクルードを削除すればよい。
0300298
2006/06/03(土) 08:48:26いっつもwin32アプリケーションウィーザードで
windowsアプリならかってにプリコンパイル済みにチェックついて
特にファイルがすでに何か存在するわけでも無いので
新規追加のソース用ファイルでWINAPI WinMainからはじめるし
コンソールなら必ずプリコンパイル済みヘッダーのチェックはずして
mainから初めてたので初めて知った。
<tchar.h>って憶するにUNICODE用なのかな
つかったことねーからわっかんねーや
0301デフォルトの名無しさん
2006/06/03(土) 09:31:26_tmainがmainに置き換わったりwmainに置き換わったりするのよ。
ttp://msdn2.microsoft.com/ja-jp/library/c426s321.aspx
0302298
2006/06/03(土) 16:12:23なるほど、リンク先のmsdn見ると
文字コードを自分で#defineで定義して
使い分けするためのものなんだ。
既定でマルチバイトか。
<tchar.h>は上手く使わないと、文字コード
が煩雑になっちまいそうだな。
あと、流し読みですがmsdn見てるとGCを使ってるようで
その他にも制約等があるんですね。
こりゃ普通のC++とはいかなそうで。
C/C++でwin32APIつかって、ウィンドウズのプログラム打てたとしても
(ウィンドウズ用でなくてもコンソール用でも)
C++/CLIでソースを書いていく上では、まったく別物ととらえるべきなんでしょうか。
ところで、C++/CLIの専門書籍って出てるんですか?
それともMSDNでなんとかするしかないんすかね。
なんか俺の質問内容見てるとくずたれその物の質問だな。
めんどくさいとお思いでしょうが、どなたか教えて頂きたいです。
0303デフォルトの名無しさん
2006/06/03(土) 16:44:53C++/CLIは.NETが関係しない部分は従来のC++として扱える。(そうなるように作られている)
0304デフォルトの名無しさん
2006/06/08(木) 20:45:07マネージドのコレクションでアンマネージドのポインタを保持する方法がわかりません。
やりたいのはこんな感じです。
System::Collections::Generic::KeyValuePair< UnManagedObject*, System::Windows::Forms::TreeNode^ > TreeNodePair;
どなたかご教授いただけませんか?
よろしくお願いします!!
0305デフォルトの名無しさん
2006/06/08(木) 21:01:18ManagedCollectionに入れるんならManagedにするためのWrapper書かないとだめじゃない?
ttp://www.codeproject.com/managedcpp/CAutoNativePtr.asp
0306デフォルトの名無しさん
2006/06/08(木) 21:09:20IntPtr に入れちゃうとか
0307デフォルトの名無しさん
2006/06/09(金) 11:44:39305のwrapperクラス便利ですね。勉強になりました!
306さんもありがとうございます!!
0308デフォルトの名無しさん
2006/06/13(火) 16:11:07発声のピッチとボリュームを変化させたく思っているのですが…。
using namespace SpeechLib;
---------------------------
private: SpVoiceClass^ obj_SVC;
---------------------------
//再生ボタンを押したとき
String^ text = text_speak->Text;//テキストボックスの内容をtextストリームへ保存
obj_SVC->Speak(text,SpeechVoiceSpeakFlags::SVSFlagsAsync);//発声
//トラックバー(ピッチ)
obj_SVC->SetRate((unsigned short)this->tone_level->Value);
-------------------------
みたいな感じで書いています。
ツールで配置した再生ボタンとトラックバーについて、同じobj_SVCが使えるのでしょうか・・・・
コンパイルは通りますが、実際中身が入っていないようで・・・
どうしたらクラスを超えてobj_SVCを共有できるのでしょうか
0309298
2006/06/14(水) 04:12:54>>303さん
レスありがとうございます
0310308
2006/06/14(水) 06:25:14に移動しました。
お騒がせしてスイマセンでした。
0311デフォルトの名無しさん
2006/06/14(水) 20:02:33要素数不明のクラス配列をforでまわさないといけないんですが,
その場合の要素数取得の方法が分かりません.
sizeof()はマネージ型には適応できないといわれます...
どなたか教えていただけませんか?
0312デフォルトの名無しさん
2006/06/14(水) 20:04:51CLI では配列もオブジェクトだぜ
0313デフォルトの名無しさん
2006/06/14(水) 20:17:55EqualsやGetTypeが追加されているのは知っているのですが,
Length へのアクセスってどうやるのでしょうか?
public __gc class B {
public:
A __gc* a[]; //AはBと同じような形のクラス.
};
b->a->Length();
ではできませんでした.
こういう形のときにa[]の要素を知りたいのです
申し訳ありませんが,もうすこしお願いします.
0314デフォルトの名無しさん
2006/06/14(水) 20:22:490316デフォルトの名無しさん
2006/06/14(水) 20:38:41そりゃ Length はメソッドじゃないもんな。
->Length か ->get_Length() を使わないと。
0317デフォルトの名無しさん
2006/06/14(水) 20:46:36>>316
エラーというか...
その要素を持っていないようです.
public:
Equals(), GetHashCode(), GetType(), ReferenceEquals(), ToString()
protected: // と思われる.
MemberwiseClone(), Finalize(),
先ほどの式で
b->a->としたときに出る候補は以上です.
ちなみに b->a. は要素が出ませんでした.
0318デフォルトの名無しさん
2006/06/14(水) 21:02:02#using <mscorlib.dll>
public __gc class A {
};
public __gc class B {
public :
A __gc* a[];
// A* a __gc[]; // Managed C++ 的にはこっちの方が相応しい希ガス
};
int main() {
B* b = __gc new B();
b->a = __gc new A* __gc[23];
System::Console::WriteLine(b->a->Length);
}
0319311
2006/06/14(水) 21:26:53参照するクラスを書いたヘッダファイルを間違えていました.
別フォルダの以前のヘッダを参照していたみたいで(当時は配列にしていない)
それでうまく言っていなかったみたいです..
本当にご迷惑おかけしました.
0320デフォルトの名無しさん
2006/06/16(金) 00:02:36でも2003はインテリセンスがうまく働かないよね
0321デフォルトの名無しさん
2006/06/22(木) 19:41:03#include <iostream>
using namespace std;
を書いて、コンパイルすると
\microsoft visual studio 8\vc\include\cstdlib(21) : error C2143: 構文エラー : '{' が ':' の前にありません。
と、言うようなエラーが100個以上出てきてコンパイルが通りません。
どうすればいいのでしょうか?
0322321
2006/06/22(木) 19:46:11cppになってませんでした。ご迷惑おかけしました。
0323デフォルトの名無しさん
2006/06/30(金) 23:41:02TextOut関数とCreateFontで文字出力にチャレンジしたところ、文字の背景に対する引数がないことに気がつきました。
背景を設定できる文字出力関数はどういうものがありますか?
0324デフォルトの名無しさん
2006/07/01(土) 07:33:55TextOutの前にSetBkColorを呼ぶと、TextOutするときの背景色を指定できる。
0325323
2006/07/01(土) 23:34:04ありがとうございます、できました
0326デフォルトの名無しさん
2006/07/02(日) 03:16:320327デフォルトの名無しさん
2006/07/02(日) 08:31:231. 既存の資産を.NETへ持っていける。
2. .NETは便利そうだ。でもC++はそれ以上にやめられない。(俺)
0328デフォルトの名無しさん
2006/07/04(火) 11:09:21その固定が解けるのは pin_ptr<> がスコープからはずれて
消滅したタイミング?
あと、わざと固定化せずにランタイムエラーが出るような
コードを作って実験してみたいんだけど、どうすればいいですか?
0329デフォルトの名無しさん
2006/07/04(火) 12:07:58ノートンシステムワークスを併用している人から、プログラムが死ぬと連絡がきた。
調べてみると、プログラム起動中に、ノートンシステムワークスのクリーンアップを実行(by スケジューラ)すると、
一時フォルダ下の全ファイルが消されてしまい、プログラムはデータを失ってクラッシュした。
Windowsのディスククリーンアップなら、数日以内に作成されたファイルは消さないので問題は起きない。
一時ファイルをopenしっぱなしにしておけば、ノートンも消さない(消せない)ようだが、大量に一時ファイルを作るので、
ファイルハンドル数を食いつぶすのは避けたい。
何か良い回避方法があれば教えてください。
0330デフォルトの名無しさん
2006/07/04(火) 12:19:210331デフォルトの名無しさん
2006/07/04(火) 13:04:170332デフォルトの名無しさん
2006/07/06(木) 10:01:510333デフォルトの名無しさん
2006/07/06(木) 18:33:43whereはあるよ。C#と比べ文法は違うけどね。
http://msdn2.microsoft.com/en-us/library/a174071k.aspx
0334332
2006/07/07(金) 23:24:20ありがとう。C++ はそれなりに経験あるんだが、C++/CLI はまだ勝手がわからなくて。
昨日は、template のほかに generic ってキーワードがあることに気がつかず、
半日無駄にしてしまったよ・・・orz
0335デフォルトの名無しさん
2006/07/08(土) 11:58:41ハンガリアン記法が非推奨なのは知ってますが、
スコープ位は区別したいんですが。
0336デフォルトの名無しさん
2006/07/08(土) 12:58:360337デフォルトの名無しさん
2006/07/08(土) 13:10:12http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp
.net としてのガイドライン
0338335
2006/07/08(土) 16:21:22参考になったよ。ありがとう。
>>336
う〜ん、そんな感じですね。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnamingguidelines.asp
読んでも、公開されない部分についてはとくに記述がないみたい・・・。
Delphi と Ruby 歴が長いんで、スコープがわからないのはちょっと抵抗があるけど、
「定義へ移動」があるから、必要ないって立場なのかなぁ。MSとしては。
慣れるしかないか。
0339デフォルトの名無しさん
2006/07/10(月) 00:05:06実装したいと思ってます。
Windows::Forms::Form を Xml にシリアライズするサンプルって
どこかにないでしょうか?
0340デフォルトの名無しさん
2006/07/10(月) 16:02:49public:
event ThreaderDele^ OnThreader;//をつくって
void TThreadTimer::Threader()
{
while (f_bTerminator)
{
Thread::Sleep(10000);
if (!(OnThreader == nullptr)) { OnThreader(); }
}
f_Thread->Abort();
}
上記のようなEventを作成したいのですが「error C3918: 使用するには、'OnThreader' がデータ メンバでなければなりません」っと
0341>>340
2006/07/10(月) 16:03:48この場合どう記述すればErrorがなくなるのでしょうか?
0342デフォルトの名無しさん
2006/07/10(月) 17:52:07じゃなかったっけ?
0343デフォルトの名無しさん
2006/07/10(月) 21:23:43NULL チェックしちゃ駄目。OnThreader はデリゲートインスタンスではないから。
// C# の呼び出し側に null チェックさせる仕様もいい加減やめて欲しいな……。
0344デフォルトの名無しさん
2006/07/19(水) 17:22:57public value class A{...};
Void Sub(){
try{
A^ vcA = gcnew A(); // 値クラスをマネージヒープ上に確保?
...
//delete vcA; // 必要でしょうか?
} // try
catch(...){
} // catch
}
int main(array<String^>^ astrArgs){
Sub();
...
return 0;
}
VisualStudio2005(C++/CLR)での参照クラスと値クラスで混乱しています。上記のように
値クラスをマネージヒープ上に確保しているように見えるコードを書いても、↓によると
ttp://forums.microsoft.com/msdn-ja/ShowPost.aspx?PostID=395212&SiteId=7
実際には、値クラスはスタックに確保されているという情報を得ました。ここで疑問なの
ですが、gcnewを使って確保した値クラスのインスタンスはガーベージコレクトされないの
でしょうか?、またされない場合はコメントアウトのコードの様にdeleteで解放すれば良い
のでしょうか?。ご教示の程よろしくお願いします
0345デフォルトの名無しさん
2006/07/19(水) 18:00:30それのどこを読んでいるんだ?こう書いてあるだろ。
----
ちがいます。
Int32^ a = gcnew Int32(10);
gcnewをつかえばスタック上に作成し、その値をボクシングした値を取得することができます。
----
ボクシングってのはマネ−ジヒープに新たなオブジェクトを作って、
そこへボクシング元のオブジェクトをコピーすること。
ようするにマネージヒープ上に値型のオブジェクトは存在しうる。
そしてそれはマネージヒープだからGCの対象。
特に必要でない限り、deleteしなくてよい。
0346デフォルトの名無しさん
2006/07/20(木) 01:00:40タイマーどこだーーーーー。むきぃーーーーーーー。
0347デフォルトの名無しさん
2006/07/20(木) 01:05:20クラス数だけで何千何万の世界だぜ
0348デフォルトの名無しさん
2006/07/20(木) 01:53:220349デフォルトの名無しさん
2006/07/20(木) 03:18:24今日からCをはじめよめた者です
猫でもわかる〜と言う本を買ってそれで学ぼうと思ったのですが・・・。
いきなり大きな障害が C++Builder 5を使おうと思っているのですか
うまく動いてくれないんです メモ帳で
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
これを.cで保存してコマンドプロントで実行したら
HelloWorld
と出るはずなのですが
Borlanb C++ 5.5.1 for win32 Copyright (c) 1933,2000 Borland
HelloWorld.c;
Turbo Incremental Link 5.00 Copyright (c) 1997,2000 Borland
C:\work>
と出るのです
これは何が悪いのでしょうか? 助言よろしくお願いします
0350デフォルトの名無しさん
2006/07/20(木) 04:44:53つ 【初心者歓迎】C/C++室 Ver.29【環境依存OK】
0351デフォルトの名無しさん
2006/07/20(木) 08:30:38理解できました。ありがとう
「ボクシング」ってそういう意味だったんだね
0352348
2006/07/20(木) 10:52:490353デフォルトの名無しさん
2006/07/20(木) 11:01:24http://dobon.net/vb/dotnet/graphics/hadeinimage.html
こういうのでできるけど、System.Drawingは遅くてゲームには向かないよ
ManagedDirectXとか使ったほうがいい
0354デフォルトの名無しさん
2006/07/20(木) 11:13:31レスさんきゅー。
プロトタイプ製作なので、速度はあんまり考慮してないんです。
Graphics::DrawImageは軽く使ってみたけど、
任意の画像幅に拡大縮小されちゃうみたいで、
期待していた効果とはちょっと違うなー。と。
BitBltとかAlphaBltみたいなのさがしてるんです。
まー、向こうで聞いてみます。さんきゅー。
0355354
2006/07/20(木) 11:19:23盲目だった。
0356デフォルトの名無しさん
2006/07/20(木) 13:17:43GetProcAddressから関数ポインタにキャストするときに
規約なしの関数ポインタ宣言しててはまった。
/clr -> void(__cdecl*)(void)
/clr:pure -> void(__clrcall*)(void)
#include<typeinfo>
#include<string>
#include<iostream>
typedef void(*fn_type)(void);
int main()
{
std::cout << typeid(fn_type).name() << std::endl;
}
0357デフォルトの名無しさん
2006/07/20(木) 15:32:03板違いでしたか・・・。
誘導サンクスです 早速そちらに行きたいと思います
またこっちに書き込むことがありましたらよろしくお願いします
0358デフォルトの名無しさん
2006/07/21(金) 12:19:44呼び出したメソッドで発生した例外を、上位のメソッドにそのまま投げたいのですが、
↓のように発生するすべての例外についてcatchを記述する方法しかないんでしょうか?
catch(...)みたいに、すべて一括で処理できる方法があれば教えてください
Void Sub(Void){
try{...}
catch(exp1){throw exp1}
catch(exp2){throw exp1}
:
:
catch(expN){throw expN}
}
int main(array<String^>^ Args){
try{
Sub();
}
catch(...){
}
}
0359358
2006/07/21(金) 14:28:24しかも、C++/CLIじゃなくて、標準C++の質問をしてしまったようで……
スレ違いの質問をしてしまって申し訳ありませんでした
Void Sub(Void){
try{
...
}
catch(...){
throw ;
}
}
0360デフォルトの名無しさん
2006/07/21(金) 14:56:52catchしなければ勝手に例外は呼出元まで伝播するぞ。
0361デフォルトの名無しさん
2006/07/24(月) 10:43:540362デフォルトの名無しさん
2006/07/24(月) 10:56:150363デフォルトの名無しさん
2006/07/24(月) 12:22:290364デフォルトの名無しさん
2006/07/24(月) 17:55:140365デフォルトの名無しさん
2006/07/24(月) 18:00:410366デフォルトの名無しさん
2006/07/24(月) 18:07:45このコードで\main.cpp(1) : error C2059: 構文エラー : 'return'というエラーが出るのですが、なぜでしょうか?
ループ中にbreakを同じように使ったときも同じようなエラーが出ました
開発環境はVC++ 2005 Express Editionです
0367デフォルトの名無しさん
2006/07/24(月) 18:13:25return 0 != 0 ? 0 : 0;
にしとけ
0368デフォルトの名無しさん
2006/07/24(月) 18:14:37returnもbreakも式ではないので、式の中には書けない。(ちなみにthrowは式)
return 0 != 0 ? 0 : 0;と書きなさい。
0369デフォルトの名無しさん
2006/07/24(月) 18:49:05そういうことだったんですね。
教えてもらったようにreturn 0 != 0 ? 0 : 0;と書くようにします。
回答ありがとうございました。
0370デフォルトの名無しさん
2006/07/25(火) 12:47:06「プログラムを作ろう!パソコン教科書 Microsoft Visual C++ 2005 Express Edition入門」
1995円 WINGSプロジェクト 青木 淳夫 山田 祥寛 (単行本 - 2006/3)
↑を買おうかと思ってるのですが、似たような内容のものが、手に入らないかなと思っています。
本屋で読んだ所、操作方法を例題をやりながら、覚えていく感じでしたので
初歩的な操作法を解説しいて印刷可能なサイトなどがあったら
教えてもらえないでしょうか。
よろしくお願いします。
0371デフォルトの名無しさん
2006/07/25(火) 15:45:570372デフォルトの名無しさん
2006/07/25(火) 15:46:350373デフォルトの名無しさん
2006/07/25(火) 18:43:260374371
2006/07/26(水) 14:12:22windowsのファイルをドラッグして移動するように
ドラッグ中にマウスポインタと画像が一緒に動くようにするには
どうすれば良いかが分かりません。
マウスイベントから内部の情報を変更するところは見通しがついているのですが。
0375デフォルトの名無しさん
2006/07/26(水) 20:59:19c#と相互運用するためにはdllが必要であることを知りました。
どうすれば.net2005でdllを作成することができるのでしょうか?
0376デフォルトの名無しさん
2006/07/26(水) 21:03:00後でプロジェクトのプロパティを変更でも良いが
0377375
2006/07/26(水) 21:07:10早速試してみます。
0378375
2006/07/26(水) 23:10:59"デバッグで使用する実行可能ファイル名"を要求されます。
dllしか作成されていないためexeファイルは存在しておらず、
該当ファイルが無いように思えるのですがどうすればよいのでしょうか?
0379デフォルトの名無しさん
2006/07/26(水) 23:13:07クラスライブラリをデバッグするためだけのプロジェクトを追加すればいい。
0380デフォルトの名無しさん
2006/07/27(木) 02:14:50スライダーを使ったプログラム例が紹介されてる
書籍かサイトなどがあったらおしえてください。
「リストボックス」や「ラジオボタン」は入門書を参考にして
なんとか使えるようになったのですが、
「スライダー」のプログラムに関する本がみつからなくて・・。
0381デフォルトの名無しさん
2006/07/27(木) 04:41:09つ くだすれVisual C++(超初心者用)その3
0382デフォルトの名無しさん
2006/07/27(木) 23:30:22array<T^>^ foo=gcnew array<T^>(bar->Length+baz->Lenght);
とやってコピーする以外に、もっと簡単な方法ないですか?
0383デフォルトの名無しさん
2006/07/27(木) 23:45:35List<T^> foo(bar);
foo.AddRange(bar);
array<T^>^ result = foo.ToArray();
ではあかんの?
0384デフォルトの名無しさん
2006/07/28(金) 00:10:03処理するツールを書こうかと思うんだが
EUC→SJIS→UNICODE→処理する→SJIS→EUC みたいな流れになって
スマートじゃない
stringをつかってEUCコードの文字列を直接使う方法ないですか?
0385デフォルトの名無しさん
2006/07/28(金) 00:12:43Unicodeに変換させずに処理させる方法とかないでしょうか?
情報の欠落が心配なので・・
0386デフォルトの名無しさん
2006/07/28(金) 00:15:410387デフォルトの名無しさん
2006/07/28(金) 00:17:04普通こうじゃないのか?
EUC→UNICODE→処理する→EUC
0388デフォルトの名無しさん
2006/07/28(金) 00:36:30非効率ということに変わりは無いけれど。
0389デフォルトの名無しさん
2006/07/28(金) 00:45:060390デフォルトの名無しさん
2006/07/28(金) 00:52:53既存の関数は使えるわけだし
0391384
2006/07/28(金) 01:00:30Unicodeが絡んでくると、単純にEUC→Unicode→EUCをしただけでも
元通りに戻る保証ないですよね・・・?
C++/CliのstringはUnicode専用だと聞いたのですが認識が間違っていますか?
あと、SJISを経由する必要はありませんでしたね。申し訳ないです。
0392デフォルトの名無しさん
2006/07/28(金) 01:15:41390 は既存のマルチバイト操作を使えばいいんじゃないって意味
CLI の String 型はユニコードだから変換すればその通りだけど、バイト列を直接mbstrlen
とかで操作する分には大丈夫なんじゃないの?
0393デフォルトの名無しさん
2006/07/28(金) 01:22:310394デフォルトの名無しさん
2006/07/28(金) 02:38:06だからCLIのStringじゃなく、std::stringとかC文字列を使ったらって言われてるじゃん。
そのためのC++/CLIだ。
0396デフォルトの名無しさん
2006/07/28(金) 19:44:20自前でやるしかないのか・・・。ゲームつくりたいんだけどなー。
STLでできたことができないと、ムキィーー!ってなるな。。。
std::swapとかmaxとかminとかイテレータとかとかとか・・・・。ムキィー!!
0397デフォルトの名無しさん
2006/07/28(金) 20:50:460398384
2006/07/28(金) 21:38:26C++/CLIなので.Netのライブラリで統一したいとは思いましたが
現状回避方法がないのならあきらめてSTLのstringを使うことにします。
0399デフォルトの名無しさん
2006/07/29(土) 00:03:130400デフォルトの名無しさん
2006/07/30(日) 14:31:100401デフォルトの名無しさん
2006/07/30(日) 15:38:590402デフォルトの名無しさん
2006/07/30(日) 17:04:150403デフォルトの名無しさん
2006/07/31(月) 00:00:410404デフォルトの名無しさん
2006/07/31(月) 00:18:250405デフォルトの名無しさん
2006/07/31(月) 10:54:53のようなバイト列にファイルから1024バイト読み込みたいのですが、
FileStream と BinaryReaderを使った場合、
for文で1バイトずつ読み込むしかないのでしょうか?
0406デフォルトの名無しさん
2006/07/31(月) 21:14:550407デフォルトの名無しさん
2006/07/31(月) 22:22:04ありがとうございます、cli::arrayの使い方をもう少し調べてみます。
nVersion = *(int *)(buf + 16);
memcpy(szFileName, buf+24, 256);
みたいな事がなかなか出来なくて・・・
0408デフォルトの名無しさん
2006/07/31(月) 22:30:15array<Byte>^ arr = br.ReadBytes(1024);
br.Close();
でしょ
0409デフォルトの名無しさん
2006/07/31(月) 22:46:15String^ fileName = gcnew String(arr, 24, 256);
で、文字列は作れるけど
0410デフォルトの名無しさん
2006/07/31(月) 23:30:16ありがとうございます。
arrayだと過去の関数と互換性が無くて、BYTE *にしたかったのですが
これはStringなどのクラスにも言える事でしたね
頭を切り替えて、.NETの勉強をし直すことにします。
0411デフォルトの名無しさん
2006/08/01(火) 15:44:24cli::arrayもpinすれば従来どおりの配列として扱えるはず。
0412デフォルトの名無しさん
2006/08/01(火) 17:35:08現在のスキルはVC2003.netでネイティブ,MFCで開発ができる程度。
STLやらBoostが.Netでは使えないらしいんでC++系列にこだわる必要も
ないかなと思い始めてる。
0413デフォルトの名無しさん
2006/08/01(火) 17:44:460414デフォルトの名無しさん
2006/08/01(火) 18:38:50こういうのを見るたび C++ と CLI って食い合わせが悪いよなーと思う。
0415デフォルトの名無しさん
2006/08/01(火) 18:53:360416412
2006/08/01(火) 23:52:14ではまずはC#から入っていくことにします。thx
0417デフォルトの名無しさん
2006/08/07(月) 11:10:43値を返すやり方は止めた方がいいの?
DLL作ってるんだけど、VBとかで呼び出した時に例外を取れるのか心配なんだけど……
0418デフォルトの名無しさん
2006/08/07(月) 11:24:020419デフォルトの名無しさん
2006/08/07(月) 11:32:49WEB入れるとあっというまに燃料がなくなり、
BBBから前線まではスロットルを絞って巡航速度で飛ばないと到着前に燃料切れになるぐらいが良いな。
0420デフォルトの名無しさん
2006/08/07(月) 11:34:570421デフォルトの名無しさん
2006/08/07(月) 14:46:59VB .NETなら、問題なく例外を受け取れるはず。
ただのVBなら>>418で。
0422デフォルトの名無しさん
2006/08/07(月) 20:06:08マネージドな例外なら CCW が頑張って HRESULT に変換してくれる。
0423デフォルトの名無しさん
2006/08/09(水) 16:32:02クラスがあり、アプリケーションからそのクラスを使いたいのですがアセンブリ
宣言で
#using <System.dll>
#using <example.dll>
と両方のアセンブリを宣言しないとC3624のコンパイルエラーが発生します。
アプリケーション内で、System.dllのクラスを直接使用している部分はない
ので出切る事なら
#using <example.dll>
だけで済ませる方法はないかと考えているのですが。何か良い方法はないで
しょうか?
0424デフォルトの名無しさん
2006/08/09(水) 17:52:42/FU
0425デフォルトの名無しさん
2006/08/09(水) 20:21:06参照っていうよりはポインタの使い方のように思えるのですが。
0426デフォルトの名無しさん
2006/08/09(水) 20:26:310427デフォルトの名無しさん
2006/08/09(水) 20:48:400428デフォルトの名無しさん
2006/08/09(水) 21:59:27.NETの参照型とC++の参照型には何の関係も無い。
C/C++のポインタが難しいというイメージから逃れるため、
C++以外の世界では、ポインタ演算の無いポインタのことを参照ということが多い。
.NET Frameworkの参照型もその実例の1つ。
0429デフォルトの名無しさん
2006/08/10(木) 00:00:49その程度のものだったら、GCがコンパクションした瞬間に終る.
0430デフォルトの名無しさん
2006/08/10(木) 00:32:23でも、.NETに限らなければ参照即ち追跡するものではないだろ。
0431デフォルトの名無しさん
2006/08/10(木) 23:00:05ロクなページがないので本屋に行ってきた
しかし本屋にもC++/CLIの本はロクなのないのな
多少マシな感じのするのが2冊あったくらい
「これからはじめるVisualC++2005」とか言うやつ
2005とうたっているにもかかわらず、マネージドC++の解説が
半分以上を占めていて萎えた
古い規格の解説なんか正直いらないんだが・・・。それしかないから渋々買ったが。
なんかおすすめなC++/CLIの本ないですか?
0432431
2006/08/10(木) 23:12:46わりと好きな著者なので。
0433デフォルトの名無しさん
2006/08/11(金) 00:10:39ttp://www.apress.com/book/bookDisplay.html?bID=10082
0434デフォルトの名無しさん
2006/08/12(土) 23:49:06それぞれお互いに対し参照設定すると、
C++/CLI 側で、
>コンパイルエラー C2011:'identifier' : 'type' 型の再定義
というのが出るんですが、これを回避する方法はないでしょうか?
0435デフォルトの名無しさん
2006/08/16(水) 23:01:44\var_{\cd3__8/_4/2006_19:39:18.981_H__foo.c__03472_Weak_coverage:_a=147_c=0_n=0}arr[0] = buff->Substring(1, 3);ではvarが正しく表示されるのですが
arr[1] = buff->Substring(7, 9);期待している表示はcd3なのですが意に反して\cd3__8/_4と出力します、
同様にarr[2] = buff->Substring(12, 20);期待は8/_4/2006なのですが、ここでもまた
8/_4/2006_19:39:18.9となります、解決方法を教えてもらえないでしょうか?以下ソースです
#include "stdafx.h"
using namespace System;
using namespace System::IO;
int main()
{
StreamReader^ sr = nullptr;
try
{
array<String^>^ arr = gcnew array<String^>(3);
sr = gcnew StreamReader(" C:\\foo.txt ");
String^ buff = sr->ReadLine();
arr[0] = buff->Substring(1, 3);
arr[1] = buff->Substring(7, 9);
arr[2] = buff->Substring(12, 20);
Console::WriteLine(buff);
Console::WriteLine(arr[0]);
Console::WriteLine(arr[1]);
Console::WriteLine(arr[2]);
}
finally
{
if ( sr != nullptr )
{
sr->Close();
}
}
}
0436デフォルトの名無しさん
2006/08/16(水) 23:09:48foo.txtの一行目のデータは下記の通りですが、_は実際には半角スペースです
\var_{\cd3__8/_4/2006_19:39:18.981_H__foo.c__03472_Weak_coverage:_a=147_c=0_n=0}
0437デフォルトの名無しさん
2006/08/16(水) 23:15:320438デフォルトの名無しさん
2006/08/16(水) 23:59:52半角スペースはカウントしないってこと?
0439デフォルトの名無しさん
2006/08/17(木) 00:10:250440デフォルトの名無しさん
2006/08/17(木) 00:14:560441デフォルトの名無しさん
2006/08/19(土) 16:39:46数値を文字列に変換したいのですが、
int GetTime,SystemTime,EndTime;
char *text;
SystemTime = timeGetTime();
//何らかの処理
GetTime = timeGetTime();
EndTime = GetTime - SystemTime;
_itoa_s(EndTime,(char *)text,65,10);
これを実行するとエラーを吐いて落ちてしまいます。
どうすれば良いでしょうか。よろしくお願いします。
0442デフォルトの名無しさん
2006/08/19(土) 17:41:07textがどこのメモリも指していないまま、textの指す先に書き込もうとしている。
率直にstd::stringなりSystem::Stringなりを使いなさい。
0443デフォルトの名無しさん
2006/08/19(土) 20:18:38char text[65];
:
_itoa_s(EndTime,text,sizeif(text),10);
0444デフォルトの名無しさん
2006/08/19(土) 20:41:30>>443
sizeifというのはsizeofのことでしょうか。sizeifだとエラーが発生し、sizeofだと思っていたとおりの動作になりました。
0445デフォルトの名無しさん
2006/08/19(土) 20:44:560446デフォルトの名無しさん
2006/08/19(土) 21:54:09俺は443ではないが、sizeofのはずだ。
0447デフォルトの名無しさん
2006/08/19(土) 23:10:54CLIに重きを置けばこんなコードになるのかの。
System::Diagnostics::Stopwatch^ sw = System::Diagnostics::Stopwatch::StartNew();
/*何らかの処理 ex. */ System::Threading::Thread::CurrentThread->Sleep(3000);
sw->Stop();
System::String^ s = sw->ElapsedMilliseconds.ToString();
C++/CLIはC++を一応理解してからはじめないとポインタや参照、インスタンスの後始末あたりが
ぐちゃぐちゃになりそうな気がする。
できたらC#やVBで.NETのクラスライブラリの使い方にも慣れてからがいい。
0448デフォルトの名無しさん
2006/08/19(土) 23:30:14/clr:pure ならポインタを含めたメモリ関連の知識は特に必要ないと思うけどね。
まあそれだと何故 C++/CLI なのかって話にまでなっちゃいそうだけど。
0449デフォルトの名無しさん
2006/08/20(日) 00:41:54実験用プログラム以外ではそれでやっているよ、俺。
0450デフォルトの名無しさん
2006/08/20(日) 12:46:17頭に入りやすいように順番が工夫されて書かれているようだ。
MC++もからめて書いているのは、理解の一助になるしそれほど
悪く無いと思う。
とりあえず全部眺めてCLIの準備だけはしておこうと思って。
仕事で使う日が来るのだろうか…
0451デフォルトの名無しさん
2006/08/20(日) 19:42:34「実践C++/CLI極めるための基礎と実践テクニック」ていう本にした、
この本は>>449の本と逆で
普通VC8のインスコの方法から書くと思うのだが、そんなのは後回しで
C++/CLIとは何か、から始まってるが、じっくりソースを入力して動かしていると
よく納得できる感じ。
また、この本はNative C++、マネージ拡張、C++/CLIと対比させて説明してるが
NativeのC++がしっかり理解できて入れば、マネージ拡張をスルーしてもCLIは
覚えれそうと思うのは、漏れの錯覚デツカ?
0452デフォルトの名無しさん
2006/08/20(日) 19:43:43× >>449
○ >>450
0453デフォルトの名無しさん
2006/08/20(日) 21:08:26ちょっと買った動機だったりする。いやMSからすでに落として
インストールしてるけど、なんとなく商売の仕方を学んだ気がした。
0454デフォルトの名無しさん
2006/08/20(日) 21:46:14買ったが、内容が良かったので定期購読シテマツ。
0455デフォルトの名無しさん
2006/08/20(日) 22:27:13FindWindowEx を呼んでいるんですが、
ビルドの際に、
未解決のトークン、未解決の外部シンボルというエラーで
FindWindowEx が見つからないと言われてしまいます。
解決策しってる人いますか?
0456デフォルトの名無しさん
2006/08/20(日) 22:36:29まず解決するために自分でやったことを列記してよ。
0457デフォルトの名無しさん
2006/08/20(日) 22:43:57MSDN読んで適切なライブラリをリンクしろよ
0458デフォルトの名無しさん
2006/08/21(月) 00:38:17APIは確かにそのまま使えるが、ヘッダのインクルードとライブラリのリンクは
必要だぞ
やっべ、俺親切すぎ
0459431
2006/08/21(月) 00:41:53450のいうようにそんなに悪くはなかった印象。
結局C++/CLIといっても通常の使い方をする上では
それほどたくさん勉強するべきことはないな
COMなんか覚えて時と比べたら、C++/CLIは甘いわ
0460デフォルトの名無しさん
2006/08/21(月) 19:17:05array<int>^ ary = gcnew 〜;
array<T^> var = gcnew 〜;
みたいに解説があったけど、プリミティブじゃない方は
ハットが足りなくない?(array<T^>^ じゃなくていいの?)
各要素がTの参照なのはいいとして、varはarrayオブジェクト
の参照じゃなくても良いんだろうか?
あと、intはSystem::Int32の別名だとあったけど、
int a;
int *p = &a;
はまずくないのかな? System::Int32は名前からしてランタイム管理下
にある構造体みたいなのに、アンマネージ型のポインタに受けちゃって
平気なのか? これが駄目だと既存のソースが軒並み通らなくなるので
いいことになってるんだろうけど、腑に落ちないっす。
0461デフォルトの名無しさん
2006/08/21(月) 20:04:20array<T ^ >^ が正しい。前後を見ないとわからなけど、その解説の方が間違ってると思う。
int *p = &a;
p はアンマネージ型のポインタじゃなくてunsafeなポインタ。/clr:safeだとエラーになる。
0462デフォルトの名無しさん
2006/08/21(月) 20:15:55ども。
本の間違え、でスッキリしました。
>unsafeなポインタ
まだこれが理解できるレベルに達してないです。
もうちょっと読み進めてみます。
0463デフォルトの名無しさん
2006/08/21(月) 20:41:30int/System::Int32に限らず、値型(value class/struct)のローカル変数はみな、
ローカルなスタック上に実体があるから、ポインタを追跡する必要が無いので
アドレス演算子を適用した結果はそのようにアンマネージポインタ型になる。
0464デフォルトの名無しさん
2006/08/21(月) 21:45:560465デフォルトの名無しさん
2006/08/22(火) 04:59:49混合とpureではOK, safeでは不可。
interior_ptr<T>を使えばポインタの使える範囲が広がる。それでもsafeではポインタの加算減算は出来ない。
ref struct V {int x, int y};
//
V^ v = gcnew V(); v.x = 10; v.y = 20;
int *p = &v.x; // error
interior_ptr<int> p = &v.x; // ok
array<String ^>^ ar = {"blue", "red", "green", "yellow"};
interior_ptr<String ^> p = &ar[0];
Console::WriteLine(*p);Console::WriteLine(*(p+1));Console::WriteLine(p[2]); p++; Console::WriteLine(*p);
0466デフォルトの名無しさん
2006/08/22(火) 11:37:30ポインタの加減算したければpure使えってことですか。了解です。
ということは、従来のポインタ演算のソースをコンパイルしても
ネイティブコードは生成されないということですよね。
ネイティブコードが生成されない、従来のC/C++の書き方の範囲が
どのくらいなのかが気になるところです。
それが分れば、CLI、ネイティブ上でソース互換なプログラムが
書けそうですが…、
警告を見てると、__asm は当然として、可変引数を使うとvarargに対して
「ネイティブ コードの生成が発生します」と表示されます。
ネイティブ無しの可変引数のサブルーチンは書けないのでしょうか?
0467デフォルトの名無しさん
2006/08/22(火) 15:50:0418.4 パラメータ配列
http://www.stdblue.net/prog/cppcli/Topics/D-1_14-18.html
http://msdn2.microsoft.com/en-us/library/9dt1588w.aspx
0468デフォルトの名無しさん
2006/08/22(火) 18:27:55ありがとうございます。
標準Cの可変引数の書き方ではネイティブなコードの生成は避けられない
ということですか…。
CLIって、標準C/C++で記述されるプログラムの変換結果(というか構造概念)
を100%乗せられるような仮想マシンじゃないってことなのかな。
完全にCLIの上に乗っかったstdio周りとか、一番下位の入出力だけ.NETに
書き換えれば、ソースからコンパイルしなおすことで作れるかな、と思った
んですが。
0469デフォルトの名無しさん
2006/08/22(火) 19:31:24ただC++/CLIはあえてそれを捨ててスマートな記法を採用したのだと思っている。
http://msdn2.microsoft.com/ja-jp/library/abx4dbyh.aspx
/clr:pure用のmsvcm80.dllがあるけど、これでprintf/scanf系など標準関数に限っては使えるのかもしれない。
0470デフォルトの名無しさん
2006/08/22(火) 20:45:07へー、情報ども。ちうことはCランタイム呼び出しではマネージ←→ネイティブの
切り替えによるパフォーマンスダウンは無い、ということなんすかね?
/clr , /clr:pureともにmsvcm80.dllに関連付けられてるみたいだけど。
おれの可変引数サブルーチンもCLI上に乗っけたいよ…
0471デフォルトの名無しさん
2006/08/22(火) 20:47:35作れば載るけど、ポリシーとして作らない、んじゃないの?
0472デフォルトの名無しさん
2006/08/22(火) 21:20:12#ifdef __cplusplus_cli
namespace my {
typedef ::cli::interior_ptr<System::Object^> va_list;
}
#define MY_VARIANT_ARGS ... ::cli::array<::System::Object^>^ myVariantArgs
#define MY_VA_START(ap, parmN) ((ap) = &myVariantArgs[0])
#define MY_VA_ARG(ap, type) (::cli::safe_cast<type>(myVariantArgs++))
#define MY_VA_END(ap) (static_cast<void>(0))
#define MY_VA_COPY(dest, src) ((dest) = (src))
#else
#include <cstdarg>
namespace my {
using std::va_list;
}
#define MY_VARIANT_ARGS ...
#define MY_VA_START va_start
#define MY_VA_ARG va_arg
#define MY_VA_END va_end
#define MY_VA_COPY va_copy
#endif
0473デフォルトの名無しさん
2006/08/23(水) 10:37:20/clr の場合可変引数を持つネイティブ関数になる。ネイティブ・マネージド両方から呼び出せる。
/clr:pure の場合可変引数を持つマネージド関数になる。C++/CLIのマネージドコードからのみ呼び出せる。
/clr:safe コンパイルできない。
stdarg.hの中を調べると /clr:pureの場合に特別の分岐が仕込んであった。
引数を別の型で読み出すなどイレギュラーな処理をした場合の結果が異なることがありえるようだ。
0474デフォルトの名無しさん
2006/08/23(水) 11:11:37>stdarg.hの中を調べると
こちらはエクスプレスなんだけど、プラットフォームSDKのstdarg.hは
_M_CEEの分岐は見つかったが_M_CEE_PUREでの分岐は見つかりませんでした。
仮に混合でも可変引数周りに/clr:pureのケースを適応したら、自前のアプリ
で従来可変引数の書き方をもってCLI上に乗せられるってことですかね。
ってか、混合アプリであっても、マネージドの部分から呼び出す
CランタイムはCLI上のを使ってくれるほうがC++/CLIらしいと思う
んだけどなあ
0475デフォルトの名無しさん
2006/08/23(水) 11:22:50間違い。
もう一度見てみたら、vadefs.hのva_listに_M_CEE_PUREの判定があった。
0476デフォルトの名無しさん
2006/08/23(水) 12:18:54まあそのイレギュラーな処理はごく一部を除いて元から結果が未定義だから、
それで問題が起こっても、傍から見る分には、そんなコードを書くほうが悪いと思えるけどな。
0477デフォルトの名無しさん
2006/08/26(土) 00:08:49delegateやeventが出てきた辺りでの印象だけど、
良く使うパターンを言語仕様として取り込んだC++
って感じ。
0478デフォルトの名無しさん
2006/08/26(土) 12:26:57いいかげんVS2005+WindowsFormな環境に移行したい・・。
おまえらどういう理由でVS2005移行を提案した?
.netに拒否反応示してる上司が多くてラチがあかない
0479デフォルトの名無しさん
2006/08/26(土) 12:36:290480デフォルトの名無しさん
2006/08/26(土) 12:47:46Vista が出てくる時期に合わせるつもりではいるけど、面倒なので悩んでる(w
0481デフォルトの名無しさん
2006/08/26(土) 13:45:46VC6がばぐばぐだということを示して、まずはVC8+MFCへというのはどう?
0482デフォルトの名無しさん
2006/08/26(土) 13:46:430483デフォルトの名無しさん
2006/08/26(土) 14:52:00社内ツールならすごく便利、優位になるという点を
アピール。
べつに今まで作ったものが動かなくなるわけじゃ無し、
頭固い上司だな。
売り物なら客が買ってくれるものじゃないと。
.NET必須だとまだつらいだろ
0484デフォルトの名無しさん
2006/08/27(日) 02:06:03実装の時間がだいぶ短縮したと思う、C#やVBのソースを少しいじることで
実現出来るからそれも魅力だね。
0485デフォルトの名無しさん
2006/08/27(日) 03:14:22それが魅力のひとつだしな。
0486デフォルトの名無しさん
2006/08/27(日) 16:24:18C# はヘッダがいらない言語ですが、
C++/CLIもヘッダがなくても別のファイルに定義したクラスに
アクセスできるんでしょうか?
コンパイル時間を気にしないようになりたい・・。
0487デフォルトの名無しさん
2006/08/27(日) 19:56:13できる
0488デフォルトの名無しさん
2006/08/28(月) 00:38:52ありがとうございます!
調べてみます。
0489デフォルトの名無しさん
2006/08/28(月) 00:45:010490デフォルトの名無しさん
2006/08/28(月) 06:25:22同時にコンパイルするグループ内ではヘッダーファイルのincludeは必要。
DLLに分ける場合はややこしい。
enum class, value class, ref class rc, interface class については不要。
#using か /FU でアセンブリを指定する。
それ以外のC++と共通する文法のクラスや関数、変数には必要。
ネイティブの場合と同じでImport Libを使用する。
0491デフォルトの名無しさん
2006/08/28(月) 14:01:170492デフォルトの名無しさん
2006/08/28(月) 20:24:55「これからはじめるVisualC++2005」買った
>>451です
確かにいい本だね、引き出しが増えそうです
林 晴比古 明快入門 Visual C++ 2005 ビギナー編にしようか迷ったけど、MFCの章が結構多かった事と
林本の傾向だけど、初心者向けというか、初学向けの感が否めないんで今回はやめました
林さんの本では、「新・C言語入門 シニア編」には大変お世話になったんで、次の
明快入門 Visual Basic 2005 シニア編に期待します。
0493デフォルトの名無しさん
2006/08/28(月) 20:48:19Win32 API のヘッダが C# に用意されたら C# でもいいよ
いちいち、PInvoke の宣言をコピペするのめんどくさすぎ.
嫌がらせとしか思えん.
.NET Framework 2.0 もまだ Win32 API の機能を網羅してないくせに...
0494デフォルトの名無しさん
2006/08/28(月) 21:10:49pinvoke.net を使え
0495デフォルトの名無しさん
2006/08/28(月) 23:40:45pinvoke.net ってコピペ文字列検索するだけのところだと思ってたけど違った?
0496デフォルトの名無しさん
2006/08/29(火) 14:38:59.netframework2は入っているマシンに配布するなら、
MFCの使用を「スタティックライブラリでMFCを使用する」にすればOKですかね?
0497デフォルトの名無しさん
2006/08/29(火) 14:42:35System::Math::Sqrt って書かなきゃならんのすか?
#define SQRT(x) System::Math::Sqrt(x) って書く以外に、
何かイイ方法ないでしょうか。イッパイ出てくるので。
0498デフォルトの名無しさん
2006/08/29(火) 14:46:150499デフォルトの名無しさん
2006/08/29(火) 14:50:14namespace のところに書くんですよね?
ボクもそれでいけると思ったのですが
「System::Math::Sqrtは名前空間ではありません」なのですよ。
0500デフォルトの名無しさん
2006/08/29(火) 14:56:32vcredist_x86.exe でどーだろ?
0501デフォルトの名無しさん
2006/08/29(火) 14:57:20それは using namespace System::Math::Sqrt; と書いた時の話だろ。
namespaceは要らない。
0502デフォルトの名無しさん
2006/08/29(火) 15:34:24using System::Math::Sqrt; ってどこに書けばいいんすか?
0503デフォルトの名無しさん
2006/08/29(火) 15:35:08Standard版を買う。
0504デフォルトの名無しさん
2006/08/29(火) 15:56:07ヘッダファイルの直後。
0505デフォルトの名無しさん
2006/08/29(火) 16:19:47後はMath::Sqrtでいいんじゃない?Mathは名前空間ではない(クラス名)なので、
using Math;とかusing namespace System::Math;はできません。
0506デフォルトの名無しさん
2006/08/29(火) 16:57:06>後はMath::Sqrtでいいんじゃない
あ、やっぱりそこまでですか。ども。
0507デフォルトの名無しさん
2006/08/30(水) 21:07:05タイプ数削減のためだけにわざわざ使うのもどうかとは思うが。
(.NETバリバリのコードの中でこれだけCRTだと異質に見えるだろう)
0508デフォルトの名無しさん
2006/08/31(木) 00:44:00#define sqrt System::Math::Sqrt
いや、正直どうかとは思うのだけどC言語の標準ライブラリとCLIとの妥協点に思えて仕方がないんだ
0509デフォルトの名無しさん
2006/08/31(木) 01:48:32inline double sqrt(double x)
{
return System::Math::Sqrt(x);
}
0510デフォルトの名無しさん
2006/08/31(木) 09:36:19あーそれが一番良さそうですね。どうも。
0511デフォルトの名無しさん
2006/08/31(木) 09:42:180512デフォルトの名無しさん
2006/08/31(木) 11:08:36ベストオブベスト だと思うが?
0513デフォルトの名無しさん
2006/08/31(木) 22:29:20{
if(e & MyEnum::b){
}
}
error C3063: 演算子 '&': すべてのオペランドには、同じ列挙型を指定しなければなりません
というエラーが出るのですが、何がいけないのでしょうか?
const MyEnum e;
if(e & MyEnum::b){
}
でも同様でした。
0514デフォルトの名無しさん
2006/08/31(木) 23:13:28列挙子同士をビット演算することはできない。
なお、標準C++ではそのようなコードが書けるが、
それは演算子の両側をintに格上げして演算する規則になっているから。
C++のネイティブな列挙型では、自分でoperator &を定義しろというところだが、
CLIの列挙型では、Flags属性を付けたらいいと思う。
違っていたらすまん。
0515513
2006/09/01(金) 01:26:51{zero,a,b};
if( (e & MyEnum::b) != MyEnum::zero){
}
でも eがconst属性だと514のエラーになるみたいです。
if( ((MyEnum)e & MyEnum::b) != MyEnum::zero){
}
なら通りました...
0516デフォルトの名無しさん
2006/09/01(金) 01:30:42enum struct MyEnum {zero, a, b};
0517デフォルトの名無しさん
2006/09/04(月) 23:25:45実行速度遅いの何とかしてくれ
0518デフォルトの名無しさん
2006/09/05(火) 02:46:59ちょっと面白いな、それは。
笑い事じゃないが。
0519デフォルトの名無しさん
2006/09/08(金) 08:23:35単純化すると、このアプリでは以下の様な形で、FormAから同一フォームを
クリックイベントなどで多重にモードレスで何回も呼び出す必要があります。
class FormA {
......
private: button_Click (System::Object^ sender, System::EventArgs^ e) {
FormA^ ver = gcnew FormA(); // 同一フォームの多重呼出
ver->Show(); // モードレス
}
......
};
スケルトンとしては動くのですが、実際には各々のFormAのプロパティにアクセスして
(特にLocationやSizeプロパティなど)を変える必要があります。
これらプロパティのスタックはどこにあり、どのようすればアクセスできるのでしょうか?
上司がGUIアプリの実装時間節約になると、.NETが大好きなのでC++/CLIの採用は
要求仕様のため変えられません。まだCLIの情報が少なく、困っています。
MSDNのどこを読めとか、何でも結構ですのでアドバイスをお願いします。
0520デフォルトの名無しさん
2006/09/08(金) 11:48:08フォームをリスト状に管理するか、単一のコレクションで管理するかわからないが、
単一コレクションならApplication.OpenFormsでもなんとかなるかな。
0521デフォルトの名無しさん
2006/09/10(日) 08:01:25アドバイス、ありがとうございました。早速調べてみました。
単一のコレクションで管理しますので、
まさにApplication.OpenFormsを使えば何とかなります。
いやー、本当に助かりました。
0522デフォルトの名無しさん
2006/09/13(水) 21:30:53.NETのストリームにStringStreamがないのも奇妙なんだけども
Stringがnon-mutating typeだからなのかな...
0523デフォルトの名無しさん
2006/09/13(水) 21:37:440524デフォルトの名無しさん
2006/09/13(水) 23:00:38タイマーイベントが発生するたびに、BinaryReaderのReadBytesメソッドで
一度に1Mバイトのデータを読む処理を行う、PF使用量どんどん増えて
しばらくすると、OutOfMemoryExceptionの例外が発生してしまいました。
いろいろ試したところ、ReadBytesメソッドで一度に読むファイルサイズを10kとかにして
タイマーイベント内で100回繰り返し読む(結果的に一度のイベントで読み取るサイズは同じ)
ようにすると、この例外は発生しません。
これってどういうことか説明できるかた教えてください。
0525524
2006/09/13(水) 23:02:12一度に1Mバイトのデータを読む処理を行う、
↓
一度に1Mバイトのデータを読む処理を行うと、
でした。
0526デフォルトの名無しさん
2006/09/14(木) 09:00:13タグに型名を記述できないのが原因?
0527デフォルトの名無しさん
2006/09/14(木) 10:28:57たとえば
String ^s
for (int i=1;i<=1000000000 ;i++){
s += Convert::ToString(i);
}
とかやってもダイジョウブ?
0528デフォルトの名無しさん
2006/09/14(木) 10:35:590529デフォルトの名無しさん
2006/09/14(木) 10:57:59どの程度コードを書き換える必要があるのか良く分かりません。
http://www.atmarkit.co.jp/fdotnet/special/cppcli/cppcli_01.html
を見ると殆どそのままいけそう(この場合.NETにはなってない?)ですが、
実践C++/CLIを見ると、全てラッパークラスで覆う必要があるように読めます。
どういう違いがあるのでしょうか?
0530529
2006/09/14(木) 11:24:51を作っているのですね。
結局MFCコードは、コンパイルモードが混合(/clr)であれば、ほぼ
そのまま.NETのコードにできるのですね。
この場合は、/clr:pureにはできず、64ビットでは動作しない
と言うことになるのでしょうか?
0531デフォルトの名無しさん
2006/09/14(木) 14:43:12それは平気だけど、そういう風に文字列をどんどん書き換えていくときにはStringBuilderの方が効率が良い。
System::Stringは一度作られたインスタンスの内容は不変なので、
そのように書き換える操作をする場合、実際には新たなメモリを確保しなおしている。
0532デフォルトの名無しさん
2006/09/14(木) 17:52:08だんけ
0533デフォルトの名無しさん
2006/09/14(木) 22:26:280534デフォルトの名無しさん
2006/09/14(木) 22:30:160535デフォルトの名無しさん
2006/09/16(土) 11:20:08共通言語ランタイムに乗っかりますが、dllも/clrつけ
ればCLIになりますか?
0536デフォルトの名無しさん
2006/09/16(土) 14:16:160537デフォルトの名無しさん
2006/09/17(日) 01:06:58delegate void ProgressBarIncrementEvent(object sender,ref bool AbortFlg);
これをC++に書き直すにはどうしたらいい?
特にref boolの意味が分からない、AbortFlgのポインターの参照のことかな・・・・?
0538デフォルトの名無しさん
2006/09/17(日) 01:21:01であかんの?
0539デフォルトの名無しさん
2006/09/17(日) 01:35:38サンクス
public:
delegate void ProgressBarIncrementEvent(System::Object^ sender, bool& AbortFlg);
うっかりしてたpublic:書いてなかったんで変なことになってた
それから
ref boolはbool&でOK?
bool%ではだめデツカ?
0540デフォルトの名無しさん
2006/09/17(日) 08:57:350541デフォルトの名無しさん
2006/09/22(金) 20:02:42Bufferという1024バイトの配列に
UInt16 bar = 0x55AA;
という符号無の2バイトバイナリデータを一気に書込みたいのですがどのように書けば良いでしょうか?
教えて下さい。
0542デフォルトの名無しさん
2006/09/22(金) 21:55:57reinterpret_cast<UInt16%>(Buffer[0]) = bar;
本当に全部埋めたい場合、俺なら#include <algorithm>してstd::fillする。
pin_ptr<UInt16> ptr = reinterpret_cast<interior_ptr<UInt16> >(&Buffer[0]);
std::fill<UInt16*>(ptr, ptr + Buffer->Length / sizeof UInt16, bar);
0543デフォルトの名無しさん
2006/09/22(金) 22:36:13: error C2275: 'System::Buffer' : この型は演算子として使用できません
: error C2819: クラス 'System::Buffer' にはオーバーロードされたメンバ 'operator ->' がありません。
: error C2039: 'Length' : 'System::Buffer' のメンバではありません。
0544デフォルトの名無しさん
2006/09/22(金) 22:42:32array<Byte> ^ Buffer = gcnew array<Byte>(1024);
書くの忘れてマスタ
0545デフォルトの名無しさん
2006/09/22(金) 23:36:00最後にもう一つだけお願いします
アンマネージドの書き方教えてもらえませんか
タノンマス
0546デフォルトの名無しさん
2006/09/23(土) 02:05:46#include <algorithm> //std::fill
BYTE Buffer[1024];
UINT16 bar = 0x55aa;
reinterpret_cast<UINT16&>(Buffer[0]) = bar;
UINT16* ptr = reinterpret_cast<UINT16*>(&Buffer[0])
std::fill(ptr, ptr + sizeof Buffer / sizeof UINT16, bar);
0547デフォルトの名無しさん
2006/09/23(土) 02:13:210548デフォルトの名無しさん
2006/09/23(土) 03:44:310549デフォルトの名無しさん
2006/09/23(土) 08:28:360550デフォルトの名無しさん
2006/09/23(土) 08:29:170551デフォルトの名無しさん
2006/09/24(日) 22:29:08VC++2005 CLIのFormアプリケーションにおいて、以下の位置に
グローバル変数を定義し、Formクラス内で使用すると、
値の設定、参照は正常にされているようですが、値のウォッチを
するとスコープ外とでてしまいまい、不便です。
開発環境のオプションを変更するなどして見ることはできない
ものでしょうか。それとも開発環境のバグなのでしょうか。
あと、構造体を定義し、コード内で使用するとメンバの候補
がでましたが、やはり値のウォッチはできませんでした。
#pragma once
<ここに変数を定義>
namespace ping_test {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::Net::NetworkInformation;
using namespace System::Diagnostics;
0552デフォルトの名無しさん
2006/09/25(月) 00:06:160553デフォルトの名無しさん
2006/09/25(月) 17:16:54ま、ドトネトはウイソばかりなので良いが。
0554デフォルトの名無しさん
2006/09/25(月) 17:27:21まあ、最近じゃ大抵無くても問題ないんだけどさ。
0555デフォルトの名無しさん
2006/09/25(月) 17:44:07一応System.Environment.NewLineというものがある。
0556デフォルトの名無しさん
2006/09/25(月) 19:10:15そもそも、/clr:safeでは、従来のnewは使用できないのでしょうか?
解説を読むとそうらしいんですが、これだとかなりの手間になりそうです。
後、C++のソースをC++/CLIのソースに変換するプログラムは無いですよね?
0557デフォルトの名無しさん
2006/09/25(月) 19:21:18/clr:pureではだめか?
0558デフォルトの名無しさん
2006/09/25(月) 19:23:27先に作業を始めてる人が居るんだけど全くビルドできてないのかな・・・
まずいなこりゃ
0559デフォルトの名無しさん
2006/09/25(月) 20:25:120560デフォルトの名無しさん
2006/09/25(月) 22:34:02MSDNでもいまいちはっきりしないので、動かして確認してみるつもりです。
0561デフォルトの名無しさん
2006/09/25(月) 23:28:400562デフォルトの名無しさん
2006/09/25(月) 23:32:06手に入れる方法はございませんか??
参考書等についていたりしませんか??
そういった参考書をお知りでしたら、教えてください。どうかお願いします。
0563デフォルトの名無しさん
2006/09/26(火) 01:33:47/clr ネイティブとマネージド相互で呼び出しが出来る。
/clr:pure マネージドからネイティブが呼び出し出来る。
この2つはCランタイム(CRT)のネイティブコードを使用するため、必ずプラットフォーム依存になる。
/clr:safe ネイティブの呼び出しは出来ない。(DllImportを除く)
プラットフォーム依存なし。Cランタイム(CRT)が使えないため。printf などが全滅。
マネージドタイプのclassは使用不可。
x64のクロスコンパイラ使ってソースだけ共通にしたほうが現実的かな。
0564デフォルトの名無しさん
2006/09/26(火) 01:35:06機能は削ってあるがDotfuscatorがStandardから付いてくる。
0565デフォルトの名無しさん
2006/09/26(火) 08:02:27class CTest{
public:
void Func(){}
};
void (CTest::*p)();
p=CTest::Func;
なら代入できるってことは分かるんですが、
void *p=CTest::Func; はコンパイル通りませんでした。
void *p=(void *)CTest::Func;もコンパイル通りませんでした。
void *p=reinterpret_cast< void* >(CTest::Func);もコンパイル通りませんでした。
void *型ってなんでも代入できるんではないんですか?
何が何でも void* 型に代入したいんです。
0566565
2006/09/26(火) 08:09:340567デフォルトの名無しさん
2006/09/26(火) 08:30:490568デフォルトの名無しさん
2006/09/26(火) 08:51:25オブジェクトへのポインタならどんなものでもvoid*へ変換できる。
逆に言えばオブジェクトへのポインタでないものは変換できない。
まず関数はオブジェクトではないので、関数へのポインタは無理だ。
(実装上できるようになっていることも多いしVCもそうだが)
そしてメンバへのポインタは、そもそもポインタとは異なる存在(概念として名前を借りただけ)
だから、void*へ変換できない。
そしてもっとも大事なことは、本来スレ違いであること。
0569デフォルトの名無しさん
2006/09/26(火) 08:53:33色々と代案を考えてくれると思うよ。
ただしテンプレートを酷使するのでVC++ 6では厳しいだろうが。
0570565
2006/09/26(火) 10:02:11CLIをCommand Line Interfase==Dos窓 != Windowsプログラミング
だと勝手に解釈してました。
自分の無知さに涙がでました。
それにもかかわらず、アドバイスして下さった皆様、有難うございました。
0571556
2006/09/26(火) 10:46:5364ビットCLRでそのまま動作するようです。32ビット版では駄目ですが。
/clr:safeでなくてもOKてことですね。
0572デフォルトの名無しさん
2006/09/26(火) 10:48:04C++/CLI (Common Language Infrastructure)
CLI (Command Line Interface) = CUI (Character User Interface)
ISO SQL/CLI (Call Level Interface) ≒ ODBC (Open Data Base Connectivity)
CLIと言っても色々あるからね〜
文脈がないとどれか判断は付かない。
ま、このスレを少し見ればCUIの事じゃ無いって事はわかるが。
0573デフォルトの名無しさん
2006/09/30(土) 23:35:37VC#で外部に参照設定した関数の呼び出しで引数にoutを付けないとエラーになる部分があります。
COM名(引数1,out 引数2,out 引数3)
VC++ 2005ではどうすればいいのですか。
引数1は数値型のenumで、引数2、3は文字列の配列です。
VC++2500のエラーメッセージ
「Safe Array は、0以外の下限または複数の次元を含んでいるため、この配列型にマーシャリングできません。」
0574デフォルトの名無しさん
2006/10/01(日) 01:51:19C++/CLI を使って、その COM のマネージドラッパ DLL を参照してる、んではない?
0575デフォルトの名無しさん
2006/10/01(日) 01:53:31取りあえず情報が足りてない。
% 付ければ良いだけのような気もするが。
0576デフォルトの名無しさん
2006/10/01(日) 07:26:37情報が足りてないのはその通りで、あまりに個別的なことを羅列しても
申し訳ないと思ったが、遠慮無しに披露すると
(1)メーカーのサイト
http://www.panrolling.com/pansoft/chtgal/
(2)ヘルプの抜粋
AllNamesメソッド (Namesクラス)
形式
Sub AllNames(ByVal Kind As KindFlag, Codes() As String, Names() As String)
Enum KindFlag
AM_KINDFLAG_SPOTS = 1
AM_KINDFLAG_FUTURES = 2
AM_KINDFLAG_ALL = 3
End Enum
VBでの例
次のコードは、データベースにあるすべての現物銘柄のコードと名前を文字列配列C、Nにそれぞれ読み込みます。
Dim Names As New ActiveMarket.Names
Dim C() As String, N() As String
Names.AllNames AM_KINDFLAG_SPOTS, C, N
0577デフォルトの名無しさん
2006/10/01(日) 07:36:17Array aCode = new string[5000];
Array aName = new string[5000];
amName.AllNames(ActiveMarket._KindFlag.AM_KINDFLAG_SPOTS ,out aCode,out aName);
(4)まだ動かないC++2005EEのソース
cli::array<String^>^ aCode = gcnew array<String^>(5000);
cli::array<String^>^ aName = gcnew array<String^>(5000);
amName->AllNames(ActiveMarket::_KindFlag::AM_KINDFLAG_SPOTS,aCode,aName);
0578デフォルトの名無しさん
2006/10/01(日) 10:04:14(out引数を取る関数を作るときにはOut属性を付けるのだが)
んでout引数なんだからnewやらgcnewやらをするのは無意味だと思わないのか?
0579デフォルトの名無しさん
2006/10/01(日) 10:39:22配列宣言を
cli::array<String^>^ aCode;
にしても同じメッセージの実行エラーが出ます。
「Safe Array は、0以外の下限または複数の次元を含んでいるため、この配列型にマーシャリングできません。」
だから、配列の基底を変えればいいのだろうか。
0580デフォルトの名無しさん
2006/10/01(日) 11:37:26% つけるだけなんじゃね?
0581デフォルトの名無しさん
2006/10/01(日) 11:47:39http://msdn2.microsoft.com/ja-jp/library/h9t2463y.aspx
ところで、.NET使わずに#import使ってタイプライブラリを読み込んだらどうか?
0582デフォルトの名無しさん
2006/10/01(日) 12:19:38忘れていました
ActiveMarket::Names^ amName = gcnew ActiveMarket::Names();
です。
呼び出し部分を
amName->AllNames(ActiveMarket::_KindFlag::AM_KINDFLAG_SPOTS,%aCode,%aName);
にするとコンパイルエラーになります。
0583デフォルトの名無しさん
2006/10/01(日) 12:26:55↑
こういうのは付けなくていいの?
0584デフォルトの名無しさん
2006/10/01(日) 13:27:18それは宣言のときに要るだけで、実際に呼び出すときには要らない。
>582
それはおかしい。構文上は元の書き方で良い。
0585デフォルトの名無しさん
2006/10/01(日) 13:50:08ご教示ありがとうございます。実のところ#importというのもわかりません。
0586デフォルトの名無しさん
2006/10/01(日) 14:19:04.NETより前からあったVC++のCOM支援の機能。
たとえばこんな感じ。
ttp://www-online.kek.jp/~keibun/pukiwiki/?C%2B%2B%A4%CB%A4%AA%A4%B1%A4%EBExcel%A4%CE%CD%F8%CD%D1
ttp://www.sutosoft.com/room/archives/000092.html
0587デフォルトの名無しさん
2006/10/09(月) 04:24:51#include <stdio.h>
void sum(int x, int y);
int main(void)
{
sum(1, 9);
sum(9, 6);
sum(81, 9);
return 0;
}
void sum(int x, int y)
[
printf("%d ", x + y); //←16行目ココ
}
の16行目でエラーが出てしまいます。
Cygwinとgcc使用ですが文字化けしていてエラーの内容がわかりません。
何が間違っているかわかりません助言よろしくお願いします。
0588デフォルトの名無しさん
2006/10/09(月) 04:34:2515行目の「{」が「[」になっていたみたいです。
失礼しました。
0589デフォルトの名無しさん
2006/10/10(火) 07:59:270590デフォルトの名無しさん
2006/10/10(火) 19:06:42.NETのポインタとでも思えばよい。
0591デフォルトの名無しさん
2006/10/10(火) 20:02:28gcnewなポインタ
0592デフォルトの名無しさん
2006/10/11(水) 07:02:16どういう時に必要なの?
そもそもビットとは!?
0593デフォルトの名無しさん
2006/10/11(水) 07:39:320594デフォルトの名無しさん
2006/10/11(水) 12:46:150595デフォルトの名無しさん
2006/10/11(水) 12:49:47ちなみにVC++2005です。
0596デフォルトの名無しさん
2006/10/11(水) 12:54:010597デフォルトの名無しさん
2006/10/11(水) 13:03:39具体的なコードお願い。
0598デフォルトの名無しさん
2006/10/11(水) 13:08:580599デフォルトの名無しさん
2006/10/11(水) 17:39:25System::String^ s = "123";
int::Parse(s);
const char*, const wchar_t*ならアンマネージの方法が楽だと思う。
>>598
MSDNなんかで関数名を引く。
0600デフォルトの名無しさん
2006/10/11(水) 22:05:34そんな手間でもない。
0601デフォルトの名無しさん
2006/10/11(水) 22:10:47確かに手間でないと言われればそれまでだ。
0602デフォルトの名無しさん
2006/10/11(水) 22:43:26C#で駄目だったので心の中で禁じ手にしてた。
0603デフォルトの名無しさん
2006/10/12(木) 10:48:20CP/M時代からの年寄りにはいろいろ覚えるのが苦手なので
変換には、なんでもかんでもConvert::を使っとるんじゃが、だめかのぉ
Convert::ToDouble
Convert::ToString
Convert::ToUInt64
なんでもそろっとるんで重宝しちょるんだがのぉ。ごほごほ
0604デフォルトの名無しさん
2006/10/14(土) 08:24:23統一感があっていい関数を教えてもらいました♪ありがとうでやんす。
0605デフォルトの名無しさん
2006/10/14(土) 09:55:38マネージ型に対して使うのが困難なのが残念。
0606デフォルトの名無しさん
2006/10/15(日) 12:38:06ネイティブの型とマネージドな型を相互変換するにはどのようなコードを記述すればよいですか?
int <----> System.Int32 など
0607デフォルトの名無しさん
2006/10/15(日) 13:47:430608デフォルトの名無しさん
2006/10/15(日) 14:02:30System.Runtime.InteropServices
0609デフォルトの名無しさん
2006/10/15(日) 15:56:33intとSystem.Int32は全く同一の型。単なる別名扱い。
ポインタや配列だとやや面倒。
0610デフォルトの名無しさん
2006/10/15(日) 16:30:00ありがとうございます。参考にしてやってみます
0611デフォルトの名無しさん
2006/10/22(日) 13:32:32ヘルプ使うと普通にMFCのクラスとかでてきてやり難いったらありゃしない
長い年月かけて向き合うにはいいのかも知れないけど
0612デフォルトの名無しさん
2006/10/22(日) 14:49:160613デフォルトの名無しさん
2006/10/30(月) 13:46:400614デフォルトの名無しさん
2006/11/04(土) 01:30:32ごちゃごちゃあってよく分からないんですが。
C#の
using(Pen p = new Pen(Color.Black))
{
・・・
}
みたいな構文は try-finally でくくって delete するしかないんですか?
0615デフォルトの名無しさん
2006/11/04(土) 01:41:28usingってスコープ外れるとDisposeされるだろう。
0616デフォルトの名無しさん
2006/11/04(土) 01:51:11えっとじゃあC++/CLIでは
void Hoge()
{
0617デフォルトの名無しさん
2006/11/04(土) 01:53:33えっとじゃあC++/CLIでは
void Hoge()
{
Pen^ p = gcnew Pen(Color.Black);
} ←ここで p->Dispose() が呼ばれる
ということでいいんですか?
0618デフォルトの名無しさん
2006/11/04(土) 01:54:470619デフォルトの名無しさん
2006/11/04(土) 02:59:15void Hoge()
{
Pen^ p = gcnew Pen(Color.Black);
} ←ここで p->Dispose() は呼ばれない
void Hoge()
{
Pen p(Color.Black);
} ←ここで p->Dispose() が呼ばれる
0620デフォルトの名無しさん
2006/11/04(土) 03:02:35だからtry 〜 finallyで自分でgcnewした物をDisposeしておくのがいいかもしれん。
0621デフォルトの名無しさん
2006/11/04(土) 13:22:20{
Pen^ p = %Pen(Color.Black);
}
0622デフォルトの名無しさん
2006/11/04(土) 14:55:38なるほどありがとうございます。
C#の癖でそういう書き方出来ることすっかり忘れてました。
0623デフォルトの名無しさん
2006/11/05(日) 13:30:17C++/CLIは出来るだけ避けないとヤバイ。
0624デフォルトの名無しさん
2006/11/05(日) 17:22:09いやほらその、明らかに話の順序おかしくね???
0625デフォルトの名無しさん
2006/11/05(日) 17:40:21出来るだけ使わないに越したことはない。
ISOにも採用されてないし。
0626デフォルトの名無しさん
2006/11/05(日) 19:12:26C++とC++/CLI(safe)を切り替えられるようにしてるけどな。
でも既存のライブラリはそのままでは使えないからすごい面倒なんだよな...
0627デフォルトの名無しさん
2006/11/10(金) 01:04:19#importなどを使ってCOM経由で使うというのはどう?
アンマネージドなVC++でやれるよ。
0628デフォルトの名無しさん
2006/11/11(土) 01:02:02その前提が既におかしいと思うんだが、finalyとか無いのどうしてんだ。
ハンドル型は全部テンプレートでラップしてんのか。
そもそもCLI使うなよくらいの話だと思うんだが、どーなのよ。
0629デフォルトの名無しさん
2006/11/11(土) 03:31:380630デフォルトの名無しさん
2006/11/11(土) 10:58:45もう、それだけで致命的。
0631デフォルトの名無しさん
2006/11/14(火) 09:17:14使用メモリー量が増えている原因がガーベージコレクション待ちなのか、本当にメモリー
リークなのか良くわかりません。
確認のために、gcnewで確保したインスタンスを個別に解放したいんですが、普通に
deleteを呼び出して解放すれば良いんでしょうか?
他にメモリーリークのデバッグでよい方法をご存知の方がいましたら、ご教示くださると
嬉しいです。よろしくお願いします。
0632デフォルトの名無しさん
2006/11/14(火) 12:35:580633デフォルトの名無しさん
2006/11/14(火) 16:53:140634デフォルトの名無しさん
2006/11/15(水) 18:19:30おすすめな初心者解説サイトないですぁ?
0635デフォルトの名無しさん
2006/11/15(水) 18:23:300636デフォルトの名無しさん
2006/11/19(日) 18:10:35まだインスタンスは生成できないのでgcnew 〜使わない方法で
0637デフォルトの名無しさん
2006/11/19(日) 19:28:190638デフォルトの名無しさん
2006/11/19(日) 20:26:280639デフォルトの名無しさん
2006/11/19(日) 20:53:59arrayって可変長配列なんじゃね?
0640デフォルトの名無しさん
2006/11/19(日) 20:59:47array<String^>^ a = gcnew array<String^>(4);
0641デフォルトの名無しさん
2006/11/19(日) 22:33:260642デフォルトの名無しさん
2006/11/19(日) 23:37:270643デフォルトの名無しさん
2006/11/20(月) 01:20:38MSDNインストールすればいけるの?
0644デフォルトの名無しさん
2006/11/22(水) 09:05:18なんかISOやらJISやらで採用されてるみたいだけど
このスレでの叩かれ具合を見てると手を出さないほうがいいか
0645デフォルトの名無しさん
2006/11/22(水) 09:16:460646デフォルトの名無しさん
2006/11/30(木) 17:16:35面白いと思ったんで試してみたら、
DbDataReader^ TestClass::TestCode()
{
// 接続作成
DbConnection^ connection = %OracleConnection("User ID=;Password=;Data Source=");
// ステートメントの作成
DbCommand^ command = connection->CreateCommand();
command->CommandText = "SELECT * FROM TABLE WHERE FIELD1=1";
// OracleDBに接続
connection->Open();
// 取得する
return command->ExecuteReader();
}
MSIL上ではさっさとDisposeが呼ばれてしまいました。(´・ω・`)
0647デフォルトの名無しさん
2006/11/30(木) 17:17:09private DbDataReader TestCode()
{
OracleConnection connection1;
DbCommand command1 = null;
DbConnection connection2 = null;
OracleConnection modopt(IsConst) local1 = (OracleConnection modopt(IsConst)) new OracleConnection("User ID=;Password=;Data Source=");
try
{
connection1 = local1;
connection2 = connection1;
}
fault
{
connection1.Dispose();
}
connection1.Dispose();
command1 = connection2.CreateCommand();
command1.CommandText = "SELECT * FROM TABLE WHERE FIELD1=1";
connection2.Open();
return command1.ExecuteReader();
}
0648デフォルトの名無しさん
2006/11/30(木) 17:23:250649デフォルトの名無しさん
2006/11/30(木) 17:32:510650デフォルトの名無しさん
2006/11/30(木) 18:23:58C# の using() {} 構文に匹敵できる事を期待していたのですが、
確かにManagedじゃないC++とかVB.NETとかJavaと同じだと言われれば、それまでの話です。
あと、
Class1 c1;
Class2^ c2 = c1.getClass2();
try {
// 処理
}
finally
{
delete c2;
}
とか書くと、正常ケースの時に c1→c2の順にdisposeされてしまうみたい?です。
結局、このC++/CLIのDisposeパターン?はあくまで限定的な状況でのみ使える特殊技で、
基本は旧来の gcnew + try〜finally + delete だと思っておいた方が良いって事でしょうかね?
0651650
2006/11/30(木) 18:31:49Class1 c1;
Class2^ c2 = c1.getClass2();
try {
// 処理
return; //<-ぬけてました。
}
finally
{
delete c2;
}
もちろん、途中でreturnするのが行儀悪ですが、知らないとハマりそうかなと。
0652デフォルトの名無しさん
2006/11/30(木) 20:47:010653デフォルトの名無しさん
2006/11/30(木) 22:56:43ttp://www.microsoft.com/japan/msdn/vs05/visualc/VS05Cplus.aspx
の「リソース管理」にも
> しかし、単純な Using テンプレート クラスを作成し〜
とあって、気にはなってたのですが、こんな感じなのでしょうかね?
template<typename T>
ref struct Using
{
Using(T^ s) : p(s) {}
~Using() { delete p; }
operator T^() { return p; }
T^ operator ->() { return p; }
static T% operator *(Using% u) { return *(u.p); }
private:
T^ p;
};
ILを見ましたが、一応それらしく動いてはいるような気はします。
が、私は C++ と template についてはミジンコなのでイマイチ自信が・・・。orz
#スマートポインタという物の存在を3時間前に知りました。
0654デフォルトの名無しさん
2006/12/01(金) 00:16:560655デフォルトの名無しさん
2006/12/01(金) 01:02:42値型の事だと思って単純に ref → value としたのですが
> 値型に既定のインスタンス コンストラクタ、デストラクタ、コピー コンストラクタなどの関数を含めることはできません。
と怒られてしまいました。
私は勘違いしてるのでしょうか?
0656デフォルトの名無しさん
2006/12/01(金) 08:21:080657デフォルトの名無しさん
2006/12/01(金) 10:48:22やはり無理なんですね。勉強になります。
別案として、結局は常にハンドルが相手ですし、
またIDisposable.Disposeを呼びたいというだけなので、
generic という手もアリ?
generic<typename T>
ref struct Using
{
Using(IDisposable^ s) : p(static_cast<T>(s)) {}
~Using() { delete p; }
operator T() { return p; }
T operator ->() { return p; }
private:
T p;
};
でも、この場合は*演算子をオーバーロードできないような気がしますけど。
0658デフォルトの名無しさん
2006/12/01(金) 11:09:27ref struct Disposer
{
Disposer(IDisposable^ s) : p(s) {}
~Disposer() { delete p; }
private:
IDisposable^ p;
};
として、
Class1^ class1 = Class1->CreateClass1();
Disposer dummy1(class1);
として使うんでも一応、必要機能は満たせますね。
ソースは汚くなりますけど。
#逆に、ILの方は意外と綺麗だったりするけど。(try〜finallyよりは。)
tenplate を使うか、generic を使うか、Disposerクラスを起こすかは局面しだいって所か。
もはやVB.NETですら導入されてる事ですし、C++/CLI にUsing構文(相当機能)を入れてもらえるのが
パフォーマンス等の面でも一番良いのですけど、政治的に難しいのかな。
けど、ない物でもユーザーの工作で何とでもなっちゃうのが面白いと、ミジンコは思いました。<C++
0659デフォルトの名無しさん
2006/12/11(月) 02:31:20最後の行しか表示できないんだよね、テキストボックスのプロパティは
multilineはtrue、ScrollBarsはVerticalに設定してるのだが他に
何か設定する部分ってあるのかな?
コードは間違ってないと思うのだけど・・・・・
0660デフォルトの名無しさん
2006/12/11(月) 06:55:200661デフォルトの名無しさん
2006/12/11(月) 20:02:06自慢じゃぁないけどこんな感じです.配列処理がしたかったのでチト変わってますが
特別な事はやってないはずなのですが。
private: virtual System::Void toolStripButton1_Click(System::Object^ sender, System::EventArgs^ e) sealed
{
using ::System::Windows::Forms::DialogResult;
OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog;
openFileDialog1->InitialDirectory = "C:\\";
openFileDialog1->Filter = "txt file(*.txt)|*.txt|全てのファイルAll files (*.*)|*.*";
openFileDialog1->FilterIndex = 2;
openFileDialog1->RestoreDirectory = true;
String^ line = "";
ArrayList al = gcnew ArrayList();
if ( openFileDialog1->ShowDialog() == DialogResult::OK )
{
String^ file = openFileDialog1->FileName;
IO::StreamReader^ sr = gcnew IO::StreamReader(IO::File::OpenRead(file));
while ((line = sr->ReadLine()) != nullptr)
{
al.Add(line);
}
for (int i = 0; i < al.Count; i++)
{
textBox1->Text = Convert::ToString(al[i] + "\r\n");
}
sr->Close();
}
}
0662デフォルトの名無しさん
2006/12/11(月) 20:45:25プログラム通り動いてるじゃん
0663デフォルトの名無しさん
2006/12/11(月) 22:50:571行(最終行)しかテキストボックスに表示されないのですが・・・・・
やりたいことは、全行テキストボックスに表示したいんですが。
0664デフォルトの名無しさん
2006/12/11(月) 22:56:13for (int i = 0; i < al.Count; i++) {
a = Convert::ToString(al[i] + "\r\n");
}
さて、a は最終的にどうなるかね。
0665デフォルトの名無しさん
2006/12/12(火) 03:53:02寝てもうた、目が覚めたら自己解決しました。
また寝ますオヤフミ
0666デフォルトの名無しさん
2006/12/13(水) 10:18:48どうすればいいのでしょうか?
#include <atlstr.h>
を記述すると、
C3641エラー (/clr:pure または /clr:safe と共にコンパイルされた関数に対する呼び出し規約 '__stdcall ' が無効です)
がたくさん出てしまいます。
このため、共通言語ランタイムサポートを、ただの /clr に変えてみたのですが、今度は
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\ocidl.h(8005) : error C2872: 'IServiceProvider' : あいまいなシンボルです。
'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) の可能性があります : IServiceProvider'
または 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
というようなエラーが出てしまいます。。。
0667デフォルトの名無しさん
2006/12/13(水) 17:30:07そういう曖昧さが発生するから、C++ではusingディレクティブの使用は昔から勧められていない。
0668デフォルトの名無しさん
2006/12/14(木) 06:25:06ラッパークラスを作成しないとそのまんまじゃ使えないよ。
0669デフォルトの名無しさん
2006/12/14(木) 13:57:300670デフォルトの名無しさん
2006/12/14(木) 19:26:28ポインタなら使えるんじゃ
0671デフォルトの名無しさん
2006/12/16(土) 19:02:06作成した場合、そのWindowのハンドルインスタンス(HINSTANCE)は
どうすれば取得できますか?
Win32APIアプリケーションでは、
WinMain関数の第一引数としてすでに与えられていますよね。
0672デフォルトの名無しさん
2006/12/16(土) 19:24:55ウィンドウが関連付けているものではなく、WinMainの引数で得るのと近い雰囲気(中身は同じだが)。
GetWindowInstance(ウィンドウハンドル) <windowsx.h>
ウィンドウハンドルからそいつに関連付けられたインスタンスハンドルを取り出す。
GetWindowLongPtrのラッピング、HINSTANCEにキャスト済み。
using System::Reflection::Assembly;
using System::Runtime::InteropServices::Marshall;
static_cast<HINSTANCE>(Marshall::GetHINSTANCE(
Assembly::GetEntryAssembly().GetModules()[0])).ToPointer())
せっかくなので.NET Frameworkから方法を探してみた。
GetHINSTANCEの引数に与えるモジュールオブジェクトを手に入れるまでが一苦労、その後キャストするのも一手間。
0673デフォルトの名無しさん
2006/12/16(土) 19:37:37さっそく、ありがとうございます。
Win32APIも初心者なので、そういう関数があること知りませんでた。
助かります。
0674デフォルトの名無しさん
2006/12/21(木) 06:37:47STL/CLR specification
http://download.microsoft.com/download/5/9/c/59cd0dc5-4691-4c3e-840c-66d865f27692/stlclr.xps
XPS Viewer
http://www.microsoft.com/downloads/details.aspx?FamilyId=4A7B8983-7BE1-4740-BC9C-D377A8F2D6EB&displaylang=en
0675デフォルトの名無しさん
2006/12/21(木) 13:02:15DialogResult dr;
と書くとコンパイルエラーになるんです。
なんかproperty Form::DialogResultと勘違いしているみたいです。
C#ならちゃんと型だと解釈してくれるんですけど
0676デフォルトの名無しさん
2006/12/21(木) 19:38:06諦めれ
0677デフォルトの名無しさん
2006/12/21(木) 20:32:030678デフォルトの名無しさん
2006/12/21(木) 23:17:120679デフォルトの名無しさん
2006/12/22(金) 14:56:24たとえば自分はよくfor構文の@に「;」をつけてしまって
それに気がつかず悩むことが多々ありました。
0680デフォルトの名無しさん
2006/12/23(土) 18:24:45textBox1->Text = hoge;
とすると、空行が出来てしまうのですが(改行が残る)、空行ではなく行自体を削除する場合
どう書けばいいデツカ?
0681デフォルトの名無しさん
2006/12/23(土) 20:51:520682デフォルトの名無しさん
2006/12/23(土) 21:28:18680ですが
それやるとコンパイルは通るが実行すると例外が発生します。
System.ArgumentNullException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報: 値を Null にすることはできません。
0683デフォルトの名無しさん
2006/12/23(土) 21:45:19.NETの正規表現はperl5準拠ということなので
perlではddで空白行が削除できるらしいのですが
これを.net的に書くとどう書くのでしょうか
if (str == ""){
str = Regex::Replace(str, "\\dd", " $& ");
}
これでは無理デスタ
0684デフォルトの名無しさん
2006/12/23(土) 22:00:20大体 680 の内容がさっぱり分からん。改行が残るって何?
nullptr 入れても例外とかでないし。
ArgumentNullException が出た時のスタックトレースとかどうなってんの?
0685デフォルトの名無しさん
2006/12/23(土) 22:36:43サンクス
というか御免なさい、文字出力の部分で空行だろうと、何でも\nを付加シテマスタ
そりゃあ全部改行が付くしだいでして・・・・・
今気づいた申し訳なかった、スマソ
0686デフォルトの名無しさん
2006/12/24(日) 19:28:38良いのか分かりませんでしたが、ようやく使う時が来ました、ところが下記のコードではローカル関数の定義が正しくありませんとでます
MSDN見ても
関数内で関数の定義を試みました。
または、ソース コード内の C2601 エラー位置の前に、余分な中かっこが含まれている可能性があります。
何処が悪いのか教えてくださいませ。
オナガイシマス
void Counter::countUp()←error C2601: 'Foo::Form1::Counter::countUp' : ローカル関数の定義が正しくありません。
{
this->lineCounter++;
}
ref class Counter
{
private:
int lineCounter;
public:
void countUp();
};
0687デフォルトの名無しさん
2006/12/24(日) 19:33:43ま、出てる内容だけじゃ断言できないけど。
0688デフォルトの名無しさん
2006/12/24(日) 19:59:55どうも686です、頭パニクッってます
書き方的にはおかしくないと理解しても良いですか?
ただ
>>クラス定義の中で関数定義しちゃってる予感
何に着眼して問題点を探せば良いのでしょうか?
0689デフォルトの名無しさん
2006/12/24(日) 20:58:46>void Counter::countUp()
クラスの宣言と実装の順番が逆とかいう話じゃないよな?
0690デフォルトの名無しさん
2006/12/24(日) 21:21:40どうもです順番はForm1.hに下記のような順番で記述しています。
開始
#pragma once
namespace C_Laanguage_Analysis_Tool {
using namespace System;
using namespace System::Text;
using namespace System::IO;
省略
private: System::Void tabPage3_Click(System::Object^ sender, System::EventArgs^ e)
{
}
ref class Counter{
private:
int lineCounter;
public:
void countUp();
};
private: virtual System::Void toolStripButton1_Click(System::Object^ sender, System::EventArgs^ e) sealed
{
省略
void Counter::countUp(){
this->lineCounter++;
}
省略
}
以下自作の関数
};
}
終わり
0691デフォルトの名無しさん
2006/12/24(日) 21:31:10ref class Counter{からそれに対応する};までの間に書け。
System::Voidは単にvoidで良い、ってIDEがSystem::Voidを出力するんだっけ。
0692デフォルトの名無しさん
2006/12/24(日) 21:47:510693デフォルトの名無しさん
2006/12/24(日) 21:52:44ref class Counter{
private:
int lineCounter;
public:
void countUp();
};
をいろんな処に書いてみたのですが、結果はNGです・・・・・どうしたらいいんだろう
#pragma region Windows Form Designer generated code
↑
いじったら怒られるところ
↓
#pragma endregion
←ここもだめ
private: Void toolTip1_Popup(System::Object^ sender, System::Windows::Forms::PopupEventArgs^ e){
}
←ここもだめ
private: Void tabPage1_Click(System::Object^ sender, System::EventArgs^ e){
}
←ここもだめ
private: Void tabPage3_Click(System::Object^ sender, System::EventArgs^ e){
}
←ここもだめ
private: virtual Void toolStripButton1_Click(System::Object^ sender, System::EventArgs^ e) sealed
{
0694デフォルトの名無しさん
2006/12/24(日) 22:24:020695デフォルトの名無しさん
2006/12/24(日) 22:51:33具体的には、
openFileDialog1を開いてファイル選択してオープン
文字処理を施し
テキストボックスに出力
ざっとこんな流れです
自前の関数はそのブロックの外に置いています。
こんな感じです。
0696デフォルトの名無しさん
2006/12/24(日) 22:54:460697デフォルトの名無しさん
2006/12/24(日) 22:59:57toolStripButton1_Click の中で Counter::countUp 定義したら駄目なんですか?
ちょっと待って下さい外で定義してみます
ref class Counterの位置は今のままでOKですよね・・・・?
0698デフォルトの名無しさん
2006/12/24(日) 23:11:390699デフォルトの名無しさん
2006/12/24(日) 23:16:07ref class Counter {
private:
int lineCounter;
public:
void countUp();
};
void Counter::countUp()
{
this->lineCounter++;
}
private: virtual System::Void toolStripButton1_Click(System::Object^ sender, System::EventArgs^ e) sealed
{
こうしたら、コンパイラ エラー C3254
'explicit override' : クラスは明示的オーバーライド 'override' を含みますが、関数宣言を含むインターフェイスから派生していません。
メソッドを明示的にオーバーライドする場合、オーバーライドを含むクラスは、オーバーライドする関数を含む型から直接または間接的に派生する必要があります。
となりました、これってどう対処したらよいのでしょうか
0700デフォルトの名無しさん
2006/12/24(日) 23:27:510701デフォルトの名無しさん
2006/12/24(日) 23:35:16末尾に追加したらコンパイルは通りました、馬鹿者に付き合っていただき
スンマセンでした。
感謝しております。
0702デフォルトの名無しさん
2006/12/24(日) 23:52:40末尾では、だーれも認めてくれなかったので先頭で
public:
using namespace System;
省略
続きに書いたら、
Counter^ addition = gcnew Counter();
addition->lineCounter = 1;
これもOKにナリマスタ、ようやくこれで宣言まではできました。
0703デフォルトの名無しさん
2006/12/27(水) 03:47:07ウィザードから吐かれたmain内の↓部分で、
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
フォームのイベントが無いときはずっと自前の処理をループさせて
イベントがあったときだけフォームの処理をさせるようにしたいと思いまして、
以下のように改造しました。
Form1 frm = gcnew Form1();
frm.Show();
while(frm.Created)
{
〜略(ココに好きな処理)〜
Application::DoEvents();
}
そしてこれをコンパイルしたところ、
error C3673: 'test::Form1' : クラスはコピー コンストラクタを含んでいません
と怒られました。
エラーの意味をマニュアルで調べましたがどういうことか良く分かりません。
正しくはどう書いたらよいか教えてください。
0704デフォルトの名無しさん
2006/12/27(水) 03:53:110705デフォルトの名無しさん
2006/12/27(水) 04:00:52サンクス子。解決しました。
0706デフォルトの名無しさん
2006/12/28(木) 04:37:56Managed C++とかC++/CLIとかいう単語が出てきて浦島太郎状態なのですが、一つ質問を。
データ処理部は普通のC++でSQLiteを呼び出し、UI部は.NET Frameworkの機能を使いたいのですが、
C++/CLIを使うと両者は共存できるのでしょうか?
0707デフォルトの名無しさん
2006/12/28(木) 06:16:41できるよ〜。
DLLだけでなくOBJ/LIB単位でもネイティブとマネージドを混在できるので、
よほどことをしてない限り問題なし。
マネージドからネイティブへの文字列の変換がちとめんどいだけ。逆方向は問題なし。
0708デフォルトの名無しさん
2006/12/28(木) 08:57:170709デフォルトの名無しさん
2006/12/28(木) 16:19:28というのも指導教官に「それはよくない。美しくない」と指摘されたのですが、
実用性を重視するなら、ありといえばありですよね?
みなさんが直面された重要な困難があれば教えて欲しいです。
0710デフォルトの名無しさん
2006/12/28(木) 16:38:220711デフォルトの名無しさん
2006/12/28(木) 16:51:44総合質問スレみたいなの探してるんだけど見つからないのです。
0712デフォルトの名無しさん
2006/12/28(木) 20:39:24http://pc8.2ch.net/test/read.cgi/tech/1167036858/l50
ところで、C++では関数の中に関数を書くことはできないよな。
(gcc拡張とか関数の中にクラスを書くとかは除いて)
0713デフォルトの名無しさん
2006/12/28(木) 20:53:360714デフォルトの名無しさん
2006/12/30(土) 13:17:24を宣言したいのですが、どう書くのでしょうか
0715デフォルトの名無しさん
2006/12/30(土) 19:11:400716デフォルトの名無しさん
2006/12/30(土) 19:24:25配列の識別子の実体ってポインタなの?
0717デフォルトの名無しさん
2006/12/30(土) 21:39:100718デフォルトの名無しさん
2007/01/02(火) 15:01:24C++/CLIでWindows Mobileの.NET Compact Framework用のアプリを作れますか?
開発環境はVisual Studio 2005で.
0719デフォルトの名無しさん
2007/01/03(水) 23:21:18CLIの問題というかC++の問題な気がするのだけど、C#なら
public Hoge( int hoge ) {...}
public Hoge() : this( 1234 ) {...}
こんなんでコンストラクタの使い回しが出来るけれどC++/CLIだと無理ですか?
0720デフォルトの名無しさん
2007/01/03(水) 23:27:34悪い、C#触ったことないから、何を意味してるのかわからない。
0721デフォルトの名無しさん
2007/01/03(水) 23:31:01普通のC++では、その段階でオブジェクトの構築が終わっていない故に、
初期化リストでthisを使うのは未定義の振る舞いを生む。
0722デフォルトの名無しさん
2007/01/03(水) 23:42:04C#では、あるコンストラクタから別のコンストラクタを呼び出すことが出来るんで、
こうするとデフォルトコンストラクタで1234と初期化できます
class Hoge
{
private m_hoge;
public Hoge( int hoge ) { m_hoge = hoge; }
public Hoge() : this(1234) {}
};
コードの重複を避けるために便利なだけですね。
重複を防ぐだけならprivateメンバ関数でも作って
そこで初期化すりゃいいじゃんって話ですが、なんとなく気になったので…
>>721
ここで使ってるthisは自分のクラスのコンストラクタという意味のthisで、
C++の自分自身のポインタという意味のthisとは別の意味なんです
(もちろんC#でもthisは自分自身を表すけれどこの場合は特別)
0723デフォルトの名無しさん
2007/01/03(水) 23:42:27まあ>>719 の用事なら
クラス定義で
Hoge( int hoge = 1234);
ができるけど。
0724デフォルトの名無しさん
2007/01/03(水) 23:43:35CLIではref classの関数のデフォルト引数の設定が出来ないです。
0725デフォルトの名無しさん
2007/01/04(木) 00:51:24ref class Hoge
{
int m_hoge;
public: //時と場合によってprotected或いはprivate
Hoge(int hoge) : m_hoge(hoge) {}
public:
static Hoge^ CreateHoge(int hoge) {return gcnew Hoge(hoge);}
static Hoge^ CreateHoge() {return gcnew Hoge(1234);}
};
0726デフォルトの名無しさん
2007/01/04(木) 01:02:42普通にインスタンス生成できないのは美しくないので…
流石にそこまで言うと贅沢ですかね。
結局、いつもネイティブC++でやってる
全コンストラクタで使うprivateメンバ関数を別に用意する方法にしました。
皆さん色々ご意見ありがとうございました。
0727デフォルトの名無しさん
2007/01/04(木) 01:16:540728デフォルトの名無しさん
2007/01/04(木) 11:30:58public ref class Form1 : public System::Windows::Forms::Form
これを継承して例えばMyAppとかいうクラスを作りたいんですけど
どうやって書いたらよいですか?
マネージは知らないので、今までネイティブクラスに
gcroot<Form1^> m_frm;
などとメンバに持たせてコントロール類にアクセスしたりしてましたけど
面倒になったので、素直に継承させるのが正しいかなと思いました。
あと、継承させるとなるとMyAppもマネージ型のクラスにする必要があると思いますが、
このクラスには普通のネイティブな型の変数とかをメンバに持たせられるのでしょうか?
0729デフォルトの名無しさん
2007/01/04(木) 13:31:08普通のネイティブ場メンバは持てないが、ネイティブ側からマネージド・クラスを friend に
指定するなり、アクセサを用意するなりで、相互操作は簡単だ
0730デフォルトの名無しさん
2007/01/04(木) 14:45:32そもそもForm1自体をいじってはダメか?
0731デフォルトの名無しさん
2007/01/04(木) 15:10:28COM なら com::ptr だが
0732デフォルトの名無しさん
2007/01/04(木) 19:57:50http://msdn2.microsoft.com/ja-jp/library/ms235281(VS.80).aspx
0733デフォルトの名無しさん
2007/01/06(土) 17:52:24それとC++が書けるのにわざわざC++/CLIで書くメリットとデメリットは何なのでしょうか?
素人的な質問ですがどうぞ宜しくお願いします
0734デフォルトの名無しさん
2007/01/06(土) 18:09:54C++で.NETフレームワーク用のアプリケーションを記述するための拡張規格。
文法的にC++の上位互換になっている。
メリットはC#やVBなど他の.NETアプリケーションとの親和性が高く、
また.NETフレームワークの言語の中ではもっともネイティブAPIやライブラリとの相互運用性に優れている。
デメリットは.NETフレームワークが必要になること。
C++/CLIをサポートするコンパイラ(開発環境)にVisual C++2005がある。
これはネイティブと.NET(マネージド)の両用。初心者が知らずにC++/CLIを使ってしまうことがあり、
C++すれでスレ違いと怒られることが多々ある。
0735デフォルトの名無しさん
2007/01/06(土) 18:11:17.NET Framework必要か、そうでないか。
っていえばわかりやすいのかな。
C++は特に何も入れなくても動くけど、
C++/CLIはランタイム必要。
.net使うのはC#で書いたほうがいいような気がするけど。
0736デフォルトの名無しさん
2007/01/06(土) 18:29:08Java における JNI を .Net 用に構文として整理したもの
JVM の代わりに CLR をロードし、その上でいろいろとやる
0737デフォルトの名無しさん
2007/01/06(土) 18:54:37C++はそれなりに経験があります(ここ何年かはJavaばっかりであんまり触ってませんが・・・)。
0738デフォルトの名無しさん
2007/01/07(日) 08:30:49>>735
>>736
ありがとうございました。
ですが、C++/CLIはC#と同じくVM上で動かすことになるので
C++に比べて速度が落ちると思うのですが、大体どれ位落ちてしまうものなんでしょうか?
0739デフォルトの名無しさん
2007/01/07(日) 09:08:58難しい質問だな。VC++2005Expressは無料で手に入るから自分で試してみるのがいい。
0740デフォルトの名無しさん
2007/01/07(日) 14:19:49皆さんは設定とかをグローバルに置きたい時はどうしていらっしゃいますか。
やはりSingletonパターン?
0741デフォルトの名無しさん
2007/01/07(日) 14:30:140742デフォルトの名無しさん
2007/01/07(日) 14:34:40それより、起動がすごく遅いっていうのがなぁ…
い
0743デフォルトの名無しさん
2007/01/07(日) 14:36:18設定クラスを作ってインスタンスを持ちまわる。
決してグローバルに参照できるような変数には代入しない。
0744デフォルトの名無しさん
2007/01/07(日) 14:36:49ngen
0745デフォルトの名無しさん
2007/01/07(日) 17:49:41>>743
どうも。まぁ、そうした方が健全ですよね・・・。
0746デフォルトの名無しさん
2007/01/09(火) 09:39:19hoge.h
partial ref class Hoge{
public:
// ここには public 項目しか書きたくない
}
hoge.cpp
partial ref class Hoge{
// hoge.h に書けなかったこと全部
}
とかやりたい。
interface クラスは意味がないし。
0747デフォルトの名無しさん
2007/01/09(火) 17:22:39//hoge.h
ref class Hoge {
public:
void PublicFunc();
private
void privateFunc();
};
//hoge.cpp
#include <hoge.h>
void Hoge::PublicFunc()
{
//...
}
void Hoge::privateFunc()
{
//...
}
0748デフォルトの名無しさん
2007/01/09(火) 18:23:140749デフォルトの名無しさん
2007/01/09(火) 18:36:370750デフォルトの名無しさん
2007/01/09(火) 23:41:070751デフォルトの名無しさん
2007/01/09(火) 23:44:180752デフォルトの名無しさん
2007/01/10(水) 00:05:240753デフォルトの名無しさん
2007/01/10(水) 00:27:59ところで、System::Runtime::CompilerServicesにIsLongとかIsConstとかあるんだね。
0754デフォルトの名無しさん
2007/01/15(月) 20:52:13自動生成された雛形のForm1にデザイナでコントロールを配置して
それぞれのイベントの処理関数を書いていたのですが
Form1.hがどんどん肥大化して段々と見難くなって来ました。
そこで、機能のグループごとにForm1を継承したクラスFormを作り、
イベント処理関数(雷マークのところで追加したやつ)を
オーバーライドすればいいのかと思ったんですけど
どうやって書いたらいいのでしょうか?
例えばForm1.h内に追加されたイベント処理関数が
private: System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e) {}
であったとして、
これをForm2内でオーバーライドして内容を実装したいです。
具体的にどう書けばいいか教えてください。
あと、そもそもこういう時ってどうしたらいいんでしょうか?
継承して欲しいイベント処理関数だけオーバーライドするってのは正しいですか?
0755デフォルトの名無しさん
2007/01/15(月) 20:52:530756デフォルトの名無しさん
2007/01/15(月) 21:44:470757754
2007/01/15(月) 22:20:48すいませんがまだ不勉強なものでよく分かりません。
とりあえず下のように書いてみましたけど
public ref class Form2 : Form1
{
private: System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e) {
MessageBox::Show(""); }
};
ビルドは通るもののメッセージボックスは出てきてくれません。
正しくはどうやって書いたらいいでしょうか。
0758デフォルトの名無しさん
2007/01/15(月) 22:30:10private: virtual System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e) {}
0759デフォルトの名無しさん
2007/01/15(月) 22:40:08_tcscpy(_tcsrchr(buffer, _TEXT('\\')) + 1, _TEXT(log));
warning C4996: 'strcpy' が古い形式として宣言されました。
とC4996に注意されたので、いつものごとく
返還前
_tcscpy
↓
安全な型に変換
_tcscpy_s
こうしたら、今度は
error C2660: 'strcpy_s' : 関数に 2 個の引数を指定できません。
と本気で怒られました、どうしたらイイデツカ
教えて下さいエロイヒト
0760デフォルトの名無しさん
2007/01/15(月) 22:41:560761デフォルトの名無しさん
2007/01/15(月) 22:51:24そのソースが十分信頼にたるものなら警告は無視していい。警告を抑制したいならこれでコンパイル。
cl /D_CRT_SECURE_NO_DEPRECATE xxx.cpp
_tcscpy_sを使いたいならマニュアルを参照。バッファの最大サイズを指定する引数が増えてるはずだ。
0762754
2007/01/15(月) 22:58:45イベント処理関数のコントロールへの登録と宣言はForm1の方で
デザイナが勝手に吐いてくれた奴です。
で、教えていただいたとおりForm1の方の宣言の方にVirtualを付けてみたんですけど
なぜか反応してくれませんでした。
宣言にVirtualをつけて尚且つ派生クラスで実装してるわけですが、
コントロールへの登録の際は特別何か考慮せずにそのままで良いのですか?
0763754
2007/01/15(月) 23:02:20>コントロールへの登録の際は特別何か考慮せずにそのままで良いのですか?
コントロールへ処理関数を登録している部分は特別何か考慮せずにそのままで良いのですか?
↓ココ
this->numupdown->ValueChanged += gcnew System::EventHandler(this, &Form1::numupdown_ValueChanged);
0764デフォルトの名無しさん
2007/01/15(月) 23:15:33C2660
メンバ関数の呼び出し形式に合うように関数呼び出しを書き直します。
スコープ解決演算子 (::) を使用して、グローバルな名前空間で関数名を検索するようにコンパイラに通知します。
スコープ演算子はありえないと思っていたが、足らない引数が分からなかった
_tcscpy(_tcsrchr(buffer, _TEXT('\\')) + 1, ,sizeof(buffer) + 1, _TEXT(log));
これで幸せにナレマスタ
0765デフォルトの名無しさん
2007/01/15(月) 23:17:27_tcscpy_s(_tcsrchr(buffer, _TEXT('\\')) + 1,sizeof(buffer) + 1, _TEXT(log));
0766sein
2007/01/15(月) 23:24:23[2] 問題文(含コード&リンク): OpenGLに円錐曲線を表示する
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: .NET 2003
[3.3] 言語:C++
[4] 期限: [2007年01月19まで]
IGESファイルをOpenGLをつかって描画する。
IGESファイルが持っている情報は
下記URLの一番上の公式
a b c d e f と開始(x,y)座標 終了(x,y)座標
http://ja.wikipedia.org/wiki/%E5%86%86%E9%8C%90%E6%9B%B2%E7%B7%9A
なんとか集めた参考ページ
http://www.az.cs.is.nagoya-u.ac.jp/class/comp-sys/CS5.ppt#21
http://www.az.cs.is.nagoya-u.ac.jp/class/comp-sys/CS5.ppt#41
http://www.koders.com/cpp/fidB4392909A8EF1158E86EA715151B410ED71C2FEE.aspx?s=ConicArc
以上、よろしくお願いいたします。
0767デフォルトの名無しさん
2007/01/15(月) 23:28:37おっとと、privateのままだった。
protected: virtual System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e) {}
継承したほうには override が必要なはず。
0768デフォルトの名無しさん
2007/01/15(月) 23:39:29_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESという手もある。
0769754
2007/01/16(火) 00:02:43//Form1.h
protected: virtual System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e) {}
//Form2.h
public ref class Form2 : Form1
{
protected: virtual System::Void numupdown_ValueChanged(System::Object^ sender, System::EventArgs^ e)
override { MessageBox::Show("");}
};
と書いてみましたがメッセージボックス出てくれないです。
なんで〜・・・orz
0770デフォルトの名無しさん
2007/01/16(火) 00:13:04ref class では継承のデフォルトはpublicだから、
public ref class Form2 : public Form1 とやる必要はないはずだし、
まさかこういうところを間違ってるとかないよな?
Application::Run(gcnew Form1()) ・・・ Form2に変えてないとか
0771754
2007/01/16(火) 00:37:50Form1 ^frm = gcnew Form1();
frm->Show();
App* pApp = new App();
while(frm->Created)
{
Application::DoEvents();
}
//////////////////////////////////////////
class App
{
private:
gcroot<Form2^> m_frm2;
public:
App();
~App();
void Init();
};
こんな感じでAppにメンバとしてForm2をもたせてgcnewしてるんですけど、
これでは呼ばれないんでしょうか?
実際に表示しているのはForm1なんですが、
Form1のイベント処理関数を
Form2とかForm3とかいうクラスにグループごとにまとめてそっちで実装したいんです。
動機はForm1.hが肥大化してきて見辛いから、というだけなんですが。。。
0772デフォルトの名無しさん
2007/01/16(火) 00:54:08Application::DoEvents()をループするよりも。
0773754
2007/01/16(火) 01:52:02DoEventでやってるのはゲームっぽいものを作ってるからなんですけど、
どちらにせよループまわしたりRunしたりするのは
Form1ではダメなんですか?
Form1から継承したクラスが複数あったら
どれを使ったらよいのでしょう?
というか、そもそもVSのCLIでちょっと大きいアプリを作るときって
皆さん普通はどうやって作るんですか?
Form1.hがどんどんでかくなっていくんですけど。。。
0774デフォルトの名無しさん
2007/01/16(火) 01:54:340775754
2007/01/16(火) 09:17:18はい。771のAppってクラスはUI以外の処理を書いてます。
でもなんでできないんだろう・・・
そもそもの動機や解決のアプローチが間違ってるんだろうか。
ものすごく王道で当たり前のことと思ったんですけど、
そうじゃないんでしょうか。
怒られそうですが、
誰か同じことやって試してみてください・・・
と甘えてみる。
0776デフォルトの名無しさん
2007/01/16(火) 09:36:47コンパイル時に生成ファイルに埋め込んでしまう事で、
実行時に「C#のnetmodule」の方を必要としない1個のDLLを作成する事は、
2003(.NET1.1)ではできるのでしょうか?
ただし、C++のソースにはDLLエクスポートした関数を含めたいので、
alを使う方法は使えないと思ってます。(多分。)
いちおう、2005(.NET2.0)では上記を満たす方法があるのは(C# と C++/CLI の組み合わせで)動作を確認しているのですが、
同じ方法を2003(C# と Managed C++)で試みると、リンカで
> XXXX.netmodule : warning LNK4003: ライブラリの形式が無効です。ライブラリは無視されます。
と出て、実行時に「C#のnetmodule」を必要とするDLLが作成されてしまいました。
(´・ω・`)
0777デフォルトの名無しさん
2007/01/16(火) 11:01:08度まで、それに対応する華氏温度を計算し,
下記のような対応表を作成しなさい。
F=5/9C+32.0
出力は、左右に2列に摂氏温度と華氏温度が{表}になるようにしなさい。
この問題が分からないのですが、よかったら誰か教えてくださいorz
0778754
2007/01/16(火) 11:13:10もし返信いただける方はそちらでお願いします。
0779デフォルトの名無しさん
2007/01/16(火) 12:16:33.netmoduleはマルチアセンブリのための仕掛けだから基本的に出来ない。
サードパーティのツールでマルチアセンブリを単一アセンブリにするものはあるらしいが標準ではない。
ところでマルチアセンブリを有効活用してる例というのはトンと見ないね。
0780デフォルトの名無しさん
2007/01/16(火) 14:46:46どこでなにやってるか全然ワカランので、中盤以降に説明つけてください!
あともう少し素人が作ったっぽくなりませんか?
0781デフォルトの名無しさん
2007/01/16(火) 15:02:42>>780
どこでなにがどうC++/CLIと関係があるのか全然ワカランので、説明つけてください!
あともう少しなんとかなりませんか?
0782デフォルトの名無しさん
2007/01/16(火) 15:15:20スレ違いみたいでしたスマソ
0783デフォルトの名無しさん
2007/01/16(火) 21:21:540784デフォルトの名無しさん
2007/01/16(火) 21:23:41http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1113396&SiteID=7
俺も興味があるのでウォッチ。
0785デフォルトの名無しさん
2007/01/16(火) 22:35:55あっちでも似たような回答しか出ませんな。
継承の意味を間違って理解してるのがあれだね。
0786デフォルトの名無しさん
2007/01/17(水) 09:38:32つか、ミスの内容が・・・(^^;
その辺りで単なる凡ミスじゃなく、それこそ学校の宿題を人にやらせようとしてる類と思われて適当に流されてるような。
数少ない回答も「子供に教える口調」になってるし。
>>779
やっぱりできませんか。現場じゃ使いにくいなぁ。(´・ω・`)
ちなみにマルチアセンブリを有効活用できるってどんな可能性が考えられるんでしょ?
私は今回のように違う言語を組み合わせる時、以外は思いつかないんですけど。
0787デフォルトの名無しさん
2007/01/18(木) 00:40:59VS2005 std でC++/CLI で、クラスを作っているのですが、
たとえば、こんなんでビルドすると、
ref class Test
{
virtual void test(void){;}
};
warning C4486:
ref クラスのプライベート仮想メソッドまたは値クラスは、'sealed' に設定されなければなりません
という警告が出ます。
エラーではないのでそのまま実行できますが、気になります。
オーバーライドされる可能性があるから仮想メソッドにするのではないのでしょうか?
なのにsealedに設定するってどういうことですか?
また、sealed をつけたとしても、派生クラスを作ってオーバーライドすることも
できてしまうようです。
何か思い違いをしているのでしょうか?
0788デフォルトの名無しさん
2007/01/18(木) 00:53:27publicかprotectedじゃないと派生クラスから見えんでしょ。
0789デフォルトの名無しさん
2007/01/18(木) 01:03:280790787
2007/01/18(木) 01:24:540791787
2007/01/18(木) 02:42:13public ref class Test1
{
virtual void test(void) {処理1;}
public:
virtual void CallTest(void){test();}
};
public ref class Test2 : public Test1
{
virtual void test(void) override {処理2;}
//public:
//virtual void CallTest(void) override {test();}
};
で、以下を実行すると
Test1^ test1 = gcnew Test1;
Test2^ test2 = gcnew Test2;
test1->CallTest();
test2->CallTest();
結果はビルド時に警告、実行時エラーとなる
そこで、Test2::test の "override" を取り除くと、
実行結果は
処理1
処理1
となって基底クラスのtest()が実行される
この状態でTest2のコメントアウトを外すと
処理1
処理2
となる
0792787
2007/01/18(木) 02:44:29C#・・・private のオーバーライドは不可
MC++・・・private のオーバーライドできる
C++/CLIはC#のようにprivateオーバーライド不可ってこと?
それって不便なことない?
0793デフォルトの名無しさん
2007/01/18(木) 05:26:51ただ同じC++/CLIの中でref classと通常クラスで流儀が違ってくるのはいただけない感じ。
ところでMSDNの警告C4486にある「プライベート仮想関数 sealed の使い方の一例を次に示します。」
の部分のコードだけど誰か説明してくれ。さっぱりわからん。
ref class B {};
ref class D : B {};
interface class I {
B^ mf();
};
ref class E : I {
private:
virtual B^ g() sealed = I::mf {
return gcnew B;
}
public:
virtual D^ mf() {
return gcnew D;
}
};
0794デフォルトの名無しさん
2007/01/18(木) 09:56:18不便も何も、MC++がオーバーライド可能であることが「そんな馬鹿な」って感じだけど。
>>793
インターフェイスのメソッドのオーバーライドだから仮想でなくてはならない(だからvirtual)
→C++/CLIではインターフェイスの明示的な実装は別名を付ける必要がある(だから関数の代入構文(へんなの・・・))
→でもその別名は外に公開したくない(だからprivate)
→privateな仮想関数はこれ以上オーバーライドできないよ(だからsealed)
だと思う。一応言っておくとE::g()はI型の参照経由ならちゃんと呼び出せます。
個人的には明示的な実装に別名付けさせることの必要性が納得いかないんだけどね。
>通常クラスで流儀が違ってくるのはいただけない感じ。
むしろ違うものを似せて作ってあるから混乱することの方が多いような。
0795デフォルトの名無しさん
2007/01/18(木) 12:31:480796デフォルトの名無しさん
2007/01/18(木) 16:52:18それをC++/CLIでラップしてC#で使えるようにする場合、
プロジェクトの新規作成>VC++>CLR>クラスライブラリ
でいいんですか?
あと、プリコンパイル済みヘッダーは使用する設定でいいんですか?
0797デフォルトの名無しさん
2007/01/18(木) 21:21:56Cにもあるべ
0798デフォルトの名無しさん
2007/01/19(金) 11:51:55「静的でないメンバ関数の呼び出しが正しくありません」とエラーが出てうまくいきません。
マネージクラスをアンマネージからfriend指定することはできないでしょうか?
もしくは単純に書き方がおかしいんでしょうか。
↓のような感じでイベントがあったらAppの関数を呼びたいです。
//アンマネージクラス
class App
{
friend ref class Form1;//(friend class Form1 でもダメでした)
public:
App();
~App();
void call();
};
//マネージクラス(フォームアプリでデザイナが吐いたクラス)
public ref class Form1 : public System::Windows::Forms::Form
{
〜略〜
};
System::Void Form1::trackBar_ValueChanged(System::Object^ sender, System::EventArgs^ e)
{
App::call();
}
0799デフォルトの名無しさん
2007/01/19(金) 12:27:35書いてあるとおりで、Appのインスタンスの関数を呼ぶならばそのようにする必要があるし、
App::call()を静的メンバ関数にするならばstatic void call();と宣言する必要がある。
0800デフォルトの名無しさん
2007/01/19(金) 12:50:19すいません、ありがとうございました。
staticにすることでビルドは通りました。
意味的にも段々わかってきました。
0801デフォルトの名無しさん
2007/01/22(月) 16:10:28sizeof演算子使うとエラー出ます。
0802デフォルトの名無しさん
2007/01/22(月) 16:31:38C言語で4次のルンゲクッタを使用して、バネ振り子の位置変化についてやっています。
どなたか教えていただけないでしょうか?
t=0.0;
x=1.0;
dt=0.1;
x=x0;
t=t0;
v=v0;
for(i=1; i<=100; i++)
{
x1=x(t)
x2=x(t)+0.5*dt*v1
x3=x(t)+0.5*dt*v2
x4=x(t)+dt*v3
x(t+dt)=x(t)+dt*(v1+2*v2+2*v3+v4)/6
v1=v(t)
v2=v(t)-0.5*dt*(k/m)*x1
v3=v(t)-0.5*dt*(k/m)*x2
v4=v(t)-dt*(k/m)*x3
v(t+dt)=v(t)-dt*(k/m)*(x1+2*x2+2*x3+x4)/6
0803デフォルトの名無しさん
2007/01/22(月) 16:32:29C言語で4次のルンゲクッタを使用して、バネ振り子の位置変化についてやっています。
どなたか教えていただけないでしょうか?
t=0.0;
x=1.0;
dt=0.1;
x=x0;
t=t0;
v=v0;
for(i=1; i<=100; i++)
{
x1=x(t)
x2=x(t)+0.5*dt*v1
x3=x(t)+0.5*dt*v2
x4=x(t)+dt*v3
x(t+dt)=x(t)+dt*(v1+2*v2+2*v3+v4)/6
v1=v(t)
v2=v(t)-0.5*dt*(k/m)*x1
v3=v(t)-0.5*dt*(k/m)*x2
v4=v(t)-dt*(k/m)*x3
v(t+dt)=v(t)-dt*(k/m)*(x1+2*x2+2*x3+x4)/6
0804デフォルトの名無しさん
2007/01/22(月) 17:23:32>>803
まず落ち着いて、/CLIの意味を考えるんだ
0805デフォルトの名無しさん
2007/01/22(月) 18:32:28マネージド型でsizeofが使えるのは値型だけ
value class か value struct を使う
0806デフォルトの名無しさん
2007/01/29(月) 04:10:39http://msdn2.microsoft.com/en-us/library/aa730837(vs.80).aspx
を読むと、「msclr::auto_handle使えばスマートに書けるぜ」みたいなことが書いてあるものの、
あまり釈然としないのですが、他に何か定番な方法があったりするんでしょうか。
0807デフォルトの名無しさん
2007/01/29(月) 16:25:58VC++6.0のソースは.cで書かれているC言語です。C++でもありません。
C言語で書かれたWindowsAppllicationです。
納品先からVC.net2005を指定されました。サポートがあるからだそうで。
なのでVC++6.0のdswをVC.net 2005で開いて、自動で変換されました。
sprintfとかが古い形式だといわれて、すべて直しました。
これで、うごけばそれでいいと上司に言われました。
無事に動きました。テスト仕様書もクリアーしました。
これで仕事は終わりです。
皆様、これのデメリットを教えてください。
コンパイルオプションはclrを設定せず”共通言語ランタイム サポートを使用しない”です。
ランタイムライブラリは"マルチスレッド DLL (/MD)"です。
コンパイル言語の選択は"C++ コードとしてコンパイル (/TP)"です。
実際問題、
そんなに実行速度が遅いともかんじません。
マネージコードとアンマネージコードを両方つかってるわけではないので
切り替え時間もありません。
プログラム上に.net frameworkを一切使ってません。
会社の財産をそのまま使えたということで
このまま行くみたいなんです。個人的にはマネージドコードで作成しなおしたいのですが。
客からは金ももらえないし、時間もないそうです。
なんか、時代の流れに乗っていないのです。
なんか、私の気づかない問題点があれば教えて下さい。
0808デフォルトの名無しさん
2007/01/29(月) 16:33:26>なんか、時代の流れに乗っていないのです。
ここの行だけ読んだ。
0809デフォルトの名無しさん
2007/01/29(月) 16:53:27807で、書いたものです。長すぎましたかね。失礼しました。
0810デフォルトの名無しさん
2007/01/29(月) 16:58:21困ったことに縦読み箇所も笑いどころも見つからないんだ。
0811デフォルトの名無しさん
2007/01/29(月) 17:02:08807で書いたものです。
ジョークではないです。なんか私が気のつかない観点からアドバイスを
もらえればと。それだけです。縦読みではないです。
0812デフォルトの名無しさん
2007/01/29(月) 18:03:16まぁこの時点でスレ違いなんで他でもっと簡潔に聞いてみるがよろし。
0813デフォルトの名無しさん
2007/01/29(月) 20:23:29なのですれ違いではないのでは?
まあ、個人じゃなくて仕事なんだから、動いているコードは弄るなでFAでしょ.
0814デフォルトの名無しさん
2007/01/29(月) 22:17:20そもそも自動変数として宣言できるときにはそれを使えばすむ。
そういう風によそから得たハンドルに対してC++デストラクタ (IDispose.Dispose)を確実に呼び出したければ、
msclr::auto_handle(たぶんアンマネージ版msclr::gcroot)を使うしかないと思う。
逆に言えばその必要がなければ(当たり前だけど)単にハンドルを保持すれば十分。
と、お前が考えていそうなことと変わらないと思うぞ。
0815VC6 から VC8 (.Net2005) への移行
2007/01/30(火) 10:55:28for 文で宣言した制御変数のスコープが VC6 と .Net2005では違うので注意しろ……とレスしようと思ったが、
C++ ではなく C なのか。なら関係ないね。後、気をつけるべき点は wchar_t が unsigned short のtypedefではなくなったことぐらいか。
0816デフォルトの名無しさん
2007/01/30(火) 12:42:13int main(void){
char moji[26];
int i;
for(i=0;i<25;i++){
moji[i] = i + 65;
}
nyuuryoku:
printf("1〜26で頼む。\n");
scanf("%d",&i);
if(i<27 && i>=0){
i -= 1;
printf("%c",moji[i]);
}else{
goto nyuuryoku;
}
return 0;
}
数字入れたら、A〜Zの文字が出るように書いてみたんですが、
26を入れてもZがどうやっても出てきません。何ででしょうか・・・・・・?
0817デフォルトの名無しさん
2007/01/30(火) 13:32:05恐れもなく goto を使う兵だな。
ループ構造がわかってるなら、break のことも勉強しる。
0818デフォルトの名無しさん
2007/01/30(火) 14:20:19レス�dです。
最初から配列にセットしてないとはどういう意味でしょう・・・・・?
「文字コードを代入して表示できるのかなー?」的な考えでやってみたのですが・・・・・・
goto文ってあまり使わないほうがいいんですね。
初めて知りました。。
0819デフォルトの名無しさん
2007/01/30(火) 15:23:40が元凶。moji[24]までしか入っていない。
あとスレ違い。こっちのほうがよさげ。
http://pc10.2ch.net/test/read.cgi/tech/1153542424/l50
0820デフォルトの名無しさん
2007/01/30(火) 16:53:53なるほど。
.NET関連の資料を探していると、どうしてもC#のものが多いのでC++/CLIに読み替えないといけないわけですが、
例えば、using(SqlTransaction tran = con.BeginTransaction()) {...}みたいな構文になっているところは、やはり
ちゃんと後始末をした方がいいんでしょうかね。
0821デフォルトの名無しさん
2007/01/30(火) 22:37:451.マネージドなアセンブリに、ネイティブなスタティックライブラリを
リンクさせることはできるんでしょうか?
(アセンブリの使用者に、ネイティブDLLの配置を気にさせたくない)
2.既存のライブラリの関数の引数がこうなってます↓
typedef void* HANDLE
int Open(HANDLE& com);
int Close(HANDLE com);
そこで、こんなクラスから呼び出そうとしました。
ローカル変数なら大丈夫ですがインスタンスフィールドの場合はコンパイルすら通りません。
pin_ptrというものを使えばいいらしい、と考えましたが、さっぱり分かりません。
どうやればインスタンスフィールドを関数の引数に使えますか?
ref class Cls
{
private:
HANDLE _handle;
public:
Cls(void);
void Test(){
HANDLE handle;
Open(handle);//OK
Open(_handle);//NG
}
};
0822デフォルトの名無しさん
2007/01/31(水) 00:38:05>pin_ptrというものを使えばいいらしい、と考えましたが、さっぱり分かりません。
pin_ptr<HANDLE> ph = &_handle;
Open(*ph);
0823デフォルトの名無しさん
2007/01/31(水) 00:42:11http://mag.autumn.org/Content.modf?id=20050506023118
0824デフォルトの名無しさん
2007/01/31(水) 02:48:570825デフォルトの名無しさん
2007/01/31(水) 08:11:33レスthx!!
ありがとうございました。
0826デフォルトの名無しさん
2007/01/31(水) 09:31:000827デフォルトの名無しさん
2007/01/31(水) 09:48:00>>824
やっぱり実際使おうと思うと、そんなに画期的な物じゃないんですよね?
DbProviderFactoryから作るDbConnectionとかDbCommandとか、TcpClientから作るNetworkStreamとか、
こういうのこそ生存期間を管理したいのに適用できないし、
自動変数より自動変数じゃない変数の方が多い所で使うと、ドット演算子と->演算子が変に混ざって可読性が下がるしで、
自分は結局、実業務では自己満足レベルしか使えてないです。
そればかりか、返ってusingがなくてauto_handle使わなきゃいけないから、C#より無駄なコードが多くなってたり。
0828デフォルトの名無しさん
2007/01/31(水) 11:41:28>Written By: 川俣 晶
ここまで読めば残りは読まなくてもOK
0829デフォルトの名無しさん
2007/01/31(水) 12:08:050830820
2007/01/31(水) 12:48:07検索する中で>>823も読んでいたので、何かテクニックがあるのかと思っていたのですが。
0831デフォルトの名無しさん
2007/01/31(水) 15:33:33-> か . かを使いたいかで使い分ければいいのでしょうか?
auto_gcroot<M1^> m1(gcnew M1()); m1->func();
auto_handle<M1> m1(gcnew M1()); m1.func();
MSDNには
auto_gcrootは「ネイティブ型に仮想ハンドルを埋め込むために使用できる自動リソース管理」
auto_handleは「マネージ型に仮想ハンドルを埋め込むために使用できる自動リソース管理」
と説明があるので気になっております。クラスのタイプによって使い分けなければいけないとかありますか?
0832デフォルトの名無しさん
2007/02/01(木) 21:01:08マネージ(値・参照)クラスは、ネイティブクラスのオブジェクトをメンバに持てない。
だから、クラスのメンバでは自ずとどちらを使うか決まってしまう(auto_gcrootはネイティブクラス、auto_handleはマネージクラス)。
0833デフォルトの名無しさん
2007/02/01(木) 22:56:38返答ありがとう。
クラスのメンバーで使いかたを間違った場合はコンパイルエラーになるからわかるのだけれども、
main関数やクラスのメソッド内でローカルに使った場合に使い分けがあるかどうかがわからないのです。
どちらもコンパイル・実行時ともエラーにはならないようです。
0834デフォルトの名無しさん
2007/02/01(木) 23:05:57強いて言えばauto_handleが使えるところではauto_handleを使っておけばいいのでは、と俺は思う。
そういえばアンマネージド (#pragma unmanaged)な部分では関数でもauto_gcrootしか使えないだろうな。
0835デフォルトの名無しさん
2007/02/08(木) 23:12:520836デフォルトの名無しさん
2007/02/08(木) 23:32:460837デフォルトの名無しさん
2007/02/08(木) 23:52:29C# の is 演算に該当するものってあったっけ?
0838デフォルトの名無しさん
2007/02/09(金) 00:05:470839835
2007/02/09(金) 01:35:25if( MyObj->GetType() == MyClass::typeid ) 〜
けど、MyObj が MyClass の派生クラスのインスタンスだと false になっちゃうのがイマイチです。
もうちょっと探してみます。
0840デフォルトの名無しさん
2007/02/09(金) 01:39:01>>837-838
0841デフォルトの名無しさん
2007/02/09(金) 02:26:31if( MyClass::typeid->IsAssignableFrom( MyObj->GetType() ) ) 〜
>>840
ありがと!それも参考にしてみます。
他のアドバイスをシカトしてるわけじゃないんですよ。
順を追っていろいろ試してみたかったもので。
0842デフォルトの名無しさん
2007/02/10(土) 19:15:02実際は複数あるはずのファイルが一つしか見当たらなかったりしてうまくいきません。
どこがおかしいでしょうか?配列の生存範囲とかは関係ない・・・ですよね?
変なところがあったら教えてください。お願いします。
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e){
String^ currentDir = Directory::GetCurrentDirectory();
textBox1->Text = currentDir;
array<String^> ^files = gcnew array<String^>(1);
serchFilesInDir(currentDir,"*.txt",files);
for each(String^ file in files){
textBox2->Text += file;
}
}
private: void serchFilesInDir(String^ currentDir, String^ ex ,array<String^> ^files){
//現在のディレクトリ内のファイルを検索
array<String^> ^curDirFiles = Directory::GetFiles(currentDir, ex);
for each(String^ file in curDirFiles){
files[(files->Length)-1] = file;
Array::Resize(files,(files->Length)+1);
}
//現在のディレクトリ内にディレクトリがあれば再帰的に検索
array<String^> ^dirs = Directory::GetDirectories(currentDir);
for each(String^ dir in dirs){
serchFilesInDir(dir, ex,files);
}
}
0843デフォルトの名無しさん
2007/02/10(土) 19:44:47private: void serchFilesInDir(String^ currentDir, String^ ex ,array<String^>^% files){
つーか素直にList<>を使えよ(笑
0844デフォルトの名無しさん
2007/02/10(土) 19:56:45うまくいきました。
しかもそんな便利なものがあるって知らなかったです。
ありがとうございました。
そして祥子は俺のアナルを
0845デフォルトの名無しさん
2007/02/10(土) 20:03:240846デフォルトの名無しさん
2007/02/10(土) 20:09:560847デフォルトの名無しさん
2007/02/11(日) 02:18:280848デフォルトの名無しさん
2007/02/11(日) 02:39:49ネイティブ C++ の引数に使う & と大体同じ
0849847
2007/02/11(日) 02:54:18ありがとうございます。
array<String^> は、String オブジェクトへのポインタの配列ですよね。
array<String^>^ は、そのポインタ配列オブジェクトへのポインタですよね?
array<String^>^% となると、ポインタ配列オブジェクトへのポインタの参照ということになりますか?
>>843 のように定義される関数の場合、関数内で files へ値(新たな array<String^>^) を代入すると、呼び出し元の
変数の内容もその値に変化するということになるでしょうか?
0850デフォルトの名無しさん
2007/02/11(日) 03:36:45あと ^ はポインタじゃなくてトラッキングハンドル。
別名ハンドルとか参照とか。参照は % と区別付けづらいけど。
0851デフォルトの名無しさん
2007/02/11(日) 13:37:22ってダメなんですか?
vectorはgcrootでマネージ型持てるみたいなんですが。
0852デフォルトの名無しさん
2007/02/11(日) 13:47:30でもネイティブクラスのオブジェクトへのポインタを持ちたいんで
その条件を満たしてくれないといけないのですが。
0853デフォルトの名無しさん
2007/02/11(日) 22:45:02// Visual C++ 8
// cl /Zs /clr test.cpp
#using <mscorlib.dll>
#include <map>
#include <msclr/gcroot.h>
int main() {
std::map<msclr::gcroot<System::String^>, int> hoge;
}
0854デフォルトの名無しさん
2007/02/11(日) 23:44:590855デフォルトの名無しさん
2007/02/12(月) 01:15:30>>853
うちもmap作るだけならできましたけど
insertの段階でエラーでませんか?
今試していたら一瞬コンパイル通ったきがしたけど(気のせいか)やっぱダメみたいです。
>>854
試してみてダメだったんで、一応なんか自分のうっかりじゃないか確認で聞きたいんですが、
ネイティブオブジェクトのインスタンスとかポインタは入れられないですよね?
0856デフォルトの名無しさん
2007/02/12(月) 02:46:59ref class testclass {
void func()
{
static const struct { const char *p; const int x; } tbl[] = {
{ "abc", 100 },
{ "def", 200 },
{ "ghi", 300 }
};
}
};
ところがこれは、「ローカルクラス、構造体、または共用体の定義は、マネージクラスのメンバ関数では使用できません」となってしまいます。
このようなテーブルはどう実現するべきなのでしょうか?
0857デフォルトの名無しさん
2007/02/12(月) 05:46:23ref class testclass {
ref class ABC {
String^ s; int x;
public:
ABC(String^ s, int x) { this->s = s; this->x = x; }
property String^ S { String^ get() { return s; }};
property int X { int get() { return x; }};
};
static initonly array<ABC^>^ tbl = { gcnew ABC("abc", 100), gcnew ABC("def", 200), gcnew ABC("ghi", 300) };
public:
void func() { ... = tbl[0]->X; }
};
0858デフォルトの名無しさん
2007/02/12(月) 05:47:47// .h
ref class testclass { void func(); };
// .cpp
static const struct { const char *p; const int x; } tbl[] = {
{ "abc", 100 },{ "def", 200 },{ "ghi", 300 }};
void testclass::func() {
... = tbl[0].x;
}
0859856
2007/02/12(月) 06:57:47うーむ、なるほど。
できるだけ狭いスコープ内で、できるだけ軽く定義したいのに、なかなか不便なものですね・・・
しかも struct はこのように回避できそうですが、union とかは難しそうですね。
struct や union の中身がネイティブなものだけだったら仕様的に問題なさそうなのに、惜しいです。
なんにせよ、ありがとうございました。
0860デフォルトの名無しさん
2007/02/12(月) 10:38:17854ではおそらくマネージオブジェクトしか入れられない。
std::mapでエラーになる原因は、std::mapがキーに対して通常operator <を要求するため。
しかしmsclr::gcroot<System::String^>はそれを持っていないのでエラーになる。
だから独自の比較子を定義してやればよい。
struct SystemStringComparer : std::binary_function<
const msclr::gcroot<System::String^>&,
const msclr::gcroot<System::String^>&, bool>
{
result_type operator ()(first_argument_type x, second_argument_type y) const
{
return System::String::Compare(x, y) < 0; //CompareOrdinalにすると文字コード順で比較される
}
};
int main()
{
using msclr::gcroot;
using System::String;
typedef std::map<gcroot<String^>, int, SystemStringComparer> HogeMap;
HogeMap hoge;
hoge.insert(HogeMap::value_type(L"Hoge", 5));
std::cout << hoge[L"Hoge"] << std::endl;
}
0861デフォルトの名無しさん
2007/02/12(月) 13:20:49大変良く分かりました。
今回は仕方なく全部ref classに大改造して
Dictionaryに持たせるようにしてしまった後だったので
次の機会のために忘れないように保存しときます。
ありがとうございました。
0862デフォルトの名無しさん
2007/02/14(水) 10:32:45次の機会があるなら STL/CLR でも調べておいたら?
0863デフォルトの名無しさん
2007/02/17(土) 04:28:36空のCLRプロジェクト作ってでhelloworld出力してみたんですけど
コンパイル、リンク、実行までえらく時間がかかるんですが
これは、コンパイル、リンクでexeを作るまでに時間がかかってるだけなんでしょうか
実行してみて「えれ〜時間かかるな」と思い質問さしていただきます。
0864デフォルトの名無しさん
2007/02/17(土) 04:36:17おそらくメモリー不足、128Mぐらいで使ってるとかしてない?
0865デフォルトの名無しさん
2007/02/19(月) 23:26:27これをするのに obj1 == obj2 とした場合、== 演算子がオーバーロードされてると意図したことができなそうです。
どうすべきでしょうか?
0866デフォルトの名無しさん
2007/02/20(火) 00:17:320868デフォルトの名無しさん
2007/02/23(金) 17:02:230869デフォルトの名無しさん
2007/02/23(金) 17:17:360870868
2007/02/23(金) 17:32:06それは、オブジェクトの外のどこか別のところにフラグのようなものを持つということでしょうか?
ハンドルだけで簡単に判断する方法が無いのでしたらそうしようと考えているのですが。
0871デフォルトの名無しさん
2007/02/23(金) 17:39:510872868
2007/02/23(金) 17:44:46オブジェクト自体は存在しないのは重々承知です。
でも、そのオブジェクトをかつて指し示していたハンドルというか、ハンドルの値が変数に残っているわけで。
確認する方法が無いなら無いなりに設計しますし、マネージドならではの機能があるならそれを利用しようと考えてるのです。
0873デフォルトの名無しさん
2007/02/23(金) 17:45:59newで++
deleteで--
とか
0874デフォルトの名無しさん
2007/02/23(金) 17:51:04WeakReferenceで参照しておけば、開放された場合に target が null になるけど
そういうようなことだろうか。
0875868
2007/02/23(金) 18:04:36それだと、一つのクラスは一つのインスタンスしか管理できないような・・・
というか、二重 delete 防止の方法については自分で考えますので大丈夫です。
>>874
ちょっと WeakReference について勉強しにいってきます。
ありがとうございます。
一応やりたかったことを補足しておきますと、あるクラスがメンバとして
MyClass^ m_obj;
を持っていたとして、コンストラクタで m_obj = gcnew MyClass(); のようなことをして、
デストラクタで delete m_obj; するのです。
しかしデストラクタが呼び出される前に、どこかで delete m_obj; されるケースがある場合、
つまりデストラクタにやってきた段階では既に m_obj は delete されていた場合、
この m_obj の値だけでそのことを判別することはできるのか、
ということです。
いや、どっかで誰かが delete するなら、その時に m_obj を nullptr にしておくなどと言う
方法があるとは思いますが、勉学のために質問してみました。
0876デフォルトの名無しさん
2007/02/23(金) 18:09:540877デフォルトの名無しさん
2007/02/23(金) 18:14:04漏れの個人的な意見だけど、
誰が何時開放してもいいようなオブジェクト
⇒ gc に任せる
ファイルを排他オープンしてたりして、寿命管理をちゃんとやりたいオブジェクト
⇒ 何時解放するか、解放済みか、などちゃんと管理する
って感じなのであんまりそういうことをしたくなったことは無いなぁ。
0878868
2007/02/23(金) 18:18:56>>877
確かにそうなんですけどね。
もしマネージドの機能としてそんなのがあるなら、簡略化したコードの書き方も考えられるかな、とか思いまして。
だから、無いなら無いでいいんです。
0879デフォルトの名無しさん
2007/02/24(土) 00:11:11http://vene.wankuma.com/ecma372/StartingState.aspx
0880デフォルトの名無しさん
2007/02/24(土) 00:25:270881デフォルトの名無しさん
2007/02/24(土) 00:29:39Acrobat の機能はどうでもよくて、pdf版のC++/CLIの仕様書の日本語訳が欲しいんだけど。
0882デフォルトの名無しさん
2007/02/24(土) 01:00:090883デフォルトの名無しさん
2007/02/24(土) 01:00:560884デフォルトの名無しさん
2007/02/24(土) 01:07:550885デフォルトの名無しさん
2007/02/24(土) 01:15:270886デフォルトの名無しさん
2007/02/24(土) 01:16:120887デフォルトの名無しさん
2007/02/24(土) 01:21:040888デフォルトの名無しさん
2007/02/24(土) 01:39:260889デフォルトの名無しさん
2007/02/24(土) 01:53:360890デフォルトの名無しさん
2007/02/24(土) 01:55:270891デフォルトの名無しさん
2007/02/24(土) 01:59:230892デフォルトの名無しさん
2007/02/24(土) 02:04:200893デフォルトの名無しさん
2007/02/24(土) 02:11:310894デフォルトの名無しさん
2007/02/24(土) 02:35:230895デフォルトの名無しさん
2007/02/24(土) 02:42:440896デフォルトの名無しさん
2007/02/24(土) 04:05:00ところで、refクラスのdeleteって出来たっけか?
0897デフォルトの名無しさん
2007/02/24(土) 04:31:29deleteしてもDispose()が呼ばれるだけだから、オブジェクトそのものはGCされるまで残っている。
だからプロパティを参照しても問題なし。
ref class xxx {
bool disposed;
public:
property bool Disposed { bool get() { return disposed; } }
xxx() { disposed = false; }
~xxx() { disposed = true; }
};
0898デフォルトの名無しさん
2007/02/24(土) 11:05:37nullptr代入すればよい?
一応それで狙った動きはしてるみたいですが。
0899デフォルトの名無しさん
2007/02/24(土) 11:59:54それから(変数のスコープがまだ終わらないなら)nullptrを代入するほうがいいかもしれない。
0900デフォルトの名無しさん
2007/02/24(土) 12:58:11わざわざ nullptr 使うのはよほど寿命の長いインスタンスのメンバが途中でいらなくなるときくらい
でそんな状況って凄く稀だよね
0901デフォルトの名無しさん
2007/02/24(土) 15:24:21で、破棄されるときにはオブジェクトのファイナライザが呼ばれると。
delete は、オブジェクトはすぐ破棄されるんでしょ(メモリの回収がいつ行われるかはGCまかせだろうけど)。
この破棄時にはデストラクタが呼ばれると。
ちがったっけ?
0902デフォルトの名無しさん
2007/02/24(土) 23:57:420903デフォルトの名無しさん
2007/02/25(日) 00:07:560904デフォルトの名無しさん
2007/02/25(日) 00:19:140905デフォルトの名無しさん
2007/02/25(日) 00:27:40「stl使わない」とか書いてるからC++適性がないと思われたんだよ
おとなしくC#でP/Invokeしとけ。
0906デフォルトの名無しさん
2007/02/25(日) 00:30:410907デフォルトの名無しさん
2007/02/25(日) 00:32:100908デフォルトの名無しさん
2007/02/25(日) 00:33:320909デフォルトの名無しさん
2007/02/25(日) 00:44:23Lisp で再帰を使わない人
Perl で正規表現を使わない人
には使いにくい言語です。
0910デフォルトの名無しさん
2007/02/25(日) 00:44:41C++/CLIでもそうだと思っても構わないと思う。
でもSTL以外にもC++の特長は色々あるし、そこを見出して
.NETでC++/CLIを使うという選択肢を選ぶ人がいたって構わないだろ。
0911デフォルトの名無しさん
2007/02/25(日) 00:46:26ttp://blogs.wankuma.com/episteme/archive/2006/09/12/38394.aspx
0912デフォルトの名無しさん
2007/02/25(日) 00:50:410913デフォルトの名無しさん
2007/02/25(日) 00:55:14C++/CLIではSTL抜きでも、単にネイティブなCやC++のライブラリに対する
マネージドなラッパを作るなんて用途だったら別に困らないと思う。
0914デフォルトの名無しさん
2007/02/25(日) 00:56:47やっぱりC++/CLIにもSTL(というよりテンプレート)は
欠かせないということでいいと思う。
0915デフォルトの名無しさん
2007/02/26(月) 03:11:28C++はあいまいだけど。
0916デフォルトの名無しさん
2007/02/26(月) 20:32:210917デフォルトの名無しさん
2007/02/27(火) 09:43:230918デフォルトの名無しさん
2007/02/27(火) 09:51:250919デフォルトの名無しさん
2007/03/04(日) 10:53:24かつ、そっちの方が便利なんだよね?
0920デフォルトの名無しさん
2007/03/04(日) 12:37:160921デフォルトの名無しさん
2007/03/04(日) 13:51:510922デフォルトの名無しさん
2007/03/04(日) 14:22:230923デフォルトの名無しさん
2007/03/04(日) 15:19:36STLも.NETつかえばC#には全く不要だけどな。
0924デフォルトの名無しさん
2007/03/04(日) 15:27:450925デフォルトの名無しさん
2007/03/04(日) 16:05:25使うために使ってね、って言語だから。
0926デフォルトの名無しさん
2007/03/04(日) 16:06:290927デフォルトの名無しさん
2007/03/04(日) 16:11:55それより既存の C++ の資産を C# ほどには労せず使えるという点が最大の利点だろう?
0928デフォルトの名無しさん
2007/03/04(日) 17:15:520929デフォルトの名無しさん
2007/03/04(日) 17:42:19C++がやりすぎなところを省略できるC#
ケースパイケース
0930デフォルトの名無しさん
2007/03/04(日) 17:58:050931デフォルトの名無しさん
2007/03/04(日) 18:09:430932デフォルトの名無しさん
2007/03/04(日) 20:22:170933デフォルトの名無しさん
2007/03/04(日) 20:43:020934デフォルトの名無しさん
2007/03/04(日) 20:53:330935デフォルトの名無しさん
2007/03/05(月) 00:42:410936デフォルトの名無しさん
2007/03/06(火) 00:29:120937デフォルトの名無しさん
2007/03/06(火) 00:56:580938デフォルトの名無しさん
2007/03/06(火) 01:00:490939デフォルトの名無しさん
2007/03/06(火) 01:03:440940デフォルトの名無しさん
2007/03/06(火) 01:14:410941デフォルトの名無しさん
2007/03/06(火) 02:03:59一切禁止されてるプロジェクトってどうよ。
0942デフォルトの名無しさん
2007/03/06(火) 05:10:370943デフォルトの名無しさん
2007/03/07(水) 10:45:40あなたのPCにメモリが足りてないか、あなたにカルシウムが足りていない。
0944デフォルトの名無しさん
2007/03/09(金) 14:00:170945デフォルトの名無しさん
2007/03/11(日) 23:53:430946デフォルトの名無しさん
2007/03/12(月) 00:16:200947デフォルトの名無しさん
2007/03/12(月) 20:49:020948デフォルトの名無しさん
2007/03/13(火) 18:43:000949デフォルトの名無しさん
2007/03/13(火) 19:14:520950デフォルトの名無しさん
2007/03/13(火) 19:33:53どういう書き手ならC++がC++/CLIより速いの?
0951デフォルトの名無しさん
2007/03/13(火) 23:04:040952デフォルトの名無しさん
2007/03/13(火) 23:15:56C++/CLIと呼ぶかどうかという問題はある。
0953デフォルトの名無しさん
2007/03/14(水) 10:07:33インテルやAMDのネイティブなアセンブラになるんだよね?
0954デフォルトの名無しさん
2007/03/14(水) 10:17:020955デフォルトの名無しさん
2007/03/14(水) 11:09:22どういうオプションでなる? 詳しい説明がある所のポインタを教えてもらえるとありがたい。
0956デフォルトの名無しさん
2007/03/14(水) 21:17:03/clr あとはMSDNかGoogleで
0957デフォルトの名無しさん
2007/03/14(水) 22:06:42と使い古された半畳
0958デフォルトの名無しさん
2007/03/15(木) 00:09:190959デフォルトの名無しさん
2007/03/15(木) 00:22:200960デフォルトの名無しさん
2007/03/18(日) 17:11:200961デフォルトの名無しさん
2007/03/18(日) 17:21:010962デフォルトの名無しさん
2007/03/29(木) 22:15:49public ref class Test1
{
array<String^>^ strs;
public:
Test1(array<String^>^ strs) : strs(strs){;}
};
public ref class Test2 : public Test1
{
public:
Test2(void) : Test1(gcnew array<String^>{"test1", "test2"}){;} //←ここで引っかかる模様
};
0963デフォルトの名無しさん
2007/03/30(金) 09:28:45確かに通らないね。文法上の制約なのか、コンパイラの制約なのかはわかんね。
0964962
2007/04/04(水) 17:18:38で、今日はこれコンパイル通らんかった。
初期化子の数が多すぎるそうです。
何でも一度に書くなということでしょうかね。
public ref class Test1
{
public:
Test1(void){;}
Test1(array<Test1^>^ tests){;}
};
///////////////////////////////////
array<Test1^>^ test1 = gcnew array<Test1^>{
gcnew Test1(),
gcnew Test1(),
gcnew Test1(gcnew array<Test1^>{
gcnew Test1(),
gcnew Test1()
})
};
0965デフォルトの名無しさん
2007/04/04(水) 17:53:00void change(int *a,int *b);
int main(void){
int a=5,b=3;
change(&a,&b);
printf("%d,%d",a,b);
return 0;
}
void change(int *a,int *b){
int c;
c=a;
a=b;
b=c;
}
aとbを入れ替えるchangeを作りたかったんですがこれだとうまくいきません
どこを直せばいいですかね?
0966デフォルトの名無しさん
2007/04/04(水) 17:59:46#include <algorithm>
void change(int *a,int *b);
int main(void) {
int a=5, b=3;
change(&a, &b);
printf("%d, %d", a, b);
return 0;
}
void change(int *a,int *b) {
std::swap(*a, *b);
}
まあ細かいことは気にしない。
0967デフォルトの名無しさん
2007/04/04(水) 18:10:07ていうかcに代入する時点でエラーか警告出てない?
0968デフォルトの名無しさん
2007/04/04(水) 18:29:46よくわからねーんですが
int *a
この *aはINT型でなくINTのポインタ型
aがINT型
&aがアドレス型?
なんですかね・・・
c=aとしちゃうと、INT型とINTのポインタ型は違う型だから代入できないってことなんでしょうか^^;
0969デフォルトの名無しさん
2007/04/04(水) 18:35:13int c;
c = *a;
*a = *b;
*b = c;
}
次からはただのCのスレ行けよ。
0970デフォルトの名無しさん
2007/04/07(土) 21:06:44文法はある程度分かっても、クラスライブラリがどうなってるかが全く分からない。
例えば、文字列を表示するにはどれを使えばいいかとか....
MSDNライブラリは大量の項目で羅列してるけど、「〜をしたい場合には〜を使う」みたいな使い方はサポートしていない希ガス。
どうやって勉強すれば良いんだろうか.......
0971デフォルトの名無しさん
2007/04/07(土) 21:28:41経験がないことには話にならん
0972デフォルトの名無しさん
2007/04/07(土) 21:34:43適当にググるなど
0973デフォルトの名無しさん
2007/04/07(土) 23:04:37分かりますた。
STLの悪夢を思いだしながらググりまつ。
0974デフォルトの名無しさん
2007/04/08(日) 00:22:540975デフォルトの名無しさん
2007/04/08(日) 01:47:21参考になるかも。
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
ランタイム ルーチンおよび同等の .NET Framework 関数
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/vclrfrun-timeroutinesnetframeworkequivalents.asp
0976デフォルトの名無しさん
2007/04/09(月) 15:23:29ttp://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_02.html
の通りに、関数をラッパするクラスを作って、ネイティブ関数をmanagedな言語
から呼び出すとき、
*.lib (ネイティブ関数ライブラリ)
から
*.dll (managedライブラリ)
を生成する際に
hello.lib(hello.obj) : warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます。
という警告が出ます。
一応、警告を気にせずに実行すれば動作はするのですが、
イマイチ気分的にすっきりしません。
なぜ警告が出るのかわかる方いますか?
ちなみに環境はWinXP + Visual Studio 2005です。
0977976
2007/04/09(月) 15:41:22関数のラップクラス(hellolib)では、リンカのインクリメンタルオプションは
/INCREMENTAL
で有効になっています。
また、ネイティブ関数のライブラリ(hello)では、そもそもプロジェクトの
プロパティページにリンカの設定をする項目がありませんでした。
警告で出ている/EDITANDCONTINUEは、プロジェクトのプロパティ
からどこか探したのですが、どこにあるか発見できませんでした。
0978デフォルトの名無しさん
2007/04/12(木) 13:04:00釣りじゃなくってホントそうおもう
C#じゃだめなの?
0979デフォルトの名無しさん
2007/04/12(木) 14:20:49MSDNで検索しる
ttp://msdn2.microsoft.com/ja-jp/library/962ct2hz(VS.80).aspx
0980デフォルトの名無しさん
2007/04/12(木) 16:29:32Java厨を引き込むためのJ#
ブヴィ厨を引き込むのためのVB.NET
ぷらぷら厨を引き込むのためのMC++, C++/CLI
0981デフォルトの名無しさん
2007/04/12(木) 21:09:27ネイティブとマネージドの世界の橋渡しにはいいと思う。
C#でのinteropと違って、C/C++に用意されたヘッダファイルがそのまま使える。
0982デフォルトの名無しさん
2007/04/17(火) 05:34:22ネイティブ吐けるC#こそ最強!
あったらの話だけどね。
C++/CLIはちと難しすぎるというかややこしいんだよね。
というのもC++から入ってから.NETに行くことになるから。
やっぱ.NETから入ってネイティブという流れで学べる環境じゃないと広がらないと思うんだ。
だからこそネイティブ対応のC#を切望しているわけ。
いまのところC++やっている人はC++/CLIやってくれたらいい。
VB/JAVAやっている人はぜひC#はじめてみてほしい。
初心者はもちC#!
ネイティブC#かぁ〜、ホント楽しみだね。
0983デフォルトの名無しさん
2007/04/17(火) 06:22:350984デフォルトの名無しさん
2007/04/17(火) 08:54:03というよりかはC++が上級プログラマのための言語であるからして、
必然的に、それ以外のプログラマのための言語がC#でありVBだといえなくもない。
とにかくだ。
問題はC++/CLIがC#やVBどころか、C++よりも敷居の高い言語だということなんだ。
このギャップはいったいなんなんだとういう話さ。
わかったかい?
0985デフォルトの名無しさん
2007/04/17(火) 08:55:140986デフォルトの名無しさん
2007/04/17(火) 10:34:28書けるC#があったら、それがC++/CLIってだけの話かと。
0987デフォルトの名無しさん
2007/04/17(火) 17:01:50言いたいことはわからなくもないが、
残念ながらそれを書くべき場所としてここは相応しくない。
せめて.NET FrameworkのスレとかC#のスレとかでだったら共感できるのに。
0988デフォルトの名無しさん
2007/04/21(土) 19:13:29動的に追加したContextMenuStripのメニューアイテムのすべてを
同じイベントハンドらに設定した場合、そのイベントハンドら内で
どのメニューアイテムが選択されたのかを知る一般的な方法って
あるのでしょうか?
いろいろやって見ましたが、なんかうまくいきません。
0989デフォルトの名無しさん
2007/04/21(土) 19:22:080990988
2007/04/21(土) 21:43:03最初にわたってくるオブジェクトとはイベントハンドらの第一引数の
ことでしょうか?
それはthis(メインのフォーム)になっているので、これを
変えればいいのでしょうか?
しかしEventHandlerを作ったときの第一引数にToolStripItem^を
渡すとコンパイルエラーerror C3754になってしまいます。
0991988
2007/04/21(土) 21:50:14いま調べてみたら第一引数は、ToolStripMenuItem^になってました。
レス数が950を超えています。1000を超えると書き込みができなくなります。