C#中调用Windows API时的数据类型对应关系
   
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 位

解决方案 »

  1.   

    参考这个
    http://topic.csdn.net/u/20100122/11/b05222d0-53e0-4404-b943-22aceb7832b9.html
      

  2.   

    http://www.cnblogs.com/yiki/archive/2008/10/29/1321848.htmlC# 与 C++ 数据类型对照
      

  3.   


            [StructLayout(LayoutKind.Sequential)]
            struct tagMinutiae
            {
                [MarshalAs(UnmanagedType.I2)]
                public short x; // 横坐标 
                [MarshalAs(UnmanagedType.I2)]
                public short y; // 纵坐标 
                [MarshalAs(UnmanagedType.I2)]
                public short Direction; // 方向 
                [MarshalAs(UnmanagedType.SafeArray, SizeConst = 3)]
                public short[] Triangle;
                [MarshalAs(UnmanagedType.I2)]
                public short Type; // 类型 
            }
            [StructLayout(LayoutKind.Sequential)]
            struct tagFeature
            {
                [MarshalAs(UnmanagedType.I2)]
                public short MinutiaNum;
                [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_MINUTIANUM, ArraySubType = UnmanagedType.Struct)]
                public tagMinutiae[] MinutiaArr;
            }        [DllImport(" ")]
            public static extern short GetMinutia(ref byte[] lpData, ref byte[] lpOrient, IntPtr feature, short IMGW, short IMGH); 
      

  4.   

    若在msdn中有的函数,上面的方法应该可以的
    若是自己的写的函数,要加上#define LIBEXPORT_API extern "C" __declspec(dllexport),将其函数引出
    再用上面的形式进行调用。
    其实,本网站有这方面的资料下载。