windows – 在Delphi中获取DLL调用者信息

发布时间:2020-09-15 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了windows – 在Delphi中获取DLL调用者信息编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Delphi DLL中需要建立调用者 – 可能是一个简单的“.exe”或DBMS运行时模块 – 这意味着它必须获取在该进程中运行的命令.

我知道CmdLine不起作用,可能是ParamStr(0),并且不能使用“主窗口”技术,因为调用者有时候没有窗口.我怀疑
GetModuleHandle是起点,但需要帮助才能从那里获得命令执行.

解决方法

我创建了一个测试dll:

library Project2;

uses
  System.SysUtils,System.Classes,Vcl.Forms,Vcl.Dialogs,Winapi.Windows;

{$R *.res}

procedure DoStuff; stdcall;
begin
    ShowMessage(
            'ParamStr(0): '+ParamStr(0)+#13#10+
            'GetCommandLine: : '+GetCommandLine);
end;

exports
    DoStuff;
begin
end.

然后从测试应用程序中调用它:

procedure TForm1.Button1Click(Sender: TObject);
var
    module: HMODULE;
    doStuff: procedure; stdcall;
begin
    module := LoadLibrary('D:\Temp\Win32\Debug\Project2.dll');
    if module = 0 then
        RaiseLastOSError;
    try
        doStuff := GetProcAddress(module,'DoStuff');

        if @doStuff = nil then
            raise Exception.Create('Could not find export "DoStuff"');

        DoStuff;
    finally
        FreeLibrary(module);
    end;
end;

它会看到命令行,使用两者:

> ParamStr(0)
> GetCommandLine

GetCommandLine显然显示整个命令行,而ParamStr(0)(根据定义)只是进程可执行路径.

总结

以上是编程之家为你收集整理的windows – 在Delphi中获取DLL调用者信息全部内容,希望文章能够帮你解决windows – 在Delphi中获取DLL调用者信息所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!