1

完全なWIN32Windowsアプリをdllとして構築する例はありますか?

関数をエクスポートし、rundll32を介して呼び出し、装飾、メニュー、アクセラレータ、およびすべてがポップアップする完全なWindowsアプリを作成したいと思います。

rundll32の呼び出し規約について知っています。

void CALLBACK TestEntryW(HWND hWnd, HINSTANCE hInst, LPWSTR pszCmdLine, int nCmdShow);

次のコマンドを使用して、その関数からMessageBoxをプルアップできます。rundll32.exe test3.dll,TestEntry other params and args

DLLのハンドルを取得し、それを呼び出しのように使用することで、DLLからリソースをロードできGetModuleHandle("test3.dll")ます。それはうまくいっているようですが、私はまだ働いていません(ベイビーステップ..)。hInstLoadStringLoadIconLoadAccelerators

RegisterClassExこれらの文字列とアイコンを使用してWindowsクラスを登録できますが、親を使用する必要があります。そうしないと、を呼び出すときhInstに取得します。それは予想されることだと思います。ERROR_CANNOT_FIND_WND_CLASSCreateWindow

ただし、でそのクラスを使用しようとするとCreateWindow、NULLが返され、。も返されますGetLastError

を使用して、rundll32から渡されたhInstのウィンドウクラスを取得できますGetWindowsLong(hWnd, GWL_ATOM)。これをlpClassNameに使用すると、メニューとアクセラレータを除いた装飾ウィンドウを表示できますが、rundllのウィンドウクラスは通常、メッセージキューにのみ使用されるため、少しファンキーです。dllの代わりにを使用SetWindowsLongしてウィンドウをサブクラス化し、WndProcを呼び出してみました。CallWindowProcDefWindowProcWndProc

MSVC ++2010Expressでデバッグできないために妨げられています。プロジェクトのコマンドとコマンド引数を適切なエントリに置き換えて、正しく起動するようにしましたが、rundll32.exeのデバッグ情報がなく、ブレークポイントなどが機能しないというメッセージが表示されます。

何か案は?私は正しい方向に進んでいますか?

4

0 に答える 0