API函数的使用的列表

最近做一个私人项目,一个模块用到了较多的api。觉得c#中(我原来是做delphi的),使用api函数较为不便,就萌生了
把api函数集全部封装,做成一个程序集,这样c#程序中只要引用此DLL,就可以直接使用某api函数(程序集win32api.dll 含1500多api,6000多常量声明,400多个api调用使用的结构体声明)
做了如下尝试:
1、参考了一些网站,例如“http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp?Windows+API”
但是,发现他声明的函数参数也有些处理的不好,而且结构体声明,居然只有一个页面有(好像是kernel32.dll),其他dll
参数使用的结构体居然未写上,于是放弃里从该网站获取函数声明的念头。

2、直接使用vb6的win32api.txt,发现他的函数声明字符一律是string,见下例:
vb6声明:
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
通过自动转换,生成的c#声明为:
[DllImport("user32.dll", EntryPoint = "GetClassName")]
public static extern int GetClassName(IntPtr hwnd,string lpString, int cch);
使用时发现根本取不到第二个参数的返回值。所以从vb6转换的希望也破灭。

3、现在决定从delphi的windows.pas单元转换。
delphi声明:
function GetClassName(hWnd: HWND; lpClassName: PChar; nMaxCount: Integer): Integer; stdcall;
这样声明的话,很清楚的第二个参数不能传常量string了,传字符地址是可以的。
现在遇到如下问题:
windows.pas单元中封装api时使用了很多delphi自己的类型,现在要和c#的数据类型做一个转换,类型我已经全部提取出来了。
其中左边是delphi的类型,右边是我转换的类型(含??字样的说明还不确定,带“结构体”字样的,那是确定了的,因为我在已经定义好的400多个结构体中能找到匹配项),请热心的朋友帮忙看看,这样转换是否有问题,
如果你认为有问题,请把你认为正确的转换关系发出来。大家来讨论讨论。
按照我下面定义好的类型转换关系,我用工具转换SendMessage函数的结果是:

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);

