VC++2005 sprintf の代わりに Format を使う
sprintf を使うとバイナリを簡単にアスキーコードに変換できるので便利でしたが、MFC では CString の Format がもっと便利でした。
VC++2005 では CString のかわりに、 String を使用しました。
String は型指定方法が "%02x" -> "{0:X02}" になったことや、変換値を Format の戻り値から取得するしかないなど使いにくく感じます。
でも、VC++2005 で MFC は使いたくないのでしょうがないですね。
例では、0x35 というデータを表示用としてアスキーコード 0x33,0x35,0x00(null) に変換します。
----------------------------------------
例)sprintf を使用した場合
----------------------------------------
char moji[3] = { null };
unsigned char bindata = 0x35;
sprintf(moji,"%02x",bindata);
----------------------------------------
例)CString の Format を使用した場合(MFC)
----------------------------------------
CString moji;
unsigned char bindata = 0x35;
moji.Format("%02x",bindata);
----------------------------------------
例)String の Format を使用した場合
----------------------------------------
String^ job;
unsigned char bindata = 0x35;
String^ moji = job->Format("{0:X02}" , bindata);
2007年8月31日金曜日
2007年8月30日木曜日
VC++2005 で シリアル通信を行う
前回 CreateFile() のエラーのため、別の方法でシリアル通信を行うことにしました。
ツールボックスにある”serialPort”を行うことにしました。
いろいろ試行錯誤してやっとテキストボックスに受信データを表示できるようになりました。
//-------------------------------------------------------------------
//■シリアルポート受信スレッド
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
unsigned char rcvData = serialPort1->ReadByte();
System::String^ string1;
String^ moji = string1->Format("{0:X}" , rcvData);
SetText( moji );
}
//■デリゲート
delegate void SetTextCallback(String^ text);
//■テキストボックスセット
private: void SetText(String^ text){
if( this->textBox1->InvokeRequired ){
SetTextCallback^ d = gcnew SetTextCallback(this, &t070824::Form1::SetText);
this->BeginInvoke( d, text );
}
else{
this->textBox1->Text += text;
}
}
//-------------------------------------------------------------------
ツールボックスにある”serialPort”を行うことにしました。
いろいろ試行錯誤してやっとテキストボックスに受信データを表示できるようになりました。
//-------------------------------------------------------------------
//■シリアルポート受信スレッド
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
unsigned char rcvData = serialPort1->ReadByte();
System::String^ string1;
String^ moji = string1->Format("{0:X}" , rcvData);
SetText( moji );
}
//■デリゲート
delegate void SetTextCallback(String^ text);
//■テキストボックスセット
private: void SetText(String^ text){
if( this->textBox1->InvokeRequired ){
SetTextCallback^ d = gcnew SetTextCallback(this, &t070824::Form1::SetText);
this->BeginInvoke( d, text );
}
else{
this->textBox1->Text += text;
}
}
//-------------------------------------------------------------------
2007年8月29日水曜日
VC++2005 と windows.h (続き)
VC++2005 で windows.h をインクリュードできるようになりました。
以下のURLの通りにすればOKです。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
でも、また問題が発生しました。
VC++6.0 で使っていたソースをコンパイルして実行すると、CreateFile() のところで次のエラーが発生します。
'System.NullReferenceException' のハンドルされていない例外が t070824.exe で発生しました。
追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。
なかなか進みませんねぇ。
以下のURLの通りにすればOKです。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
でも、また問題が発生しました。
VC++6.0 で使っていたソースをコンパイルして実行すると、CreateFile() のところで次のエラーが発生します。
'System.NullReferenceException' のハンドルされていない例外が t070824.exe で発生しました。
追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。
なかなか進みませんねぇ。
2007年8月28日火曜日
VC++2005 と windows.h
VC++2005 で windows.h をインクリュードすることができなかった。VC++6.0 やVC++2003であれば、windows.hをインクリュードできたのに。。。
2007年8月24日金曜日
Visual C++ 2005 Express Edition
今日、Visual C++ 2005 Express Edition をインストールしました。
以下より無償でダウンロードできます。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
ユーザー登録が多少面倒ですが、無償なので助かります。
以下より無償でダウンロードできます。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
ユーザー登録が多少面倒ですが、無償なので助かります。
2007年8月22日水曜日
2007年8月16日木曜日
V850の内蔵DSPはどうやって使うのか?
NECのV850には、DSPが内蔵されているようですが、どうやって使用するのか知りません。まだ統合環境ツールをインストールしたばかりなので、DSPの使用方法を調べようと思います。
登録:
投稿 (Atom)