完全な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")
ます。それはうまくいっているようですが、私はまだ働いていません(ベイビーステップ..)。hInst
LoadString
LoadIcon
LoadAccelerators
RegisterClassEx
これらの文字列とアイコンを使用してWindowsクラスを登録できますが、親を使用する必要があります。そうしないと、を呼び出すときhInst
に取得します。それは予想されることだと思います。ERROR_CANNOT_FIND_WND_CLASS
CreateWindow
ただし、でそのクラスを使用しようとするとCreateWindow
、NULLが返され、。も返されますGetLastError
。
を使用して、rundll32から渡されたhInstのウィンドウクラスを取得できますGetWindowsLong(hWnd, GWL_ATOM)
。これをlpClassNameに使用すると、メニューとアクセラレータを除いた装飾ウィンドウを表示できますが、rundllのウィンドウクラスは通常、メッセージキューにのみ使用されるため、少しファンキーです。dllの代わりにを使用SetWindowsLong
してウィンドウをサブクラス化し、WndProc
を呼び出してみました。CallWindowProc
DefWindowProc
WndProc
MSVC ++2010Expressでデバッグできないために妨げられています。プロジェクトのコマンドとコマンド引数を適切なエントリに置き換えて、正しく起動するようにしましたが、rundll32.exeのデバッグ情報がなく、ブレークポイントなどが機能しないというメッセージが表示されます。
何か案は?私は正しい方向に進んでいますか?