DLL与EXE之间的恩爱情仇


本文整理自网络,侵删。

 
作者: 小坏
program Bin;
{$APPTYPE CONSOLE}
 
uses
  Windows;
   
Function RunApi(lpPorc :Pointer):Integer; Stdcall; external 'Test.Dll' name 'RunApi';
 
Var
  lpPorc :Pointer;
begin
  lpPorc := @MessageBoxW;// 这里可以自己动态加载需要的API
  RunApi(lpPorc);//传入API的内存地址
end.




library DLL;
 
Uses
  Windows;
 
Type
  TMyMessageBox = function(hWnd: HWND; lpText, lpCaption: LPCWSTR; uType: UINT): Integer; stdcall;
 
Function RunApi(lpPorc :Pointer):Integer;
Var
  pMessageBox :TMyMessageBox;
begin
  Result := -1;
  if Assigned(lpPorc) Then 
  begin
    pMessageBox := lpPorc;
    pMessageBox(0, 'Test', 'hahaha', 0);  //调用EXE传进来的API
    Result := 1;
  end;
end;
 
Exports
  RunApi;
 
begin
end.


通过以上代码可以在DLL中调用EXE中的API或函数

而DLL里只需要定义就行了

比如某Rat的EXE和DLL都带有通讯库这样会造成内存消耗的加大

以及DLL在动态传输时体积的增大

如果将EXE中的通讯库直接传入DLL然后由DLL直接调用进行操作体积可以减小很多
来源:https://www.7xcode.com/archives/110.html

相关阅读 >>

Delphi if pos 多条件判断用法交流

Delphi int64 与 currency

Delphi 改变进程优先级

如何在Delphi xe中通过ftp下载文件

Delphi 每年、月、周、日的开始与结束的时间

Delphi 获取listbox1多选的值

Delphi 获取指定字符串后面的所有的字符串

Delphi 10.3 处理csv tstreamreader 自带split用法

Delphi 存储文件到数据库

Delphi 2009 之 tcategorypanelgroup[3]: color

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...