gpt4 book ai didi

delphi - 在Delphi XE6 x64下编译时GetProcAddress无法运行

转载 作者:行者123 更新时间:2023-12-03 15:38:53 24 4
gpt4 key购买 nike

以下 GetProcAddress 代码在 Delphi XE6 x64 下编译时失败。在 Delphi x86 下编译时运行良好。您能帮忙评论一下哪里做错了吗?

program Project11;

{$APPTYPE CONSOLE}

{$R *.res}

uses
SysUtils;

var
Library_OpenGL: LongWord;

function LoadLibrary(lpFileName: pAnsiChar): LongWord; stdcall; external 'kernel32.dll' name 'LoadLibraryA';
function GetProcAddress(hModule: LongWord; lpProcName: pAnsiChar): Pointer; stdcall; external 'kernel32.dll' name 'GetProcAddress';

begin
try
Library_OpenGL := LoadLibrary('opengl32.dll');
Assert(GetProcAddress(Library_OpenGL, 'glEnable') <> nil, 'GetProcAddress(Library_OpenGL, ''glEnable'') = nil');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLn;
end.

最佳答案

你的翻译是错误的。模块句柄是指针大小的,这解释了为什么您的错误翻译可以在 32 位上运行,但不能在 64 位上运行。

要更正,请将 Windows 单元添加到 uses 子句中,删除 LoadLibrary()GetProcAddress() 的声明,并将 Library_OpenGL 声明为 HMODULE(在 x64 中为 8 个字节):

program Project11;

{$APPTYPE CONSOLE}

{$R *.res}

uses
SysUtils, Windows;

var
Library_OpenGL: HMODULE;

begin
try
Library_OpenGL := LoadLibrary('opengl32.dll');
Assert(GetProcAddress(Library_OpenGL, 'glEnable') <> nil, 'GetProcAddress(Library_OpenGL, ''glEnable'') = nil');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLn;
end.

作为一个额外的好处,您现在可以直接调用 native Unicode LoadLibraryW,而不是通过 LoadLibraryA 适配器进行从 ANSI 到系统 native UTF-16 的对话。

关于delphi - 在Delphi XE6 x64下编译时GetProcAddress无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25576698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com