使用Delphi 2010为{mIRC}创建一个dll

时间:2017-02-17 23:23:57

标签: dll delphi-2010 mirc

使用Delphi 2010,我正在尝试为mIRC编写一个dll。以下是mIRC帮助文件中的一些信息

  

技术说明

     

本节包含了想要创建用于mIRC的DLL的程序员的技术信息。

     

被调用的DLL中的例程必须是以下形式:

     

int __stdcall procname(HWND mWnd,HWND aWnd,char * data,char * parms,BOOL show,BOOL nopause)

     

mWnd是主mIRC窗口的句柄。

     

aWnd是发出命令的窗口的句柄,如果远程脚本调用该命令,则该窗口可能不是当前活动的窗口。

     

data是您希望发送到DLL的信息。返回时,DLL可以使用它希望mIRC执行的命令填充此变量(如果有的话)。

     

DLL可以返回一个整数来表示它想要mIRC做什么:

     

0表示mIRC应该/停止处理

     

1表示mIRC应继续处理

     

2表示它已使用希望mIRC执行的命令填充数据变量,并且在执行命令时填充了要使用的参数(如果有)。

     

3表示DLL已填充数据变量,结果是$ dll()作为标识符应该返回。

下面的代码,它应该反转输入文本,编译好,但使用dll的结果不是我所期望的。

function Reverse(mWnd, aWnd: hWnd; Data, Parms: PChar; Show, NoPause: Boolean): Integer; stdcall;
var
  Temp: String;
  I: Integer;
begin
  SetLength(Temp, Length(Data));
  for I := 0 to Length(Data) do
  begin
    Temp[I] := Data[Length(Data)- I]; // Reversing string by retrieving characters from Data one at a time
  end;
  StrCopy(Data, PChar(Temp)); // Putting reversed string back into data
  Result := 3;
end;
exports
    Reverse;
begin
end.

例如,将来自mIRC的dll称为//say $dll(mydll,Reverse,hello)会产生仅为“o”的输出。如果参数是'hello sailor',则输出为'orilsao llhe'。我尝试跟踪代码的操作失败,但我无法理解数据值的变化。我怀疑我自己对PChar行为的有限知识是一个促成因素。我欢迎任何可能有用的建议。干杯

1 个答案:

答案 0 :(得分:0)

我将PChar改为PAnsiChar进入功能定义。 function Reverse(mWnd, aWnd: hWnd; Data, Parms: PAnsiChar; Show, NoPause: Boolean): Integer; stdcall;

我在行StrCopy(Data, PChar(Temp)); // Putting reversed string back into data中将PChar更改为PAnsiChar,现在我的问题不复存在了。 只是一点点谷歌搜索使我能够做出改变。实际上在这个论坛上写下我的问题帮助我解决了问题。

干杯,谢谢。