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

发布于 2024-11-04 19:55:55 字数 460 浏览 0 评论 0原文

我试图将一个字符串(或 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖微凉心微凉 2024-11-11 19:55:55

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文