原函数的定义如下:
int WINAPI SendData(const char *ChannelName, const void *Buffer, const long Size );
void *Buffer是要发送的结构体变量.
那么,C#中该如何使用这个函数呢?
int WINAPI SendData(const char *ChannelName, const void *Buffer, const long Size );
void *Buffer是要发送的结构体变量.
那么,C#中该如何使用这个函数呢?
解决方案 »
- c#下载程序在win7上的代理问题
- 有關 IPEndPoint定義問題
- [请大家讨论]委托函数的细节问题...
- 如何将下面的字符串一个一个的输出,中间不能有空格!
- 高分求助!!c#.net中dataGridView点击某一行,然后,弹出新窗口,然后在新窗口中修改数据,提交后新窗口关闭,母窗口dataGridView数据进行
- 关于打印(Winform)?
- 有没有对boolean类型变量求反的函数?或者是方法?
- C#。winform 窗体跳转,数据传输,涉及父窗体,子窗体
- 求助ToolStrip动态添加DropDownButton
- 怎样强制删除一个对象呢??
- 用C#做WORD的高手帮我看看拉,在线等!十万火急!!
- .net 窗体移动事件
static extern unsafe int SendData
(
char *ChannelName,
void *Buffer,
long size
);
char * => char[]
void * => object
long => int
int => short
static extern unsafe int SendData
(
[MarshalAs(UnmanagedType.LPStr)] //究竟是LPStr还是LPTStr还是LPWStr要看你的dll
string ChannelName,
[MarshalAs(UnmanagedType.AsAny)]
ref Buffer结构体类型 Buffer,
int size
);
[System.Runtime.InteropServices.DllImport("dllname", SetLastError = true)]
static extern unsafe int SendData
(
[MarshalAs(UnmanagedType.LPStr)] //究竟是LPStr还是LPTStr还是LPWStr要看你的dll
string ChannelName,
[MarshalAs(UnmanagedType.AsAny)]
ref Buffer结构体类型 Buffer,
int size
);
http://topic.csdn.net/t/20050809/09/4197232.html
typedef struct Tel_Head_L3
{
int Len;
int ID;
}Tel_Head_L3, *PTel_Head_L3;typedef struct SlabIdent_L3
{
Tel_Head_L3 Head; //电文头
char CoilNo[COILNO_LEN+1];
}SLABIDENT_L3,*PSLABIDENT_L3;
SlabIdent_L3 tel_l3;
memset(&tel_l3, 0x00, sizeof(tel_l3));
tel_l3.Head.ID=TELID_SLABIDENT_L3;
tel_l3.Head.Len=sizeof(tel_l3);
sprintf( tel_l3.CoilNo,coilno);
int rect=SendData("send", &tel_l3, sizeof(tel_l3));
struct Tel_Head_L3
{
public int Len;
public int ID;
}struct SlabIdent_L3
{
public Tel_Head_L3 Head; //电文头
public byte[] CoilNo;
}SlabIdent_L3 tel_l3;tel_l3.CoilNo=new byte[COILNO_LEN+1]; //常量自己获取
tel_l3.Head.ID=TELID_SLABIDENT_L3; //常量自己获取
tel_l3.Head.Len=sizeof(tel_l3);int rect=SendData("send", ref tel_l3, sizeof(tel_l3));
[System.Runtime.InteropServices.DllImport("dllname", SetLastError = true)] //dllname改成你那dll的名称
static extern unsafe int SendData
(
[MarshalAs(UnmanagedType.LPStr)] //究竟是LPStr还是LPTStr还是LPWStr要看你的dll
string ChannelName,
[MarshalAs(UnmanagedType.AsAny)]
ref SlabIdent_L3 Buffer,
int size
);
自己查下。
总之方法很多呀