关键字DllImport和MarshalAs。
[DllImport("KERNEL32.DLL", EntryPoint="MoveFileW",  SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern bool MoveFile(String src, String dst);//Applied to a parameter.
  public void M1 ([MarshalAs(UnmanagedType.LPWStr)]String msg);
//Applied to a field within a class.
  class MsgText {
    [MarshalAs(UnmanagedType.LPWStr)] Public String msg;
  }
//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage();

解决方案 »

  1.   


    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 位 
      

  2.   

    [DllImport "XXX.dll",CallingConvention=CallingConvention.StdCall)]
    public static extern bool Initial(x,x,x,x);
      

  3.   

    在函数头处加unsafe,或者在指针声明的地方加unsafe试试
    不能保证对
    编译时,出现"指针只能用于不安全的上下文中"错误。为什么??