2011-05-02 73 views
0

我試圖從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傳遞了參數?

它工作正常,如果我沒有參數。

回答

2

需要以非常特定的方式聲明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

相關問題