如何使用 Win32 API 将字符串传递给 DLL?
我试图将一个字符串(或 char*)从 Rundll32 传递到使用此源构建的 DLL(使用 MinGW):
#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 传递参数?
如果我没有争论的话,它工作得很好。
I am trying to pass a string (or char*) from Rundll32 to a DLL built (with MinGW) using this source:
#include <windows.h>
__declspec( dllexport ) int hello(LPSTR content) {
MessageBox( NULL, content, "Message", MB_OK );
return 0;
}
When running this I get random crashes. This is how I run it.
C:\workspace>c:\MinGW\bin\gdb.exe rundll32 -ex "run program1.dll,hello test"
I tried setting a breakpoint at hello() and it seems that "content" is pretty random. Am I passing the argument from rundll32 in the wrong way?
It works fine if I don't have arguments.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
rundll32 入口点需要以非常具体的方式声明。请查看这篇文章,其中解释了该怎么做。我注意到的一件事是,对于名为“EntryPoint”的符号,传递给 rundll32 的函数名称对于 32 位 DLL 应该是“_EntryPoint@16”,而对于 64 位 DLL 则应该是“EntryPoint”。
rundll32 entry points need to be declared in a very specific way. Check out this article which explains what to do. One thing I've noticed is that, for a symbol called "EntryPoint", the function name passed to rundll32 should be "_EntryPoint@16" for 32-bit DLLs, and just "EntryPoint" for 64-bit DLLs.