型変換について

このQ&Aのポイント
  • LPSTR aaa = "test"と現在なっているのですが、"test"の後ろにm_hWndの値を入れたいのです。
  • LPSTR aaa = "test" + (LPSTR)m_hWnd;のように記入したのですが、エラーになってしまいます。
  • 「error C2110: ポインタにポインタを加えようとしました。」というエラーが発生します。解決方法が分かりません。
回答を見る
  • ベストアンサー

型変換について

すみません、初歩的な質問だと思いますが、 よろしくお願いします。 LPSTR aaa = "test"; と現在なっているのですが、 "test"の後ろにm_hWndの値を入れたいのです。 そのため、 LPSTR aaa = "test" + (LPSTR)m_hWnd; のように記入したのですが、 (当たり前ですが)エラーになってしまいます。 エラーの内容は、 「error C2110: ポインタにポインタを加えようとしました。」 というものです。 エラーになってしまうのは分かっているのですが、 この解決方法が分かりません(初歩的だとは思うのですが…)。 伝わりにくい文章で恐縮ですが、 どなたかお分かりになる方(型?:笑)、よろしくお願いします。

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

  • ベストアンサー
  • nakashi
  • ベストアンサー率51% (21/41)
回答No.1

LPSTR aaa = "test"; と定義した時点でaaaに格納できる文字数は"test"のサイズになります。 ゆえに変数aaaに文字を追加することは出来ません。 ほかの変数でいいなら char sBuf[256]; sprintf(sBuf,"%s%d",aaa,m_hWnd); #(LPSTR)m_hWndとキャストして文字にはなりません

alfalfa-alpha
質問者

お礼

参考になりました、ありがとうございました。 初歩的な段階で戸惑ってしまうので、とても助かりました。 今後も躓いてしまった時にお世話になるかも知れませんが、 その時はまたよろしくお願いします。

