"_bstr_t"の使い方

このQ&Aのポイント
  • この記事では、C++での"_bstr_t"の使い方について解説します。
  • 具体的には、構造体内のunsigned charの数値を文字列に変換して_bstr_tに保存する方法について説明します。
  • また、上記の手法を用いた際に発生するエラーについても対処法を紹介します。
回答を見る
  • ベストアンサー

”_bstr_t”の使い方

今structというのを使って struct Wireless_unit { unsigned char wireless_id[6]; }; こんな構造体を作成しました。 このunsigned char wireless_id[6];  この数値を後で文字列に変換してこの構造体の中に保存して起きたいと思っています。 _bstr_t というのを使ってみたのですが、 struct Wireless_unit { unsigned char wireless_id[6];     _bstr_t wireless_id_str; }; 次のようなエラーが出るのですが、どのように解決すればよいのでしょうか? 1>------ ビルド開始: プロジェクト: HomeBank, 構成: Debug Win32 ------ 1> HomeBank.cpp 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C2146: 構文エラー : ';' が、識別子 'wireless_id_str' の前に必要です。 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\Form1.h(545): warning C4244: '引数' : '__int64' から 'int' への変換です。データが失われる可能性があります。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

http://pt.sourceforge.jp/projects/cc1101driver/ でしょうかね? なんというか…なんぞ書籍のコード(?)らしきものや、ビルドして作成されるファイルまでSubversionリポジトリに突っ込む…というのがどうなのよ? とか思ってしまったりしますが……。 # 行番号見るに回答時点での最新リビジョンではなさげですが。 ということで、とりあえず再現確認(?)してみました。 # ソリューションファイル覗くとVisual C++ Express 2010のようでしたし。 同じエラーにはなりましたが…対処方法については微妙ですね。 stdafx.hに #include <comutil.h> で、不明な型にはならなくなりますが、実行ファイルは生成されません。 # というか別エラーでビルド止まる。 D:\Microsoft Visual Studio 10.0\VC\include\comutil.h(13): fatal error C1189: #error : comutil.h header cannot be included under /clr:safe or /clr:pure だそうで。 プロジェクトのプロパティから「共通言語ランタイム サポート」を変更すると、上記のエラーは出なくなりますが… 別のエラーでやっぱりビルドできません。 ということで、作っている人達に確認するしかないんじゃないですかねぇ。

diy_sunny
質問者

お礼

回答いただきありがとうございます。http://pt.sourceforge.jp/projects/cc1101driver/  ここの者ですw 見ていただきありがとうございました。 ちょっとサンプルとかおいたらまずそうなのは、リポジトリ内から削除する方法とかこれから調べて消すようにします。 助かります。何か方法がないか自分の方でも調べてみます。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>ちょっとサンプルとかおいたらまずそうなのは、リポジトリ内から削除する方法とか 過去のリビジョンから再取得できちゃったりしますけどね。 サンプルに関しては著作権的な問題が出ないとも限らないでしょう。 ビルドに生成されるファイルなどはリポジトリに加えると、コミットしたときに微妙な事態になりかねないので…… VSが起動して作成されるキャッシュ系のファイル(インテリセンスとか)もリポジトリに含めない方がよいかと。 # 拡張子.suoや.ncb、プロジクトファイルでユーザーごとに作成されるもの…など。 って感じでSVNリポジトリの運用に関してならアドバイスも可能ですが… CLIについてはまったく判らないので、元々の問題に関しては他の方の回答待ちでしょうかねぇ…。

