C#中如何将结构体传入动态链接库中
有一段 VC++ 的结构体,并且封装到了LEDShow.DLL中,
//调用 外部函数
在VC++中的调用方式
DLL_API int __stdcall User_AddSingleText(int CardNum,User_SingleText *pSingleText,int iProgramIndex);
typedef struct _User_FontSet //字体设置{ char* strFontName; //字体的名称 int iFontSize; //字体的大小 BOOL bFontBold; //字体是否加粗 BOOL bFontItaic; //字体是否是斜体 BOOL bFontUnderline; //字体是否带下划线 COLORREF colorFont; //字体的颜色 int iAlignStyle; //对齐方式 //0- 左对齐 //1-居中 //2-右对齐 int iVAlignerStyle; //上下对齐方式 //0-顶对齐 //1-上下居中 //2-底对齐 int iRowSpace; //行间距}User_FontSet;typedef struct _User_PartInfo //区域设置{ int iX; //窗口的起点X int iY; //窗口的起点Y int iWidth; //窗体的宽度 int iHeight; //窗体的高度 int iFrameMode; //边框的样式 COLORREF FrameColor; //边框颜色}User_PartInfo;typedef struct _User_MoveSet{ int iActionType; //节目变换方式 int iActionSpeed; //节目的播放速度 BOOL bClear; //是否需要清除背景 int iHoldTime; //在屏幕上停留的时间 int iClearSpeed; //清除显示屏的速度 int iClearActionType; //节目清除的变换方式 int iFrameTime;}User_MoveSet;
extern static int User_AddSingleText(int CardNum,ref User_SingleText pSingleText,int iProgramIndex); struct User_FontSet //字体设置{ IntPtr strFontName; //字体的名称 int iFontSize; //字体的大小 bool bFontBold; //字体是否加粗 bool bFontItaic; //字体是否是斜体 bool bFontUnderline; //字体是否带下划线 int colorFont; //字体的颜色 int iAlignStyle; //对齐方式 //0- 左对齐 //1-居中 //2-右对齐 int iVAlignerStyle; //上下对齐方式 //0-顶对齐 //1-上下居中 //2-底对齐 int iRowSpace; //行间距} struct User_PartInfo //区域设置{ int iX; //窗口的起点X int iY; //窗口的起点Y int iWidth; //窗体的宽度 int iHeight; //窗体的高度 int iFrameMode; //边框的样式 int FrameColor; //边框颜色} struct User_MoveSet{ int iActionType; //节目变换方式 int iActionSpeed; //节目的播放速度 bool bClear; //是否需要清除背景 int iHoldTime; //在屏幕上停留的时间 int iClearSpeed; //清除显示屏的速度 int iClearActionType; //节目清除的变换方式 int iFrameTime;}
[解决办法]
C#中调用Windows API时的数据类型对应关系 BOOL=System.Int32 BOOLEAN=System.Int32 BYTE=System.UInt16CHAR=System.Int16 COLORREF=System.UInt32 DWORD=System.UInt32DWORD32=System.UInt32 DWORD64=System.UInt64 FLOAT=System.FloatHACCEL=System.IntPtr HANDLE=System.IntPtr HBITMAP=System.IntPtrHBRUSH=System.IntPtr HCONV=System.IntPtr HCONVLIST=System.IntPtrHCURSOR=System.IntPtr HDC=System.IntPtr HDDEDATA=System.IntPtrHDESK=System.IntPtr HDROP=System.IntPtr HDWP=System.IntPtrHENHMETAFILE=System.IntPtr HFILE=System.IntPtr HFONT=System.IntPtrHGDIOBJ=System.IntPtr HGLOBAL=System.IntPtr HHOOK=System.IntPtrHICON=System.IntPtr HIMAGELIST=System.IntPtr HIMC=System.IntPtrHINSTANCE=System.IntPtr HKEY=System.IntPtr HLOCAL=System.IntPtrHMENU=System.IntPtr HMETAFILE=System.IntPtr HMODULE=System.IntPtrHMONITOR=System.IntPtr HPALETTE=System.IntPtr HPEN=System.IntPtrHRGN=System.IntPtr HRSRC=System.IntPtr HSZ=System.IntPtrHWINSTA=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.IntPtrPBOOL=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 位