関連するQ&A

  • HWNDへの変換

    度々すみません。 またしても型変換で困っています。 CStringの値をHWNDに変換するには どのようにすれば良いのでしょうか? 早く自分で解決できるようになりたいのですが、 他の問題もあったりしてなかなか…(爆)。 よろしくお願いします。

  • ”wchar_t*型は渡せない”というエラー

    現在、ifjpeg.spiのDLLファイルで画像データを表示させるプログラムを作成中です。 このプログラムで、 if( IsSupported(OpenDialog->FileName.c_str(),theFile) != 0 ) このプログラムでビルドを行うと次のようなエラーが出ます。 [BCC32 エラー] Unit1.cpp(106): E2034 'wchar_t *' 型は 'char *' 型に変換できない [BCC32 エラー] Unit1.cpp(106): E2340 1 番目のパラメータは char * 型として定義されているので wchar_t * 型は渡せない ”IsSupported”は ProcIsSupported IsSupported = (ProcIsSupported)GetProcAddress(hSPI, "IsSupported"); このように宣言していて、 typedef int __stdcall (*ProcIsSupported)(LPSTR,DWORD); このようなプログラムなのですが、解決方法を教えて頂けませんでしょうか?

  • データ型とカラムの型を合わせるにはどうすればよいでしょうか。

    データ型とカラムの型を合わせるにはどうすればよいでしょうか。 先日、下記のような質問をしたところ、下記のような回答を頂いたのですが、具体的にどうすればレコードを追加できるのかわかりません。どうすれば解決できるでしょうか。 {先日の質問} データベースのレコード追加できません。 下記のようなエラーがでてくるのですが、何をすればよいかわかりません。 当方、PHP+MySQL入門(秀和システム)という本を参考に、XAMPP(phpMyadmin)を使ってますが、エラーの解決方法がわかりません。(また、エラーを参照する良い本、サイト等あれば教えて頂ければ幸いです。) わかる方がいらっしゃれば教えて頂ければ幸いです。 エラー あなたの SQL クエリーにエラーがあります。MySQL サーバーは以下のようにエラーを出します。そこには問題を解決する手助けがあるでしょう。 ERROR: 引用符が閉じていません。 @ 81 STR: ' SQL: INSERT INTO member( email, keitai, name, futan, ) VALUES( 'aaa@aaa.com', 0, 'AN', 100 ) 実行された SQL クエリー: INSERT INTO member( email, keitai, name, futan, ) VALUES( 'aaa@aaa.com', 0, 'AN', 100 ) MySQLのメッセージ --> ヘルプ #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES( 'aaa@aaa.com', 0, 'AN', 100 )' at line 7 05-08-23 01:37 回 答 運営スタッフに連絡 No.1 insertするカラムの数はいくつですか? 最後に余計なカンマが見えるのですけど? 最後のカンマをとって見ましょう 入力しようとするデータ型とカラムの型は一致していますか? 型が違うとデータ型違反を起こしますので注意です。

    • ベストアンサー
    • MySQL
  • VC6でALTを作成して、VB6やC#で利用する場合の型の定義の仕方

    COM+の引数や型で悩んでいます。 ALTで型が標準(intなど)でないとコンパイルエラーになると解釈して、 型をユーザー定義型(構造体)にしてデータのやり取りをすれば、どんな引数でも送れると思いました。 そして、その際にはポインタ(4バイト)が使われると仮定して、引数をint datとまるで4バイトの数値のようにしました。 (大丈夫か?) そのポインタを受け取り後、構造体のポインタキャストを当てて、ポインタの中身にアクセスできるようにしました。 このようにすると、コンパイルとするとエラー無しになり、戻り値も正しく返されて、これでいけると思ったのですが、 一部望み通りでない結果が出ました。 通常、ポインタで渡された場合、そのポインタを使って中身(ここではc)を変えた場合、反映されるはずでしたが 戻り値とcの値が異なったため、このやり方は正しくないのではないかと思いました。 ALTに詳しい方、以下のやり方のどこが間違っているのでしょうか? まったく分からないまま、VC6でALTを作成してVisualBasic6でテストしました。 まず、VC6でTest1は、 [in] int dat, [out,retval] int* retval 定義は struct S1 int a[10]; int b[10]; int c; } STDMETHODIMP CTest::Test1(int dat, int *retval) { S1* data = (S1 *)dat; data->c = data->a(0) + data->b(0); // ここでは3になっている。 *retval = data->c; return S_OK; } としてできたDLLをVBの参照設定で取得して呼び出した場合 type S1 a(10) as long b(10) as long c as long end type dim x as S1 x.a(0) = 1 x.b(0) = 2 dim dmy as variant dmy = test.Test1( varptr(x) ) dmy値は3で、x.cの値は3ではありませんでした。 int型など一般的な型やユーザー定義型などを引数として解説しているATLの本など ご存知の方、押してください。

  • Excelで条件にあったセルを検索して、行全体に色をつける方法

    こんにちは 初歩的な質問で大変恐縮なのですが、助けていただけませんでしょうか。 エクセルのシート上のG列4~120行に入っている数値を検索して、その値が条件を満たす場合にその行全体に色をつけたいと思い、以下のようなコードを書いてみたのですが、「型が一致しません」というエラーがでてしまいます。(色は一応つくのですが・・・) Sub TestMacro()  Dim i As Integer   For i = 4 To 120   If Sheets("aaa").Cells(i, "G").Value < 365 Then    Sheets("aaa").Rows(i).Select   Selection.Interior.ColorIndex = 7  End If Next i End Sub この原因は何なのでしょうか?教えてください。 宜しくお願いします。

  •    ダイアログのクラス化で仮想関数を用いて派生クラスにしているんです

       ダイアログのクラス化で仮想関数を用いて派生クラスにしているんですが・・・ ダイアログを基本クラスで静的プロシージャと派生クラスでオーバーライドしてプロシージャを使いたい のですが、どうしても自身のポインタが取得できません。 以下にソースを載せておきます。  class CBaseWnd  {  public:    // ポインタの設定    void SetPointer( HWND hWnd );    // ウィンドウプロシージャの呼び出し    static LRESULT CALLBACK CallProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );    // ウィンドウプロシージャの実装    virtual LRESULT MainProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );  }; [クラスの実装]  //===== ポインタの設定 =====//  void CBaseWnd::SetPointer( HWND hWnd )  {    SetWindowLong( hWnd, GWL_USERDATA, (LONG)this );  }  //===== ウィンドウプロシージャの呼び出し =====//  LRESULT CALLBACK CBaseWnd::CallProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )  {    //_プロパティリストからthisポインタを取得 //ここでポインタを取得することができないでいます。値が0です。 //先にSetWindowlongをやっても値が0のままです。    CBaseWnd* thisPtr = (CBaseWnd*)GetWindowLong( hWnd, GWL_USERDATA );    //_thisポインタが取得できなかった場合...    if( ! thisPtr )    {      //_ウィンドウの作成時の場合... //ここでアクセス違反というエラーが起きる      if( message == WM_INITDIALOG )        thisPtr = (CBaseWnd*)((LPCREATESTRUCT)lParam)->lpCreateParams;      //_thisポインタが取得できた場合...      if( thisPtr )      {        //_プロパティリストにオブジェクトハンドル(thisポインタ)を設定する        thisPtr->SetPointer( hWnd );      }    }    //_thisポインタが取得できた場合...    if( thisPtr )    {      LRESULT lResult = thisPtr->MainProc( hWnd, message, wParam, lParam );      return lResult;    }    return DefWindowProc( hWnd, message, wParam, lParam );  }  //===== ウィンドウプロシージャの実装(継承可能) =====//  // ここでの記述はデフォルトの処理  //  LRESULT CBaseWnd::MainProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )  {    switch( message )    {      //_ウィンドウが破棄された場合      case WM_DESTROY:        PostQuitMessage(0);        return 0;        //_デフォルトの場合      default:        return DefWindowProc( hWnd, message, wParam, lParam );    }  } WM_INITDIALOGでダイアログの初期化中にポインタを取得しようとしますが、アクセス違反が起こり失敗します。 どなたか分かる方がいらっしゃったらご指摘お願いします。

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

    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文字オーバーしてしまうのでエラーの前半部分を消してあります この原因と解決方法を教えてください よろしくお願いします

  • テキストボックスの値のチェック

    テキストボックスの値が未記入であったときに、submitボタンを押したときのジャンプ先のページを変えたいときはどのようにすれば良いのでしょうか? <input type="text" name="Test" size="25"> ↑ これが未記入の時は、 <form action="http://aaa.html" method="post" name="test"> にジャンプして、もし値が入っているときは、 <form action="http://bbb.html" method="post" name="test"> にジャンプさせるっていう感じにしたいのですが... 宜しくお願いします。

  • C、C++言語(Detours)についての質問

    Detoursを用いて、下記のWebサイト通りに試したのですが、エラーが出てAPIフックができません。(前準備までは下記の通りで成功しました) http://asd.if.land.to/code/apihook7.html 環境は、Windows7 proffesional 32bit版です。Visual Studio 2008を使っております。 プロジェクトはWin32コンソールアプリケーションで作成しており、アプリケーションの種類は、Windows アプリケーションを選択しております。 プロジェクトのディレクトリに登録したのは、 $(ProgramFiles)\Microsoft Research\Detours Express 3.0\include $(ProgramFiles)\Microsoft Research\Detours Express 3.0\lib.X86 $(ProgramFiles)\Microsoft Research\Detours Express 3.0\bin.X86 Webに記載されている通りにソースコードを書いてコンパイルするとこのようなエラーがでました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourTransactionCommit@0 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourAttach@8 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourUpdateThread@4 が関数 _wWinMain@16 で参照されました。 1>test.obj : error LNK2019: 未解決の外部シンボル _DetourTransactionBegin@0 が関数 _wWinMain@16 で参照されました。 1> test.obj : error LNK2019: 未解決の外部シンボル _DetourRestoreAfterWith@0 が関数 _wWinMain@16 で参照されました。 Detoursを用いたAPIフックの勉強中のためご教授願います。このサイトを参考にして、APIフックできた方がいましたら書き込みよろしくお願いします。 ソースコード test.cpp #include <windows.h> #include <tchar.h> #include <detours.h> // MessageBoxA INT ( WINAPI *RealMessageBoxA )( HWND, LPCSTR, LPCSTR, UINT ) = MessageBoxA; INT WINAPI DetoursMessageBoxA( HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType ) { return RealMessageBoxA( hWnd, lpText, "hook", uType ); } // GetModuleFileNameA DWORD ( WINAPI *RealGetModuleFileNameA )( HMODULE, LPSTR, DWORD ) = GetModuleFileNameA; DWORD WINAPI DetoursGetModuleFileNameA( HMODULE hModule, LPSTR lpFilename, DWORD nSize ) { //RealGetModuleFileNameA( hModule, lpFilename, nSize ); ::lstrcpyA( lpFilename, "hook" ); return 4; // 文字数を返す } INT APIENTRY _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, INT ) { // フック ::DetourRestoreAfterWith(); if ( ::DetourTransactionBegin() != NO_ERROR ) return 0; if ( ::DetourUpdateThread( GetCurrentThread() ) != NO_ERROR ) return 0; ::DetourAttach( (PVOID*)&RealMessageBoxA, DetoursMessageBoxA ); ::DetourAttach( (PVOID*)&RealGetModuleFileNameA, DetoursGetModuleFileNameA ); ::DetourTransactionCommit(); // テスト CHAR szPath[ MAX_PATH + 1 ]; ::GetModuleFileNameA( NULL, szPath, MAX_PATH ); ::MessageBoxA( NULL, szPath, "exeのパスを表示", MB_OK ); return 1; } それでは、よろしくお願いします。

  • vbsのセル値の取得について

    Excelシートからセルに入力された値を取得するプログラムを作成しています。しかし、セルに計算式が記入されたいる場合のみ値を取得している以下の部分で型が一致しないというエラーが発生してしまいます。対処方法を知っている方がおりましたら教えてください。 ※計算式でなく文字列が入力されている場合は正常に取得できます。 Dim str ・・・ str=obj.Worksheets("AAA").Range("A1").Value

専門家に質問してみよう