使用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行为的有限知识是一个促成因素。我欢迎任何可能有用的建议。干杯
答案 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,现在我的问题不复存在了。
只是一点点谷歌搜索使我能够做出改变。实际上在这个论坛上写下我的问题帮助我解决了问题。
干杯,谢谢。