equivalent char* in C#

后端 未结 5 523
深忆病人
深忆病人 2020-11-30 13:02

I have a dll that is written in c++. And I am p/invoking to call the functions.

I have this c++ declaration.

int dll_registerAccount(char* username,          


        
相关标签:
5条回答
  • 2020-11-30 13:44

    The C# way of doing this is by letting the marshaler handle the char* stuff while you work with a string:

    [DllImport("pjsipDlld")]
    static extern int dll_registerAccount(
        [MarshalAs(UnmanagedType.LPStr)]string username,
        [MarshalAs(UnmanagedType.LPStr)]string password);
    

    Replace LPStr with LPWStr if you're working with wide chars.

    0 讨论(0)
  • 2020-11-30 13:52

    StringBuilder for char*, since the length is unknown?

    [DllImport("pjsipDlld")]
    static extern int dll_registerAccount(StringBuilder username, StringBuilder password);
    
    0 讨论(0)
  • 2020-11-30 13:55

    Be aware of calling conventions, this tripped me up. In my case I need to call a C++ DLL but with C-style exports, which uses the cdecl calling convention. If you have the luxury of having the source Visual Studio Solution, go to Properties -> C/C++ -> Advanced and find it under "Calling Convention". This fix it for me:

    [DllImport(DllName, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
    // bool MyFunction(char* fileName) <-- From the DLL
    static extern bool MyFunction(string fileName);
    
    0 讨论(0)
  • 2020-11-30 14:01
        [DllImport("pjsipDlld", CharSet = CharSet.Ansi)]
        static extern int dll_registerAccount(string username, string password);
    
    0 讨论(0)
  • 2020-11-30 14:04
    [DllImport("DLL loction"), EntryPoint = "dll_registerAccount",
        CallingConvention = CallingConvention.Cdecl)]
    [return : MarshalAs(UnmanagedType.I4)]
    static extern int dll_registerAccount(
        [MarshalAs(UnmanagedType.LPStr)]string username,
        [MarshalAs(UnmanagedType.LPStr)]string password);
    
    • cdecl is the default calling convention for C and C++ programs,
    • refer these doc for more information.
    0 讨论(0)
提交回复
热议问题