为什么会出现此类问题? 各位高手帮帮忙.
function SendMsg(servername:PWideChar;ToStr,FromStr,Msg:string):integer;
var
ToName,FromName:array [0..64] of WideChar;
WMsgText:array [0..1000] of WideChar;
MsgLen,i:integer;
begin
for i:=0 to 64 do begin ToName[i]:=#0;FromName[i]:=#0 end;
ToUnicode(ToStr,ToName);
ToUnicode(FromStr,FromName);
for i:=0 to 1000 do WMsgText[i]:=#0;
ToUnicode(Msg,WMsgText);
Result:=NetMessageBufferSend(servername,ToName,FromName,@WMsgText,MsgLen);
end;
对于上面的函数,tounicode怎么转换过去,找了很久的原因,都没有找到?
出现incompatible types : 'cardinal' and 'string';的错误,那位高手帮帮忙?谢了.
[解决办法]
ToUnicode
这个函数在哪儿定义的?
如果是自己定义的函数,在引用里加上这个单元。
如果是系统函数,
在Windows.pas中的定义是:
function ToUnicode(wVirtKey, wScanCode: UINT; const KeyState: TKeyboardState;
var pwszBuff; cchBuff: Integer; wFlags: UINT): Integer; stdcall;
[解决办法]
楼主是不是照这样写的
function ToUnicode(str:string;dest:PWideChar):integer;
function SendMsg(Toh,From,Msg:string):integer;
function NetMessageBufferSend(servername:PWideChar;
MsgName:PWideChar;
FromName:PWideChar;
Buf: PWideChar;
var BufLen:integer):integer;cdecl;
implementation
function ToUnicode(str:string;dest:PWideChar):integer;
var
len:integer;
begin
StringToWideChar(str,dest,len);
Result:=len;
end;
function NetMessageBufferSend; external 'netapi32.dll' name 'NetMessageBufferSend';
function SendMsg(Toh,From,Msg:string):integer;
var
ToName :array [0..64] of WideChar;
FromName :array [0..64] of WideChar;
WMsgText:array [0..1000] of WideChar;
MsgLen, i:integer;
begin
for i := 0 to 64 do ToName[i] := #0;
ToUnicode(Toh,ToName);
for i := 0 to 64 do FromName[i] := #0;
ToUnicode(From,FromName);
for i := 0 to 1000 do WMsgText[i] := #0;
ToUnicode(Msg,WMsgText);
Result:=NetMessageBufferSend(nil,ToName,FromName,@WMsgText,MsgLen);
end;
end.