如何使用Win32 API将字符串传递给DLL?

问题描述:

我试图从Rundll32的传递字符串(或字符*)使用此源代码构建(使用MinGW)一个DLL:如何使用Win32 API将字符串传递给DLL?

#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传递了参数?

它工作正常,如果我没有参数。

需要以非常特定的方式声明rundll32入口点。请查看this article,其中解释了要执行的操作。我注意到的一件事是,对于一个名为“EntryPoint”的符号,传递给rundll32的函数名应该是32位DLL的“_EntryPoint @ 16”,64位DLL的“EntryPoint”。

+0

是的,我早些时候尝试过。虽然似乎没有工作。我使用这个函数定义:“void CALLBACK hello(HWND hwnd,HINSTANCE hinst,LPSTR lpszCmdLine,int nCmdShow);”。当我打电话给rundll32.exe时,我收到一个消息框,里面显示“Missing Entry:_hello @ 16”。我在32位x86/Windows 7上。我读到有一个名为“depend.exe”的工具可以列出入口点,但我只能在WinXP上找到它。也许objdump可以做同样的事情吗? – 2011-05-02 23:02:34

+0

[Dependency Walker](http://www.dependencywalker.com)在Windows 7上运行良好。 – 2011-05-02 23:07:40

+0

好的,使用Dependency Walker我发现入口点被命名为“hello @ 16”(不带下划线)。立即着手:) – 2011-05-02 23:11:59