各位大虾:
求救!
我要用C#调用一个硬件的dll来控制硬件工作,因参数中有大量各式指针,从而很苦恼,部分函数如下:
1.int OpenUSB_Board(int deviceIndex,void *handle)2.Int SetInteractInfo(InteractData* interactInfo);地区//InteractData为一结构体3.int ReadUSB_BoardSN(char *boardSN)4.bool GetExternalStartStopSignal(int &start, int &stop)5.int InputCommand(unsigned char port)望大虾 帮忙。项目在即。最好能给个小例子,在C#中怎么引用、怎么转换、参数怎么传,怎么接受返回值,说明越详细越佳。谢谢...
求救!
我要用C#调用一个硬件的dll来控制硬件工作,因参数中有大量各式指针,从而很苦恼,部分函数如下:
1.int OpenUSB_Board(int deviceIndex,void *handle)2.Int SetInteractInfo(InteractData* interactInfo);地区//InteractData为一结构体3.int ReadUSB_BoardSN(char *boardSN)4.bool GetExternalStartStopSignal(int &start, int &stop)5.int InputCommand(unsigned char port)望大虾 帮忙。项目在即。最好能给个小例子,在C#中怎么引用、怎么转换、参数怎么传,怎么接受返回值,说明越详细越佳。谢谢...
private static extern int OpenUSB_Board(
int lpszProductID,
ref void lpszRCode
);类似这样吧char* 用ref string
BOOL=System.Int32 BOOLEAN=System.Int32 BYTE=System.UInt16
CHAR=System.Int16 COLORREF=System.UInt32 DWORD=System.UInt32
DWORD32=System.UInt32 DWORD64=System.UInt64 FLOAT=System.Float
HACCEL=System.IntPtr HANDLE=System.IntPtr HBITMAP=System.IntPtr
HBRUSH=System.IntPtr HCONV=System.IntPtr HCONVLIST=System.IntPtr
HCURSOR=System.IntPtr HDC=System.IntPtr HDDEDATA=System.IntPtr
HDESK=System.IntPtr HDROP=System.IntPtr HDWP=System.IntPtr
HENHMETAFILE=System.IntPtr HFILE=System.IntPtr HFONT=System.IntPtr
HGDIOBJ=System.IntPtr HGLOBAL=System.IntPtr HHOOK=System.IntPtr
HICON=System.IntPtr HIMAGELIST=System.IntPtr HIMC=System.IntPtr
HINSTANCE=System.IntPtr HKEY=System.IntPtr HLOCAL=System.IntPtr
HMENU=System.IntPtr HMETAFILE=System.IntPtr HMODULE=System.IntPtr
HMONITOR=System.IntPtr HPALETTE=System.IntPtr HPEN=System.IntPtr
HRGN=System.IntPtr HRSRC=System.IntPtr HSZ=System.IntPtr
HWINSTA=System.IntPtr HWND=System.IntPtr INT=System.Int32
INT32=System.Int32 INT64=System.Int64 LONG=System.Int32
LONG32=System.Int32 LONG64=System.Int64 LONGLONG=System.Int64
LPARAM=System.IntPtr LPBOOL=System.Int16[] LPBYTE=System.UInt16[]
LPCOLORREF=System.UInt32[] LPCSTR=System.String LPCTSTR=System.String
LPCVOID=System.UInt32 LPCWSTR=System.String LPDWORD=System.UInt32[]
LPHANDLE=System.UInt32 LPINT=System.Int32[] LPLONG=System.Int32[]
LPSTR=System.String LPTSTR=System.String LPVOID=System.UInt32
LPWORD=System.Int32[] LPWSTR=System.String LRESULT=System.IntPtr
PBOOL=System.Int16[] PBOOLEAN=System.Int16[] PBYTE=System.UInt16[]
PCHAR=System.Char[] PCSTR=System.String PCTSTR=System.String
PCWCH=System.UInt32 PCWSTR=System.UInt32 PDWORD=System.Int32[]
PFLOAT=System.Float[] PHANDLE=System.UInt32 PHKEY=System.UInt32
PINT=System.Int32[] ID=System.UInt32 PLONG=System.Int32[]
PLUID=System.UInt32 PSHORT=System.Int16[] PSTR=System.String
PTBYTE=System.Char[] PTCHAR=System.Char[] PTSTR=System.String
PUCHAR=System.Char[] PUINT=System.UInt32[] PULONG=System.UInt32[]
PUSHORT=System.UInt16[] PVOID=System.UInt32 PWCHAR=System.Char[]
PWORD=System.Int16[] PWSTR=System.String REGSAM=System.UInt32
SC_HANDLE=System.IntPtr SC_LOCK=System.IntPtr SHORT=System.Int16
SIZE_T=System.UInt32 SSIZE_=System.UInt32 TBYTE=System.Char
TCHAR=System.Char UCHAR=System.Byte UINT=System.UInt32
UINT32=System.UInt32 UINT64=System.UInt64 ULONG=System.UInt32
ULONG32=System.UInt32 ULONG64=System.UInt64 ULONGLONG=System.UInt64
USHORT=System.UInt16 WORD=System.UInt16 WPARAM=System.IntPtr
<---------补充----------->
Wtypes.h 中的非托管类型 非托管C 语言类型 托管类名 说明
HANDLE void* System.IntPtr 32 位
BYTE unsigned char System.Byte 8 位
SHORT short System.Int16 16 位
WORD unsigned short System.UInt16 16 位
INT int System.Int32 32 位
UINT unsigned int System.UInt32 32 位
LONG long System.Int32 32 位
BOOL long System.Int32 32 位
DWORD unsigned long System.UInt32 32 位
ULONG unsigned long System.UInt32 32 位
CHAR char System.Char 用 ANSI 修饰。
LPSTR char* System.String 或 System.StringBuilder 用 ANSI 修饰。
LPCSTR Const char* System.String 或 System.StringBuilder 用 ANSI 修饰。
LPWSTR wchar_t* System.String 或 System.StringBuilder 用 Unicode 修饰。
LPCWSTR Const wchar_t* System.String 或 System.StringBuilder 用 Unicode 修饰。
FLOAT Float System.Single 32 位
DOUBLE Double System.Double 64 位
InteractData data = new InteractData();
public static extern int SetInteractInfo(ref data);public static extern int ReadUSB_BoardSN(char[] boardSN);public static extern bool GetExternalStartStopSignal(int start,int stop);public static extern bool InputCommand(String port) //自己理解这个方法应该是设置设备串口的。
[DllImport("yourdll.dll")]
InteractData data = new InteractData();
public static extern int SetInteractInfo(ref data);这句报错Error 1 Identifier expected
InteractData data = new InteractData();
public static extern int SetInteractInfo(ref data);这肯定会出错了
[DllImport("yourdll.dll")]
public static extern int SetInteractInfo(ref data);
这两句必须在一起。。
[DllImport("yourdll.dll")]
InteractData data = new InteractData();
public static extern int SetInteractInfo(ref data);这肯定会出错了
[DllImport("yourdll.dll")]
public static extern int SetInteractInfo(ref data);
这两句必须在一起。。亦是正解。
这句还有一个错, 格式:ref 类型 data
这样就可以了