none
C#调用C的DLL文件中的函数参数传递问题 RRS feed

  • 问题

  • 函数方法C原型

    int Login(

      char* host,       

      char* port,         

      char* username,  

      char* password   

    );

    C#调用形式,那里面的参数我该怎样传递啊?C#中的代码都是字符串型的。

    [DllImport("SMSClient.dll")]
    public static extern int Login(----);

    以下是我现在的写法,但运行结果不对。

    [DllImport("SMSClient.dll")]
    public static extern int Login(ref byte[] host, ref byte[] port, ref byte[] username, ref byte[] password);

     byte[] host = System.Text.Encoding.Default.GetBytes("smsg.winupon.com");
    byte[] port = System.Text.Encoding.Default.GetBytes("25");
    byte[] username = System.Text.Encoding.Default.GetBytes("sdk_10000130");
    byte[] password = System.Text.Encoding.Default.GetBytes("081281333510");

     LoginNumber = Login(ref host, ref port, ref username, ref password);

    我在线等待,忘高手帮我解决一下。

    2010年10月12日 2:51

答案

  • 你好:

    你可以直接尝试使用string来代替char类型。

    就我所知,一般类型转换如下:

    BSTR——StringBuilder

    LPCTSTR ——StringBuilder

    LPCWSTR ——IntPtr

    handle ——IntPtr

    hwnd ——IntPtr

    char *  ——string

    int * ——ref int

    int & ——ref int

    void * ——IntPtrs

    unsigned char * ——ref byte    

    BOOL ——bool

    详情请参考http://www.cnblogs.com/wdysunflower/archive/2010/09/01/1813947.html
    http://www.cnblogs.com/songwin/articles/1329545.html

    希望对你有所帮助。


    I am here!
    2010年10月13日 7:36
    版主
  • [System.Runtime.InteropServices.DllImportAttribute("SMSClient.dll", EntryPoint="Login")]
    public static extern int Login([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string host, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string port, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string username, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string password) ;
    



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年10月15日 0:10
    版主

全部回复

  • 你好:

    你可以直接尝试使用string来代替char类型。

    就我所知,一般类型转换如下:

    BSTR——StringBuilder

    LPCTSTR ——StringBuilder

    LPCWSTR ——IntPtr

    handle ——IntPtr

    hwnd ——IntPtr

    char *  ——string

    int * ——ref int

    int & ——ref int

    void * ——IntPtrs

    unsigned char * ——ref byte    

    BOOL ——bool

    详情请参考http://www.cnblogs.com/wdysunflower/archive/2010/09/01/1813947.html
    http://www.cnblogs.com/songwin/articles/1329545.html

    希望对你有所帮助。


    I am here!
    2010年10月13日 7:36
    版主
  • [System.Runtime.InteropServices.DllImportAttribute("SMSClient.dll", EntryPoint="Login")]
    public static extern int Login([System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string host, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string port, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string username, [System.Runtime.InteropServices.InAttribute()] [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)] string password) ;
    



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年10月15日 0:10
    版主