程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#調用DLL文件時參數對應表

C#調用DLL文件時參數對應表

編輯:關於C#

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 位

習慣用C#寫東西,但平時又會碰到很多要用win32 API的地方,所以經常要用DllImport,但win32函數的類型寫法是很龐雜的,相信為之困擾的不止我一個,現在我整理一份我個人的理解如下,希望高人不吝賜教。

我的基本原則有如下幾點:

1、下面都是針對32位系統的,所以int是32位.long也是32位;

2、各種句柄類的(H開頭),我認為一律是System.IntPtr,到目前為止沒發現出錯;如果哪位在使用中出錯,請指出;

3、LP和P,我實在不懂(對C 不太了解),對於LP和P開頭的函數,如果是和STR有關的,一律寫為System.String,像PLCID這樣指向什麼東西的,寫為System.UInt32(因為指向另一個地址,那就是指針,指針是32位吧),int之類的數值型,那我就寫為int[],以方便.net程序引用(寫成System.UInt32的話,給API調用應該也不會出錯,但.net程序就不好引用了)

如有意見,歡迎指教。謝謝

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[]
PLCID=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.
Wtypes.h 中的非托管類型     非托管 C 語言類型     托管類名     說明
HANDLE     void*     System.IntPtr     在 32 位 Windows 操作系統上為 32 位,在 64 位 Windows 操作系統上為 64 位。
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.Text.StringBuilder    用 ANSI 修飾。
LPCSTR     Const char*     System.String 或 System.Text.StringBuilder    用 ANSI 修飾。
LPWSTR     wchar_t*     System.String 或 System.Text.StringBuilder    用 Unicode 修飾。
LPCWSTR     Const wchar_t*     System.String 或 System.Text.StringBuilder    用 Unicode 修飾。
FLOAT     Float     System.Single     32 位
DOUBLE     Double     System.Double     64 位

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved