0

このソースを使用して(MinGWで)ビルドされたDLLにRundll32から文字列(またはchar *)を渡そうとしています:

#include <windows.h>

__declspec( dllexport ) int hello(LPSTR content) {

  MessageBox( NULL, content, "Message", MB_OK );
  return 0;

}

これを実行すると、ランダムにクラッシュします。これが私がそれを実行する方法です。

C:\workspace>c:\MinGW\bin\gdb.exe rundll32 -ex "run program1.dll,hello test"

hello()でブレークポイントを設定しようとしましたが、「コンテンツ」はかなりランダムなようです。rundll32からの引数を間違った方法で渡していますか?

引数がなくても問題なく動作します。

4

1 に答える 1

2

rundll32エントリポイントは、非常に特殊な方法で宣言する必要があります。何をすべきかを説明しているこの記事をチェックしてください。私が気づいたことの1つは、「EntryPoint」というシンボルの場合、rundll32に渡される関数名は32ビットDLLの場合は「_EntryPoint @ 16」、64ビットDLLの場合は「EntryPoint」である必要があるということです。

于 2011-05-02T22:49:15.947 に答える