使用Delphi 2010,我正在尝试为MIRC编写DLL。这是MIRC帮助文件中的一些信息
技术说明
本节包含想要创建DLL的程序员的技术信息。
被调用的dll中的例程必须为:
int ____stdcall procname(hwnd mwnd,hwnd awnd,char *data,char *parms,bool show,bool nopause)
mwnd是主窗口的手柄。
awnd是发出命令的窗口的句柄,如果通过远程脚本调用命令,则可能不是当前活动的窗口。
数据是您希望发送到DLL的信息。返回时,DLL可以用它希望MIRC执行的命令填充此变量。
dll可以返回整数以指示其想要的mirc做什么:
0表示MIRC应该/停止处理
1表示MIRC应该继续处理
2意味着它已经用它希望MIRC执行的命令填充了数据变量,并且在执行命令时使用的参数(如果有)填充了Parms。
。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)
给出Just'O'的输出。如果参数是" Hello Sailor",则输出为" Orilsao llhe"。我尝试过未能成功追踪代码的操作,但是我无法理解数据值的变化。我怀疑我自己对PCHAR行为的有限了解是一个促成因素。我欢迎任何可能有帮助的建议。欢呼
我将pchar更改为pansichar in in函数定义。 function Reverse(mWnd, aWnd: hWnd; Data, Parms: PAnsiChar; Show, NoPause: Boolean): Integer; stdcall;
我将PCHAR更改为StrCopy(Data, PChar(Temp)); // Putting reversed string back into data
行中的Pansichar,现在我的问题已经不复存在了。只有一点谷歌搜索使我能够进行更改。实际上,在这个论坛上写下我的问题帮助我在解决方案中零。
欢呼,谢谢。