请问下面API在C#中怎么声明?
int32 GetDataFromEthernet(unsigned long pDT4000, char *pData, long *lDataLength, unsigned char cBlocked);
int32 GetDataFromEthernet(unsigned long pDT4000, char *pData, long *lDataLength, unsigned char cBlocked);
解决方案 »
- 准备做一个在线考试系统,有几个问题请教各位。
- 请教一下,用户是否要不情愿的被软件绑架?
- C# 绘制十字光标?
- WINFORM如何点一列弹出窗体显示详细信息????
- arraylist的调用
- 个人感觉socket比remoting好实现!
- 提一个问题,把int转变为byte的最简单,效率最高的算法是什么啊?
- File.GetDirectoryNameFromPath 应该用什么命名空间?
- 怎样把文本文件中的数据倒入 winform的datagrid中
- 同样一个文件为什么么在不同目录下,结果不一样,我是新手,在线等待
- c# out参数 怎样达到既输入又输出
- datagrid怎么在DeleteCommand事件里面的到要删除行的某列的值,在线等啊
extern WINAPI void YaData(BYTE * pInData,int L,BYTE *pOutData,int &OutSize);
extern WINAPI void YaData( System.IntPtr pInData,int L, System.IntPtr pOutData, ref int OutSize);
c# call
byte[] bInData = .....
System.IntPtr hIn = Marshal.UnsafeAddrOfPinnedArrayElement( bInData ,0);
byte[] bOutData = new byte[bInData.Length];
int outlen = 0;
System.IntPtr hOut = Marshal.UnsafeAddrOfPinnedArrayElement( bOutData ,0);
YaData( hIn , hIn.Length , hOut, ref outlen );
Marshal.Copy( hout , bOutData , 0 , outlen );
[DllImport(..)]
public extern static int32 GetDataFromEthernet( uint pDT4000, byte[] pData, ref int lDataLength, byte cBlocked);
[DllImport(..)]
public extern static int32 GetDataFromEthernet( uint pDT4000, [Out]byte[] pData, ref int lDataLength, byte cBlocked);
我是采用第一种的,但pData没有获取数据?晕死了
Public Declare Function GetDataFromEthernet Lib "DT4000_LIB.dll" (ByVal IpAddress As Long, ByVal sData As String, DataLen As Long, ByVal cBlock As Byte) As Long
我对VB不熟
[DllImport(..)]
public extern static int32 GetDataFromEthernet( uint pDT4000,
[Out, MarshalAs(UnmanagedType.LPTStr)]string pData, ref int lDataLength, byte cBlocked);or[DllImport(..)]
public extern static int32 GetDataFromEthernet( uint pDT4000,
[Out, MarshalAs(UnmanagedType.LPTStr)]StringBuilder pData, ref int lDataLength, byte cBlocked);
但问题还是一样的
pData返回空字符串,lDataLength = 0
int dataLen = 0;
int ret = GetDataFromEthernet(_ipAddress,sData,ref dataLen,0);
public extern static int32 GetDataFromEthernet( uint pDT4000,
[Out, MarshalAs(UnmanagedType.LPTStr)]StringBuilder pData, ref int lDataLength, byte cBlocked);//Call
StringBuilder sData = new StringBuilder( 256 );
int dataLen = 0;
int ret = GetDataFromEthernet(_ipAddress,sData,ref dataLen,0);
32 DWORD Int32 IOCTL_HAL_GET_DEVICEID
32 LPVOID IntPtr IntPtr.Zero (no input data required)
32 DEVICE_ID* byte[] byte[20] (20 bytes is the size of the DEVICE_ID structure)
32 LPDWORD ref Int32 0
32 WORD ushort 说明:在win32中以LP开头的,表示是Long Point(常指针),在C#中一般是以相对应的ref类型的参数。
参考一下上面的,会对你有所帮助的。