📄 main.pas
字号:
unit Main;
{$C FIXED DEMANDLOAD PERMANENT}
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TMainForm = class(TForm)
CallBtn: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure CallBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
uses WOW16;
const
ExeStr = '已从32位DLL中返回到16位EXE。' +
'32位DLL传递来的字符串是:"%s"';
function CallBackFunc(P: PChar): Longint; export;
begin
ShowMessage(Format(ExeStr, [StrPas(P)]));
Result := StrLen(P);
end;
procedure TMainForm.CallBtnClick(Sender: TObject);
var
H: THandle32;
R, P: Longint;
AStr: PChar;
begin
{ load 32-bit DLL }
H := LoadLibraryEx32W('TestDLL.dll', 0, 0);
AStr := StrNew('I love DDG.');
try
if H > 0 then begin
{ Retrieve address of proc from 32-bit DLL }
TFarProc(P) := GetProcAddress32W(H, 'DLLFunc32');
if P > 0 then begin
{ Call proc in 32-bit DLL }
R := Call32BitProc(P, [Longint(AStr), Longint(@CallBackFunc)], 1);
Edit1.Text := IntToStr(R);
end;
end;
finally
StrDispose(AStr);
if H > 0 then FreeLibrary32W(H);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -