本人曾经碰到一个问题,就是按照网上搜索到的说明,Rundll32的用法为:
rundll32 DllName,FunctionName [Arguments]
假设以上DLL编译好后得到L_test1.dll,于是,我在命令行下输入:rundll32 L_test1.dll,F1 888
可是,结果却不是我所期望的弹出一个显示内容为888对话框。这是为什么呢?
后来本人又试了很久,还认为网上所说的格式是错误的,于是还试了很多种自己乱想的格式,就像破解密码一样,但依然失败,晕!
最后,我想到了MSDN,于是就有了这一篇译文:http://blog.csdn.net/leng_que/archive/2009/10/07/4639073.aspx
看了MSDN上的说明,我终于明白了原因,原来导出函数的原型是有要求的,要像上面这样写的DLL才行,假设这个DLL名为L_test2.dll。
运行命令:rundll32 L_test2.dll,F2 888
OK!终于成功了!
最后还有一点值得一提,我并没有完全按照MSDN上的那样把导出函数的调用方式声明为CALLBACK方式,因为我发现如果完全按照MSDN上的那种函数导出格式是会失败的!