//Integer   -  int
//Pointer   -  IntPtr
//PLongint  -  IntPtr
//Longint   - long
//HGLOBAL   -  int
//HMODULE   -  int
//DWORD     - long
//LPCSTR    - IntPtr,StringBuffer
//UINT       -  uint
//TMemoryStatus  - MEMORYSTATUS (结构体)
//HLOCAL   -  int
//THandle   - long
//TMemoryBasicInformation  - MEMORY_BASIC_INFORMATION (结构体)
//TProcessHeapEntry   - ???
//PChar             - IntPtr,StringBuffer
//PAnsiChar         - IntPtr,StringBuffer
//PWideChar         - IntPtr,StringBuffer
//TFileTime       - FILETIME  (结构体)
//BOOL             - bool
//PDWORD           -  IntPtr
//TExceptionPointers  - EXCEPTION_POINTERS
//TFNFiberStartRoutine  -  IntPtr
//TFNTopLevelExceptionFilter  -  IntPtr
//TFNThreadStartRoutine    -  IntPtr
//Bool               - bool
//TLDTEntry          - LDT_ENTRY(结构体);
//TOverlapped        - OVERLAPPED (结构体);
//POverlapped        - IntPtr, ref OVERLAPPED ???
//TContext     - CONTEXT  (结构体);
//TFNAPCProc     -  IntPtr
//TDebugEvent    - ???
//TRTLCriticalSection - ???
//PWOHandleArray   -  IntPtr
//HINST      -  int
//HRSRC    -  int
//ATOM      - int
//TByHandleFileInformation   - BY_HANDLE_FILE_INFORMATION  (结构体);
//PFileTime    - IntPtr,ref FILETIME(结构体)   ??
//PHandle        -  IntPtr
//PComStat       -  IntPtr
//TCommConfig    - COMMCONFIG(结构体);
//TCommProp      - COMMPROP (结构体);
//TDCB             - DCB (结构体);
//TCommTimeouts      - COMMTIMEOUTS (结构体);
//CHAR                - char
//TSystemTime         - SYSTEMTIME  (结构体);
//TSystemInfo          - SYSTEM_INFO   (结构体);
//PTimeZoneInformation    - intptr,ref TIME_ZONE_INFORMATION(结构体)
//TTimeZoneInformation   -TIME_ZONE_INFORMATION(结构体)
//Word                  - int
//PSecurityAttributes      - intptr,ref SECURITY_ATTRIBUTES(结构体)
//ULONG                    - ulong
//TFNExportFunc        - ???
//TFNImportFunc        - ???
//TRecoveryAgentInformation   - ???
//TRecoveryAgentInformationA  - ???
//TRecoveryAgentInformationW  - ???
//TOFStruct     - OFSTRUCT(结构体)
//HFILE   - long
//PINT    - intPtr
//TPROverlappedCompletionRoutine    - intPtr
//FARPROC      - intPtr
//PByte         - intPtr
//TLargeInteger    - LARGE_INTEGER(结构体)
//TFNTimerAPCRoutine  - intPtr
//TStartupInfo      - STARTUPINFO (结构体)
//TProcessInformation  - PROCESS_INFORMATION(结构体)
//ENUMRESTYPEPROC  - intPtr
//ENUMRESNAMEPROC  - intPtr
//ENUMRESLANGPROC  - intPtr
//PLargeInteger     - intPtr
//TGetFileExInfoLevels - ???
//TFindexInfoLevels    - ???
//TFindexSearchOps      - ???
//TWIN32FindData     - WIN32_FIND_DATA  (结构体)
//TWIN32FindDataA      - WIN32_FIND_DATA  (结构体)
//TWIN32FindDataW     - WIN32_FIND_DATA  (结构体)
//TFNProgressRoutine   - intPtr
//PBool             - intPtr
//TSecurityImpersonationLevel  - ???
//SECURITY_INFORMATION   - long
//PSecurityDescriptor    - intptr,ref SECURITY_DESCRIPTOR  (结构体)
//TGenericMapping      - GENERIC_MAPPING  (结构体)
//TPrivilegeSet         - PRIVILEGE_SET   (结构体)
//PSID               - intPtr
//PObjectTypeList    - intPtr
//TTokenInformationClass  - ??
//TTokenPrivileges    - TOKEN_PRIVILEGES    (结构体)
//PTokenPrivileges    - intPtr
//TTokenGroups        - TOKEN_GROUPS     (结构体)
//AUDIT_EVENT_TYPE
//UCHAR        - byte
//TSIDIdentifierAuthority  - ??
//Byte            - byte
//TACL              - ACL (结构体)
//TAclInformationClass   - ??
//PGuid                  - intPtr
//SECURITY_DESCRIPTOR_CONTROL  - long
//PACL    - intPtr
//PGUID    - intPtr
//LPDWORD   - intPtr
//SID_NAME_USE    - long
//HWND        - int
//PCommConfig   - intPtr
//TTokenType     - ??
//THWProfileInfo   - ??
//THWProfileInfoA  - ??
//THWProfileInfoW  - ??
//TOSVersionInfo      - OSVERSIONINFO  (结构体)
//TSystemPowerStatus      - SYSTEM_POWER_STATUS  (结构体)
//TWinCertificate   - ??
//TGUID            - ??
//HPALETTE          - long
//PPaletteEntry     - intPtr
//HDC               - long
//PPixelFormatDescriptor - intPtr
//HRGN              - long
//HMETAFILE          - int
//TBitmap             - ??
//TLogBrush         - LOGBRUSH  (结构体)
//PDeviceMode        - intPtr
//PDeviceModeA      - intPtr
//PDeviceModeW      - intPtr
//TBitmapInfoHeader    - BITMAPINFOHEADER (结构体)
//TBitmapInfo         - BITMAPINFO   (结构体)
//TRect                - RECT (结构体)
//TLogFont             -LOGFONT    (结构体)
//TLogFontA               -LOGFONT    (结构体)
//TLogFontW               -LOGFONT    (结构体)
//COLORREF                - long
//TLogPalette              - LOGPALETTE   (结构体)
//TLogPen              - LOGPEN    (结构体)
//HBITMAP              - long
//HGDIOBJ              - long
//TPixelFormatDescriptor   - PIXELFORMATDESCRIPTOR (结构体)
//TFNFontEnumProc       - intPtr
//LPARAM                - long
//TFNFontEnumProcA     - intPtr
//TFNFontEnumProcW      - intPtr
//TFNGObjEnumProc       - intPtr
//LPSTR                 -intPtr,Ref stringbuffer
//PXForm                 - intPtr
//TRgnData                 - RGNDATA  (结构体)
//HBRUSH                   - long
//TSize                      - SIZE (结构体)
//TPoint                      - POINTAPI  (结构体)
//PPoint                      - intPtr
//HBitmap                     - long
//TGlyphMetrics                - GLYPHMETRICS (结构体)
//TMat2                          - MAT2  (结构体)
//TRasterizerStatus              - RASTERIZER_STATUS(结构体)
//PRgnData                       - intPtr
//PInteger                       - intPtr
//PFontSignature                 - intPtr
//TCharsetInfo                   - CHARSETINFO (结构体)
//TGCPResults                      - GCP_RESULTS (结构体)
//PGlyphSet                        - intPtr
//PWORD                            - intPtr
//PDesignVector                    - intPtr
//PEnumLogFontExDV                 - intPtr
//PEnumLogFontExDVA                - intPtr
//PEnumLogFontExDVW                - intPtr
//TFNLineDDAProc                   - intPtr
//TDeviceMode                       - ??
//TDeviceModeA                     - ??
//TDeviceModeW                     - ??
//PRect                             - intPtr
//HRgn                              - long
//TBlendFunction                    - intPtr
//PBitmapInfo                       - ??
//TTriVertex                        - ??
//THandleTable                       - HANDLETABLE (结构体)
//TMetaRecord                           - METARECORD  (结构体)
//TFNMFEnumProc                       - intPtr
//HENHMETAFILE                        - int
//TFNEnhMFEnumProc                    - intPtr
//PEnhMetaHeader                       - intPtr
//Cardinal                              - int
//TEnhMetaRecord                       - ENHMETARECORD  (结构体)
//TMetaFilePict                        - METAFILEPICT   (结构体)
//TTextMetric                          - TEXTMETRIC  (结构体)
//TTextMetricA                         - TEXTMETRIC  (结构体)
//TTextMetricW                         - TEXTMETRIC  (结构体)
//Single                                - int
//TXForm                                - XFORM (结构体)
//TColorAdjustment                         - COLORADJUSTMENT (结构体)
//TDocInfo                                - DOCINFO  (结构体)
//TDocInfoA                           - DOCINFO  (结构体)
//TDocInfoW                           - DOCINFO  (结构体)
//TFNAbortProc                        - intPtr
//PSingle                             - intPtr
//PSize                               - intPtr
//HCOLORSPACE                         - long
//TLogColorSpace                       - LOGCOLORSPACE (结构体)
//TLogColorSpaceA                      - LOGCOLORSPACE (结构体)
//TLogColorSpaceW                      - LOGCOLORSPACE (结构体)
//TFNICMEnumProc                       - intPtr
//HGLRC                                - long
//PGlyphMetricsFloat                  - intPtr
//TLayerPlaneDescriptor               - ??
//PWGLSwap                            - intPtr
//va_list                             - intPtr
//HKL                                 - long
//TMouseMovePoint                     - ??
//HWINSTA                             - long
//TFNDeskTopEnumProc                    - intPtr
//HDESK                                 - long
//TFNWndEnumProc                        - intPtr
//TFNWinStaEnumProc                     - intPtr
//TTrackMouseEvent                      - ??
//TMsg                                  - MSG (结构体)
//WPARAM                                - int
//TFNSendAsyncProc                       - intPtr
//HDEVNOTIFY            - intPtr
//LRESULT               - int
//TFNWndProc            - intPtr
//TWndClass              - WNDCLASS   (结构体)
//TWndClassA            - WNDCLASS   (结构体)
//TWndClassW            - WNDCLASS   (结构体)
//TWndClassEx           - WNDCLASS   (结构体)
//TWndClassExA           - WNDCLASS   (结构体)
//TWndClassExW          - WNDCLASS   (结构体)
//HMENU                 - long
//PBLENDFUNCTION        - intPtr
//FLASHWINFO            - ??
//PWindowPlacement      FLASHWINFO
//HDWP                  - int
//TFNDlgProc             - intPtr
//TDlgTemplate            - DLGTEMPLATE (结构体)
//Char                  char
//AnsiChar              char
//WideChar              char
//TKeyboardState           // ?
//TInput                   // ?
//TLastInputInfo           // ?
//TFNTimerProc            - intPtr
//HACCEL                  - long
//PTPMParams              - intPtr
//TMenuInfo                - MENUITEMINFO  (结构体)
//TMenuItemInfo           - MENUITEMINFO  (结构体)
//TMenuItemInfoA          - MENUITEMINFO  (结构体)
//TMenuItemInfoW          - MENUITEMINFO  (结构体)
//HICON                   - long
//PDrawTextParams         - intPtr
//TFNGrayStringProc       - intPtr
//TFNDrawStateProc        - intPtr
//TPaintStruct             - PAINTSTRUCT  (结构体)
//TFNPropEnumProcEx        - intPtr
//TFNPropEnumProc          - intPtr
//TMsgBoxParams             - MSGBOXPARAMS  (结构体)
//TMsgBoxParamsA            - MSGBOXPARAMS  (结构体)
//TMsgBoxParamsW            - MSGBOXPARAMS  (结构体)
//Pointer                   - intPtr
//TFNHookProc               - intPtr
//HHOOK                       - long
//TIconInfo                    - ICONINFO (结构体)
//TScrollInfo                 - SCROLLINFO (结构体)
//TDisplayDevice              // ?
//TDisplayDeviceA             // ?
//TDisplayDeviceW             // ?
//TFNWinEventProc             - intPtr
//TGUIThreadinfo              // ?
//TCursorInfo                 CURSORINFO
//TWindowInfo                 // ?
//TTitleBarInfo               // ?
//TMenuBarInfo                // ?
//TScrollBarInfo              // ?
//TComboBoxInfo               // ?
//TAltTabInfo                 // ?
//TCPInfo                      - CPINFO (结构体)
//LPWSTR                      - intPtr
//PBOOL                       - intPtr
//LCID                        - long
//LCTYPE                      - long
//PSystemTime                  - intPtr
//PNumberFmt    - intPtr
//PNumberFmtA   - intPtr
//PNumberFmtW   - intPtr
//PCurrencyFmt   - intPtr
//PCurrencyFmtA    - intPtr
//PCurrencyFmtW                - intPtr
//TFNCalInfoEnumProc   - intPtr
//CALID                - long
//CALTYPE              - long
//TFNTimeFmtEnumProc    - intPtr
//TFNDateFmtEnumProc    - intPtr
//WCHAR                 - char
//TFNLocaleEnumProc     - intPtr
//TFNCodepageEnumProc    - intPtr
//TInputRecord             // ?
//TCoord                   - COORD (结构体)
//TSmallRect                - SMALL_RECT (结构体)
//TConsoleScreenBufferInfo   - CONSOLE_SCREEN_BUFFER_INFO
//TConsoleCursorInfo          - CONSOLE_CURSOR_INFO (结构体)
//PSmallRect          - intPtr
//TCharInfo           - CHAR_INFO
//TFNHandlerRoutine   - intPtr
//HKEY                - long
//REGSAM              - long
//PSECURITY_DESCRIPTOR   - intPtr
//TNetResource           - NETRESOURCE  (结构体)
//TNetResourceA          - NETRESOURCE  (结构体)
//TNetResourceW          - NETRESOURCE  (结构体)
//TConnectDlgStruct      // ?
//TDiscDlgStruct         // ?
//TDiscDlgStructA        // ?
//TDiscDlgStructW       // ?
//PNetResource     - intPtr
//PNetResourceA  - intPtr
//PNetResourceW   - intPtr
//TNetInfoStruct   // ?
//PNetConnectInfoStruct  - intPtr
//HWnd            - long
//TSecurityQualityOfService    - SECURITY_QUALITY_OF_SERVICE(结构体)
//PSecurityQualityOfService   - intPtr
//PUINT               - intPtr