関連するQ&A

  • プロジェクトを作った際のエラー

    VisualC++ 2005 Express Editionを使用してます win32コンソールアプリケーション - アプリケーション設定 - windowsアプリケーション この新しく作ったプロジェクトを何もいじらずにビルドすると __imp__EndPaint@8 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__BeginPaint@8 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__DefWindowProcW@16 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__DestroyWindow@4 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__DialogBoxParamW@20 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__EndDialog@8 が関数 "int __stdcall About(struct HWND__ *,unsigned int,unsigned int,long)" (?About@@YGHPAUHWND__@@IIJ@Z) で参照されました。 C:\C++test\test\Debug\test.exe : fatal error LNK1120: 外部参照 19 が未解決です。 というエラーが出てしまいます 800文字オーバーしてしまうのでエラーの前半部分を消してあります この原因と解決方法を教えてください よろしくお願いします

  • 異なる複数の構造体のスマートな使用方法

    構造体のビットフィールドを複数作成し、 条件によってどの構造体を使用するかを決定し データ取得しようとしています。 同じ型の構造体の配列はできますが、 異なる構造体が複数ある場合、配列のように 参照する方法はないでしょうか? スマートなやり方があれば、ご教授お願い致します。 以下、やろうとしていることの簡易版、 /* ----例----------------------------------*/ int test = 1; if( test == 1){ /* 構造体test01を使用し値参照 */ } else if( test == 2){ /* 構造体test02を使用し値参照 */ } else if( ........ /* 以下同じような処理 */ struct test01{ unsigned int bit01: 1; unsigned int bit02: 15; } struct test02{ unsigned int bit01: 2; unsigned int bit02: 14; } struct test03{ unsigned int bit01: 3; unsigned int bit02: 13; } /* 同様の構造体がつづく*/ /* --------------------------------------*/

  • C言語のビットフィールドで分からないところがありま

    union UNION { struct { unsigned int a :(32-8-5); // この部分 unsigned int b :8; unsigned int c :5; }BIT; }; 上記の「この部分」と書いてある行の意味を教えてください よろしくお願いします

  • リトルエンディアン→ビッグエンディアン

    (1)リトルエンディアン typedef struct recvData{  int a;  unsigned char b[16]; unsigned char c[8]; unsigned int d[4]; } recvData_t; recvData_t rData; (2)ビッグエンディアン typedef struct sendData{  int a;  unsigned int b[4]; unsigned int c[2]; unsigned int d[4]; } sendData_t; sendData_t sData; 上記のようなリトルエンディアンの構造体の各メンバのデータを、ビッグエンディアンの構造体の各メンバのデータにそれぞれ格納するには どうしたらよいでしょうか?

  • SDKでのエラーなのですが。

    はじめまして。 SDKの勉強で猫でもわかる~のHPの第37章のサンプルを実行したのですが、 --------------------構成: 037 - Win32 Debug-------------------- コンパイル中... main.cpp D:\SDK\037\main.cpp(230) : error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照) この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 D:\SDK\037\main.cpp(248) : error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。 (新しい機能 ; ヘルプを参照) この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 cl.exe の実行エラー 037.exe - エラー 2、警告 0 というようなエラーが出てしまいました。 このエラーを回避するにはどのようにすればいいのでしょうか?

  • DirectX8 & VC++ ビルドできない!

    今、「DirectX8&VC++」という本を使ってそこに書いてあるプログラムをうつしてビルドしようとしたのですが、 --------------------構成: kihon2_3 - Win32 Debug-------------------- リンク中... kihon2_3.obj : error LNK2001: 外部シンボル ""long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)" は未解決です Debug/kihon2_3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー kihon2_3.exe - エラー 2、警告 0 というエラーが出てしまいました。 VC自体使い慣れていないのでどんなエラーかも理解できません。 よろしければご存知の方がいれば教えてもらえないでしょうか? お願いします。

  • .NET C++で、構造体の配列をnewで作成しようとするとerror C2440のエラーとなってしまいます

    Visual studio2003 .NET C++で、構造体の配列を作成し、 改めて構造体の配列をサイズ指定して作成しようとすると、error C2440が出てしまいます。 ポインターで宣言したつもりはないのですが、ポインターから配列に変換できないといった項目のエラーなので、 なぜこのようなエラーが出るのかわからずにおります。 typedef __nogc struct TEST { // 省略 }; TEST struct_test __nogc[]; int int_num = 10; struct_test = new TEST __nogc[int_num]; // error C2440: '=' : 'TEST *' から 'TEST []' に変換できません。 ご指摘等ありましたらご回答いただけますと助かります。 よろしくお願いいたします。

  • VC6でlong longでエラー?

    VC++6で、void test(unsigned long long a){} の場所で、error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。というエラーが発生します。 unsigned long longはVCで動作するものでしょうか?

  • VC++2008でのサンプルプログラムのビルド

    VC++2008を使用してWin32APIを使ったプログラムを動かしたいと思っている者です。 これまでC言語については多少学んできましたがC++を使用するのは初めてです。 まずはサンプルプログラムを動かそうと思い以下のソースを入力しました。 #include <windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { MessageBox( NULL, _T("Hello World"), _T("メッセージ"), MB_OK ); return 0; } そしてこれをビルドしてみたところエラーメッセージがでてしまいうまくビルドできませんでした。 参考にしているHPはVC++2008での作業を推奨していたので、動作環境の違いなどではないと思うのですが… 初期設定等の問題になるのでしょうか?解決策があれば教えていただきたいです。 以下が表示されるエラーメッセージです。 1>1.obj : error LNK2028: 未解決のトークン (0A000044) "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) が関数 "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z) で参照されました。 1>1.obj : error LNK2019: 未解決の外部シンボル "extern "C" int __stdcall MessageBoxW(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBoxW@@$$J216YGHPAUHWND__@@PB_W1I@Z) が関数 "extern "C" int __cdecl MessageBox(struct HWND__ *,wchar_t const *,wchar_t const *,unsigned int)" (?MessageBox@@$$J0YAHPAUHWND__@@PB_W1I@Z) で参照されました。 1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\1\Debug\1.exe : fatal error LNK1120: 外部参照 2 が未解決です。

  • C++でCの構造体をnewするとまずいのでしょうか?

    以下のようなCで書かれたヘッダがあったとして ---testc.h--- typedef struct __Test { int i; char c[30]; char* x; } Test; これを以下のようにnewして使うのは問題ないでしょうか? ---test.cpp--- extern "C" { #include test.h } int main(void) { Test* test = new Test(); test->i = 30; test->c[3] = 'a'; test->x = "aiueo"; return 0; }