win7 64 DLL入口点问题

xhfbx 2014-10-19 05:34:08
下面的代码其实是书中的一个例子
DLL 部分

library DllEntry;
uses
System.SysUtils,
System.Classes,
Winapi.Windows,
Vcl.Dialogs;

{$R *.res}
procedure DLLEntryPoint(dwreason:DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH: showmessage('Attaching to process');
DLL_PROCESS_DETACH :showmessage('Detaching from process');
DLL_THREAD_ATTACH : MessageBeep(0);
DLL_THREAD_DETACH : MessageBeep(0);
end;
end;
begin
DllProc :=@DLLEntryPoint;
DllEntryPoint(Dll_PROCESS_ATTACH);
end.


客户端调用部分


unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
LibHandle : THandle;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if LibHandle = 0 then
begin
LibHandle := LoadLibrary('DllEntry.dll');
if LibHandle =0 then
raise Exception.Create('Unable to load Dll');
end
else
MessageDlg('Library already loaded' ,mtWarning,[mbOK],0);
end;

end.


代码在 XP 32位环境下,当加载DLL时,会弹出DLL文件中的对话框,但在Win7 64位环境下DLL中的对话框是不会出来的,虽然我在XE7中将DLL及调用端的 Target Platforms 项改成了 64-bit Windows 。我想是不是DLL入口点的函数根本没启用,我不知道64位下的入口点是不是这样写的,请大家帮忙看一下是不是这样的,谢谢了!
...全文
176 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luodang_007 2014-10-22
  • 打赏
  • 举报
回复
我用xe6编译不管平台选择32还是64,都不能弹出,不管可以进断点,不知道加载dll的时候和showmessage有什么特别的用法,精神上支持了。入口函数肯定是启动了的
xhfbx 2014-10-22
  • 打赏
  • 举报
回复
谢谢 luodang007 ,我将showmessage 换成 MessageBox 后,可以弹出对话框了,我也用 MessageDlg 着看行不行,不过结果也是Show不出来。查了下 Showmessage及 MessageDlg 都是出自 Dialogs 单元,而 MessageBox 是来自Windows单元的。测试时我用的是 Delphi 2010 编译,所以无法编译成64位版本的,但是在Win7 64位环境下测试的。回家后再用XE7试试。 同时也谢谢 gykthh ,不过我需要64位的DLL,我不知道D7如何编译64位DLL,所以没有去测试。gykthh 是否能告之一下编译64位DLL方法,谢谢!
Blessed_Chuan 2014-10-21
  • 打赏
  • 举报
回复
经测试 win7 64位可以弹出的啊 我s是d7编译的
xhfbx 2014-10-20
  • 打赏
  • 举报
回复
谢谢 dongyonggan ,我想也应该是操作系统差异造成,但我现在还不知道具体是哪里的问题,我不知道那个DLL要如何改才能在WIN7 64位下才正常。
dyonggan 2014-10-20
  • 打赏
  • 举报
回复
操作系统有点差异可能会导致

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