[DllImport("user32.dll", EntryPoint = "GetClassName")] 
public static extern int GetClassName(IntPtr hwnd,string lpString, int cch); 

楼主这个声明是有问题提的 VB 默认都是引用传递
不是楼主类型错了其实是少了 ref 关键子或者应该改成 System.Text.StringBuilder

转换 api 中不单纯是类型转换,还要看api到底是否传递,还有api 是否是单一的很多api
针对unicode 和ansi 会有两个函数如 GetClassName 就是 GetClassNameA 和 GetClassNameW

EntryPoint = GetClassName 也错了

正确的使用方式应该是
C# code
   
   
[DllImport( " user32.dll " , CharSet = CharSet.Auto /* 根据sdk帮助得知 GetClassName 有w 和 a 两种我们选择自动即可 */ )] public static extern int GetClassName(IntPtr hwnd, /* API中的输入输出字符串对应 StringBuilder */ StringBuilder lpString, int cch); // 使用的时候 StringBuilder sb = new StringBuilder( 256 ); GetClassName( this .Handle,sb, 256 ); Debug.WriteLine(sb.ToString());


C/C++ code
   
   
// VC winuser.h 内的 GetClassNameA WINUSERAPI int WINAPI GetClassNameA( __in HWND hWnd, __out_ecount_part(nMaxCount, return ) LPSTR lpClassName, __in int nMaxCount ); WINUSERAPI int WINAPI GetClassNameW( __in HWND hWnd, __out_ecount_part(nMaxCount, return ) LPWSTR lpClassName, __in int nMaxCount ); #ifdef UNICODE #define GetClassName GetClassNameW #else #define GetClassName GetClassNameA #endif // !UNICODE


所以说.net to win32 并不是简单的类型转换主要还是要看,
1)函数是否是有unicode 类型 就是存在 W 和 A 结尾的两种?
2)参数那个是 in 的或的 inout 的单纯 out 的api 内应该没有,我是没看见过反正;
3)最后才是类型对应其实win32 api 基础类型就是 byte[],byte,int32,uint32,int16,uint16 很少有int64
你看到的hwnd等其实都是宏转换的在win32系统就是Int32,win64 是 int64
HWND to IntPtr (这类其实 uint32,int 都可以)

LPSTR LPWSTR TCHAR CHAR 等等都是string 或 StringBuilder

其实类型最难的是结构体,尤其是里面带字符串或字符数组的那种,我一般都有 byte[] 
取回来在吧byte转换层串;比较麻烦的其实;注意uincode 函数中的char 对应.net char
ansi 的对应 byte

祝你成功;不知道老板给你多长时间,估计这东西我写也得写好久也很难保证全部api 都好使;
反过来使用的时候还有狠多说道;如上边的 GetClassName 在老VB下绝对不是哪么用的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值