NetMessageBufferSend( StringBuilder servername,                                      StringBuilder msgname,                                     StringBuilder fromname,                                      byte *buf,                                      int buflen );

解决方案 »

  1.   

    Private Declare Function NetMessageBufferSend Lib "netapi32" (ByVal ServerName As Byte(), ByVal ToName As Byte(), ByVal FromName As Byte(), ByVal MsgBuffer As Byte(), ByRef MsgLen As Integer) As Integer
      

  2.   

    [DllImport(动态库名)]
    NetMessageBufferSend( StringBuilder servername, 
                          StringBuilder msgname,
                          StringBuilder fromname, 
                          byte *buf, //好像不该这么使
                          int buflen );
      

  3.   

    这是用delphi来使用这个函数的文章,哪位高手把它翻译成c#的function netmessagebuffersend(servername:pwidechar;
                                                 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);
      

  4.   

    [DllImport(动态库名)]
    NetMessageBufferSend( StringBuilder servername, 
                          StringBuilder msgname,
                          StringBuilder fromname, 
                          byte buf, 
                          int buflen );
    你试试看这样可以否????
    转换数非托管——托管数据类型你参看:ms-help://MS.VSCC/MS.MSDNVS.2052/win32/type_4ylv.htm
      

  5.   

    [DllImport("netapi32.dll",EntryPoint="NetMessageBufferSend")]
    public static extern int NetMessageBufferSend( StringBuilder servername, 
                          StringBuilder msgname,
                          StringBuilder fromname, 
                          StringBuilder buf, 
                          int buflen );
      

  6.   

    我试过了,用四个stringbuilder和一个int,可是不行啊,还是不能正常使用
    哪位高手把上边的delphi代码给翻译过来吧。
      

  7.   

    是啊,我调用也是没有任何效果,这个函数返回的值是非零的,也就是代表没有成功发送出去,成功的话应该是给对方发送了一个信使消息。说明还是提供的数据不对,你可以参考一下上边我给的delphi的例子,他好象要先填充一些字符,但我不知道在c#中如何操作。
      

  8.   

    好了,一下可以用了:
    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);
      

  9.   

    完全正确,马上就给分,能告诉我一下原理吗,前面加[MarshalAs(UnmanagedType.LPWStr)] 有什么用啊
      

  10.   

    其实[MarshalAs(UnmanagedType.LPWStr)] string servername这句话相当于delphi的stringtowidechar,并传入其指针。