0

ウィンドウのサイズを変更するときに、親ウィンドウでウィンドウのコントロールをスケーリングする関数を作成しようとしています。これを実現するためにCreateWindowEx()、自分の関数に埋め込みました。createscalingwindow

int createscalingwindow (HWND cswpara0,DWORD cswpara1,const CHAR* cswpara2,
const CHAR* cswpara3,DWORD cswpara4,int cswpara5,int cswpara6,int cswpara7,
int cswpara8,HWND cswpara9,HMENU cswpara10,HINSTANCE cswpara11,LPVOID cswpara12)
              {
               cswpara0 = CreateWindowEx (cswpara1, cswpara2, cswpara3, cswpara4,
                                          cswpara5,cswpara6,cswpara7,cswpara8,
                                         cswpara9,cswpara10,cswpara11,cswpara12);
               return 0;
              }

winmainでこのコードを変更した後

    mainwin = CreateWindowEx(
       0,                   
       mainclassname,         
       "Mafia Online",       
       WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX
      |WS_SYSMENU, 
       CW_USEDEFAULT,       
       CW_USEDEFAULT,       
       544,                 
       375,                 
       NULL,        
       playmenu,                
       hThisInstance,       
       NULL                 
       );

次のコードに

createscalingwindow (mainwin, 0, mainclassname, "Mafia Online",
WS_OVERLAPPED|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU, 
CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, NULL, playmenu, hThisInstance, NULL);
ShowWindow (mainwin, nCmdShow);

メインウィンドウがまったく表示されなくなります。GetLastError()埋め込み後に呼び出すと、 CreateWindowEx()error_successが返されます。

ollydbgでプログラムの両方のバリアントを調べた後、何か奇妙なことに気づきました。プロトタイプを使用したプログラムの実行は、期待どおりに機能しません。プログラムはCreateWindowEx、まったく別の宛先を呼び出してから、呼び出しから戻ります。

プログラムの実行を期待する方法は次のとおりです(これは使用しないプログラムですcreatescalingwindow):(新しいユーザーとして画像を投稿することは許可されていないため、modまたは誰かがこれらを修正してくれると便利です。 ) http://s8.postimage.org/qo8tqt5h1/mainnormal.png

実行方法は次のとおりです: http ://s8.postimage.org/fa8ytr7qt/mainweird.png

あなたが私を助けるために尽力してくれたことに感謝しますので、よろしくお願いします。

4

1 に答える 1

1

デフォルトでは、関数の引数は値で渡されます。つまり、関数は、呼び出し元の変数への参照ではなく、変数の独自のコピーを取得します。ローカルコピーに加えられた変更は、関数に渡されたものには影響しません。

参照が必要な場合は、参照を渡します。

int createscalingwindow (HWND & cswpara0 /* etc. */)
                              ^

これで、関数の引数に変更を加えると、呼び出し元の変数も変更されます。

于 2012-12-28T14:54:27.587 に答える