关于在c#中使用api函数的问题!

tangqi0652 2003-04-17 05:39:15
NetMessageBufferSend( LPWSTR servername,

LPWSTR msgname,

LPWSTR fromname,

LPBYTE buf,

DWORD buflen );
有这样一个api函数,我在c#中使用的时候,这几个参数应该定义为什么类型呢?
...全文
88 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2003-04-23
  • 打赏
  • 举报
回复
其实[MarshalAs(UnmanagedType.LPWStr)] string servername这句话相当于delphi的stringtowidechar,并传入其指针。
tangqi0652 2003-04-23
  • 打赏
  • 举报
回复
完全正确,马上就给分,能告诉我一下原理吗,前面加[MarshalAs(UnmanagedType.LPWStr)] 有什么用啊
Knight94 2003-04-23
  • 打赏
  • 举报
回复
好了,一下可以用了:
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);
tangqi0652 2003-04-22
  • 打赏
  • 举报
回复
是啊,我调用也是没有任何效果,这个函数返回的值是非零的,也就是代表没有成功发送出去,成功的话应该是给对方发送了一个信使消息。说明还是提供的数据不对,你可以参考一下上边我给的delphi的例子,他好象要先填充一些字符,但我不知道在c#中如何操作。
Knight94 2003-04-22
  • 打赏
  • 举报
回复
你能告诉我正确执行后会是什么效果吗,我调用后没什么反应?

我回去再试试,明天来回复。
tangqi0652 2003-04-21
  • 打赏
  • 举报
回复
我试过了,用四个stringbuilder和一个int,可是不行啊,还是不能正常使用
哪位高手把上边的delphi代码给翻译过来吧。
Knight94 2003-04-18
  • 打赏
  • 举报
回复
[DllImport("netapi32.dll",EntryPoint="NetMessageBufferSend")]
public static extern int NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
StringBuilder buf,
int buflen );
snewxf 2003-04-17
  • 打赏
  • 举报
回复
[DllImport(动态库名)]
NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
byte buf,
int buflen );
你试试看这样可以否????
转换数非托管——托管数据类型你参看:ms-help://MS.VSCC/MS.MSDNVS.2052/win32/type_4ylv.htm
tangqi0652 2003-04-17
  • 打赏
  • 举报
回复
这是用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);
Knight94 2003-04-17
  • 打赏
  • 举报
回复
[DllImport(动态库名)]
NetMessageBufferSend( StringBuilder servername,
StringBuilder msgname,
StringBuilder fromname,
byte *buf, //好像不该这么使
int buflen );
dlmhtao 2003-04-17
  • 打赏
  • 举报
回复
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
tangqi0652 2003-04-17
  • 打赏
  • 举报
回复
熟悉这个函数的朋友可不可以告诉我怎么用啊,例如把一个字符串格式化成参数的格式再进行使用。
csdn_bob 2003-04-17
  • 打赏
  • 举报
回复
NetMessageBufferSend( StringBuilder servername,

StringBuilder msgname,

StringBuilder fromname,

byte *buf,

int buflen );

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