NetMessageBufferSend( StringBuilder servername, StringBuilder msgname, StringBuilder fromname, byte *buf, int buflen );
NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
byte *buf, //好像不该这么使
int buflen );
toname:pwidechar;
fromname:pwidechar;
buf: pwidechar;
var buflen:integer):integer;stdcall; external 'netapi32.dll' name 'netmessagebuffersend';注意其中的参数都是pwidechar类型哟!而且不是普通的pcha类型,所以我们要做个简单的转化,转化的过程到是很简单,使用stringtowidechar函数即可。现在我们可以设置几个string变量了,假设string1是你的名字,string2是接受者的ip,string3是消息内容。const
max_length=1025;
var
string1,string2,string3:string;
pstring1,pstring2:array[0..28] of pwidechar;
pstring3:array[0..1024]o of pwidechar;
length,i,j:integer;
//下面先进行一个转换,讲string类型转换成api函数的pwidechar类型
begin
for i:=0 to 28 do pstring1[i]:=#0;//将所有的字节都填充#0字符
stringtowidechar(string1,psting1,length);//这个rtl函数可以完成这个转换
for i:=0 to 28 do pstring2[i]:=#0
stringtowidechar(string2,psting2,length);
for i:=0 to 1024 do pstring1[i]:=#0
stringtowidechar(string3,psting3,length);
//length返回实际转换的空间(字节长度),不要管他!
//转换完成了,现在可以调用这个api了
j:=netmessagebuffersend(nil,@psting2,@pstring1,@pstring3,max_length);
NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
byte buf,
int buflen );
你试试看这样可以否????
转换数非托管——托管数据类型你参看:ms-help://MS.VSCC/MS.MSDNVS.2052/win32/type_4ylv.htm
public static extern int NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
StringBuilder buf,
int buflen );
哪位高手把上边的delphi代码给翻译过来吧。
public class NetAPI
{
[DllImport("netapi32.dll")]
public static extern int NetMessageBufferSend(
[MarshalAs(UnmanagedType.LPWStr)] string servername,
[MarshalAs(UnmanagedType.LPWStr)] string msgname,
[MarshalAs(UnmanagedType.LPWStr)] string fromname,
[MarshalAs(UnmanagedType.LPWStr)] string buf,
int buflen);
}调用如下:
string ToName="localhost";
string FromName="localhost";
string buf="Hello";
NetAPI.NetMessageBufferSend(
null,ToName,FromName,buf,buf.Length*2);