aris-wiz の回答履歴
- 初心者です
char c[] = "XXX";と書くと配列cは書き換え可能なのに対して、 char* p = "XXX";と書くと*pの指す先が書き換え不可なのは 何故なのでしょうか? そういうものだから、以外でお願いします。
- ベストアンサー
- C・C++・C#
- sakuranb22
- 回答数2
- グローバルフック(SetWindowsHookEx)でのEM_REPLACESELの取得について
はじめまして。 グローバルフック(SetWindowsHookEx)を使って別アプリ(exe)がEDITボックスに出力している 文字列を取得しようとしています。 SPY++で確認すると別アプリではEM_REPLACESELを用いていることがわかりました。 フックするDLLを以下のように作成しメッセージをフックすることはできました。 1. フックのセット SetWindowsHookEx(WH_CALLWNDPROC, MyHookProc, hInst, dwThreadId); // hInst はDllMainでアタッチ時に保存したもの // dwThreadIdは別アプリのスレッドID(以下の方法で取得) // HWND pWnd = ::FindWindow(NULL, 別アプリのフォームのキャプション) ; // HWND pEdt = ::FindWindowEx(pWnd,0,"Edit",0); // DWORD dwThreadId= ::GetWindowThreadProcessId(pEdt, NULL); 2. コールバック LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp) { if( EM_REPLACESELの判定 ){ メッセージの保存処理 } return CallNextHookEx(hMyHook, nCode, wp, lp); } 上記のコールバックの中で”EM_REPLACESELの判定”をどのようにしたら良いかわからずに困っています。 if分をはずしてファイルにダンプすると何かメッセージが取得できているのは確認できています。 他のサイトを見て、 MSG* pMSG = (MSG*)lp; として、pMSG->lParam を参照してもEM_REPLACESELになっているメッセージがありませんでした。 何か思いつくことがある方、根本的な間違いがあるという方、 アドバイアスをお願いします。
- 引用符と二重引用符
同じ内容で先週に質問して締め切ってしまったんですが、理解出来ない点があるので再度質問させてください。 C言語の引用符「'」と二重引用符「"」の違いがよく分かりません。 という質問に対し、 「文字と文字列の違い」 という回答をいただいたんですが、strcat()の第2引数に1文字だけ指定する場合に二重引用符でなければならないのが何故なのか分かりません。 分かる方がおられたら教えていただけないでしょうか? よろしくお願いいたします。 ちなみに以前の質問は http://oshiete1.goo.ne.jp/qa4386678.html です。
- 引用符と二重引用符
同じ内容で先週に質問して締め切ってしまったんですが、理解出来ない点があるので再度質問させてください。 C言語の引用符「'」と二重引用符「"」の違いがよく分かりません。 という質問に対し、 「文字と文字列の違い」 という回答をいただいたんですが、strcat()の第2引数に1文字だけ指定する場合に二重引用符でなければならないのが何故なのか分かりません。 分かる方がおられたら教えていただけないでしょうか? よろしくお願いいたします。 ちなみに以前の質問は http://oshiete1.goo.ne.jp/qa4386678.html です。
- 文字列から\0を外したい
文字列(わかりやすいように16進で表現します)から\0を外すには どのようにしたらよいでしょうか? 文字列が、61,62,63,64,20,00,67,68,69 とある場合、これを、61,62,63,64,20,67,68,69 としたいのですが、何かいい方法はありませんでしょうか?
- ベストアンサー
- C・C++・C#
- hardtechno
- 回答数7
- #ヘッダーファイルの2重インクルード防止コードについて
「ローベルのC++入門講座」という本を読んでいるのですが、 その中でヘッダーファイルの2重インクルードを回避するマクロとして、 ---------------------------------------------------------------- #ifndef REDEF1_H_20070101_1138_JOIE93UL_INCLUDED_ #define REDEF1_H_20070101_1138_JOIE93UL_INCLUDED_ const int N = 10; ・ ・ ・ #endif ---------------------------------------------------------------- というサンプルがでてくるのですが、 「REDEF1_H_20070101_1138_JOIE93UL_INCLUDED_」 の意味がよくわからないです。 おそらく、 「REDEF1_H」はファイル名で、 「20070101_1138」はredef1.hの作成日時か更新日時で 「INCLUDED」は「インクルードされている」の意味だと思う のですが、 「JOIE93UL」が何を意味するのかがさっぱりです。 さほど重要なことではなさそうですが、なんだか気持ちが悪いので どなたか教えて頂ければ幸いです
- Visual C と Cちがい
Visual CとCは違うのですか? C言語をVisualというエディターで構築できるようなものではないのですか? 根本的に言語自体違うのでしょうか?
- C言語のtypedefの質問
Cビギナーです。 私のプログラムが長くなるのは、 ファイルの分割をしてないからだと知った今日この頃なのですが、 それを勉強するためにあるホームページを見ていたのですが、 次のようなサンプルプログラムがありました。 /* main.c */ #include <stdio.h> extern int func(int); typedef int (*pf)(int); extern pf getaddress(void); int main(void) { printf("%d\n",(getaddress())(4)); return 0; } /* sub.c */ static int func(int c) { return c*10; } typedef int (*pf)(int); pf getaddress(void) { return func; } ここで、typedef int (*pf)(int);の部分が分かりません。 intを(*pf)(int)で置き換えているのでしょうが、 それ自体がどういう意味か分かりません… どなたか教えて下さい。
- ベストアンサー
- C・C++・C#
- micchicchi
- 回答数6
- プロトタイプ宣言について
C言語で関数を作成しプロトタイプ宣言するときの質問です。 関数実体の引数に構造体のポインタを宣言します。 プロトタイプ宣言には,構造体のポインタを宣言したのと同じ位置にvoid *を宣言します。 関数実体とプロトタイプ宣言は,異なるファイルです。 このように作成した関数は,VC++2008では,コンパイルできるのですが, なぜ関数実体の宣言とプロトタイプ宣言の型が異なるのにコンパイルできるのでしょうか? また,この関数を別ファイルの関数から呼び出した場合,正しく引数を理解し,正しく処理されます。 これは,言語仕様として正しい書き方なのでしょうか? それとも環境依存の書き方なのでしょうか? ご存知の方がいましたらお答えお待ちしています。
- プロトタイプ宣言について
C言語で関数を作成しプロトタイプ宣言するときの質問です。 関数実体の引数に構造体のポインタを宣言します。 プロトタイプ宣言には,構造体のポインタを宣言したのと同じ位置にvoid *を宣言します。 関数実体とプロトタイプ宣言は,異なるファイルです。 このように作成した関数は,VC++2008では,コンパイルできるのですが, なぜ関数実体の宣言とプロトタイプ宣言の型が異なるのにコンパイルできるのでしょうか? また,この関数を別ファイルの関数から呼び出した場合,正しく引数を理解し,正しく処理されます。 これは,言語仕様として正しい書き方なのでしょうか? それとも環境依存の書き方なのでしょうか? ご存知の方がいましたらお答えお待ちしています。
- 動的メモリの初期化方法について。
char *p = new char[SIZE]; 上記の方法で動的メモリを確保した場合 確保したメモリの初期化は、 memset(p, 0x00, SIZE); のほかに方法はありますでしょうか? 個人的にSIZEを指定してしまうのがキレイではないような気がしています。 memset(p, 0x00, sizeof(p)); では、sizeof(p)はchar* のサイズなので正しく初期化できず、 for (int i = 0; i < SIZE; i++){ memset(p[i], 0x00, sizeof(p[i])); } では、コンパイルエラーが出てしまいます。 (new char[SIZE]で確保した場合には、p[i]のように配列としてアクセスできないのでしょうか? 単にchar p[SIZE]の場合には、当然配列としてアクセスできるのに。。。) 一般的な初期化方法のほかにも何かコメントでも良いので経験あるかたいらっしゃいましたら教えてください。 宜しくお願いいたします。
- C言語の演算について
次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。 なお、先ほど記述ミスがあるのにも関わらず投稿してしまいました…。 正しい記述はこちらの質問です。 大変失礼しました。 前の質問は削除可能になり次第、削除いたします。
- CloseHandleのエラーについて
現在、VC++6.0、winXP SP2でRS232Cを使った通信プログラムを作っています。 プログラム自体はできたのですが、異常系のテストをしようとして困っています。 CloseHandle()で、COMポートを閉じるのに失敗した場合、ポートの状態がどうなるのかを知りたいのですが、私が探した限り、ネットには失敗例が載って折らず、困っています。 ご存知の方がいらっしゃいましたら、ご教授願います。
- CloseHandleのエラーについて
現在、VC++6.0、winXP SP2でRS232Cを使った通信プログラムを作っています。 プログラム自体はできたのですが、異常系のテストをしようとして困っています。 CloseHandle()で、COMポートを閉じるのに失敗した場合、ポートの状態がどうなるのかを知りたいのですが、私が探した限り、ネットには失敗例が載って折らず、困っています。 ご存知の方がいらっしゃいましたら、ご教授願います。
- CloseHandleのエラーについて
現在、VC++6.0、winXP SP2でRS232Cを使った通信プログラムを作っています。 プログラム自体はできたのですが、異常系のテストをしようとして困っています。 CloseHandle()で、COMポートを閉じるのに失敗した場合、ポートの状態がどうなるのかを知りたいのですが、私が探した限り、ネットには失敗例が載って折らず、困っています。 ご存知の方がいらっしゃいましたら、ご教授願います。
- #define文等について質問です
表題の件ですが、 プログラム読んでいて分からないことありましたので、 C言語の文法的なことですが、教えて下さいませ。 全然自信ないですが、自分の解釈も付けてみました… 質問(1) #define MP_RELEASEWIN(p) MP_FreeWin((IWindow **)&(p)) 中略 static void MP_FreeWin(IWindow ** ppif); 中略 static void MP_FreeWin(IWindow ** ppif) { 中略 } このような場合、最初の#defineは、 MP_RELEASEWIN(p)は、MP_FreeWin((IWindow **)&(p))だよ と定義しているけど、前方宣言にはなっていないから static voidでプロトタイプ宣言して、 最後に関数の定義を書いているって解釈で 合っているのでしょうか? 質問(2) #define MP_IWINDOW_SETVTBL(pVtbl, pfnEn, pfnRd, pfnHE, pfnDel) \ (pVtbl)->Enable = (pfnEn); \ (pVtbl)->Redraw = (pfnRd); \ (pVtbl)->HandleEvent = (pfnHE); \ (pVtbl)->Delete = (pfnDel) これって、 MP_IWINDOW_SETVTBL(pVtbl, pfnEn, pfnRd, pfnHE, pfnDel) を (pVtbl)->Enable = (pfnEn); \ (pVtbl)->Redraw = (pfnRd); \ (pVtbl)->HandleEvent = (pfnHE); \ (pVtbl)->Delete = (pfnDel) の4行部分で置き換えているのでしょうか? あと、(pfnDel)の最後だけ、「;」がないのは 約束事って理解でいいのでしょうか? 質問(3) #define CMediaPlayer_CancelRedraw(p) { CALLBACK_Cancel(&(p)->m_cbRedraw); (p)->m_bRedraw = FALSE; } こんなのがあるのですが、 これは質問(2)と同じ意味なのでしょうか? こっちにはカッコが付いているのですが、 これは、何か意味があるのでしょうか? 質問(4) QINTERFACE(IWindow) { // Releases the window resources void (*Delete)(IWindow * po); }; この void (*Delete)(IWindow * po); の部分は、どういう風に理解すればいいのでしょうか? カッコとか、*がついてますが… Delete(IWindow * po); とかいう関数に何かしているという意味なのでしょうか@@; 教えて下さい。 なんか、たくさん質問してますが、 よろしくお願い致しますm(__)m
- ベストアンサー
- C・C++・C#
- micchicchi
- 回答数6
- DirectXのフォントについて
現在、DirectX と C++でオリジナルのシューティングゲームを作っています。 そこで、スコアや画面で文字(文)を表示したいのですが、 使うフォントを環境に依存しないようにしたいのです。 D3DXFontなどで文字描画はできますが、それは使うPCに入っているフォントしか表示できませんよね? 市販や同人のゲームを見ていると、「MS 明朝」などではなくオリジナル、あるいは製作されたフォントを使っているようにしか思えません。 フォントを配布された覚えもありません。 一つ一つの文字を画像にして、それから「画像として」表示する、という方法もありますが、それでは漢字の処理がかなり面倒なことになると思うのです。 つまり、「PCに入っていないフォントをゲーム中で自由に表示できる(ように見せかける)」方法が分からないのです。 やはり文字一つ一つを画像にするしかないのでしょうか。 それとも別の方法があるのでしょうか。 ご回答お願いします。 実際に作品を作っているサークルの方の回答もあれば嬉しい限りです。
- VC++でコンパイルエラーが出ますがお教えください。
初心者で申し訳なくおもいます。 下記のソースでコンパイルエラーが出ます。 // CnstDst.cpp : アプリケーション用のエントリ ポイントの定義 // #include "stdafx.h" //CnstDst クラス定義 class CnstDst { char sDat[80]; public: CnstDst(char *s); ~CnstDst(); }; CnstDst cd1("テストです"); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // TODO: この位置にコードを記述してください。 MessageBox(NULL, "WinMainの入口", "WinMain", MB_OK); CnstDst cd2("テスト1"); MessageBox(NULL, "テスト2", "WinMain", MB_OK); return 0; } CnstDst::CnstDst(char *s) { lstrcpy(sDat, s); MessageBox(NULL, sDat, "コンストラクタ", MB_OK); } CnstDst::~CnstDst() { MessageBox(NULL, sDat, "デストラクタ", MB_OK); } コンパパイルエラーは下記です。 プロジェクト 'CnstDst - Win32 (WCE MIPSII_FP) Debug' 用の中間ファイルおよび出力ファイルを削除しています。 --------------------構成 : CnstDst - Win32 (WCE MIPSII_FP) Debug-------------------- リソースをコンパイル中... コンパイル中... StdAfx.cpp コンパイル中... CnstDst.cpp C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(22) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [14]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(24) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [9]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(31) : error C2664: 'wcscpy' : cannot convert parameter 1 from 'char [80]' to 'unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(32) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [80]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast C:\Documents and Settings\中野\デスクトップ\テストフォルダ\CnstDst\CnstDst.cpp(36) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char [80]' to 'const unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast clmips.exe の実行エラー CnstDst.exe - エラー 5、警告 0 Microsoft eMbedded Visuai C++ Win32 WCE で行っております。
- ベストアンサー
- C・C++・C#
- takaboodes
- 回答数5
- WM_CTLCOLORDLG
WIN32、VC++2005で開発中です。 ダイアログが複数あり各々に違う背景色を着けたい場合、 下記のようなプログラムを書いたのですが、IF文の中に行けません。 「i」には0が入ってしまうんですが、なぜでしょうか? ほかにいい方法ありませんか? ボタンコントロールではちゃんと判別してくれました。 case WM_CTLCOLORDLG: i = GetWindowLong( (HWND)lParam, GWL_ID ); if ( i == IDD_ICHI_D ) { //位置出し画面描画 return (BOOL)CreateSolidBrush( RGB( 255,170,255 )); } break; WIN32初心者なのでなるべくわかりやすくご教授お願いします。
- void関数について
void ranmotion(...,&esti,...); というvoid関数を作りまして、 int main() { int esti=0; .... ranmotion(...,esti,...); } を計算したとき、ranmotion(...,esti,...)の中ではesti=100とかと計算が出来ているのですが、main関数の中では、esti=0のままになってしまいます。どうすればesti=100などの計算結果をmain関数内に持っていくことができるのでしょうか? ご教授お願いします。