用到第三方的方法,对方的方法定义为
ShowString(short bank, short XPos, short WPos, short Color, long lpString);
最关键的就是最后一个参数了 表示的是一个字符串的地址 对方给提供的例子是Vc的 我省略了些不必要的代码
char str[365];
strcpy(str,"中华人民共和国");
m_CL2005.ShowString(1,0,0,1,(long)str);在C#中应该怎么写? 参数数据类型不能变 方法是第三方提供的动态库中的

解决方案 »

  1.   

    [DllImport("name.dll")]
            public static extern void ShowString(short bank, short XPos, short WPos, short Color, string lpString);
    string str =  "中华人民共和国";  
    ShowString(1,0,0,1,str); 这其实是PInvoke的调用
      

  2.   

    C#中调用Windows API时的数据类型对应关系
    作者:Jack 日期:2008-10-30 22:01:18
    字体大小: 小 中 大
       
    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 位
      

  3.   

    回楼上的 不是你想的那样 对方提供的不是DLL 是OCX文件
      

  4.   

    你的问题主要就是平台调用过程中的数据封送问题。楼上有人已经给出了正确的答案。但是如果只获得答案,不知道原理,以后遇到了此类问题还是不知道如何下手。如果你想系统学习如何进行数据封送,我推荐你阅读刚刚出版的新书:《精通.NET互操作P/Invoke,C++Interop和COM Interop》,这本书的第2章“数据封送”详细介绍了平台调用中的数据封送过程,非常详细,我就是读完后才搞清楚平台调用中的封送处理。 
    该书的官方网站: 
    www.interop123.com 豆瓣网信息: 
    http://www.douban.com/subject/3671497/