等价的char *在C#(equivalent char* in C#)

2019-07-18 16:29发布

我有一个是用C ++写的DLL。 而且我P /调用调用功能。

我有这个C ++声明。

int dll_registerAccount(char* username, char* password);

我这样做dllimport的声明:

[DllImport("pjsipDlld")]
static extern int dll_registerAccount(IntPtr username, IntPtr password);

请问我的DllImport是等同于C ++使用的IntPtr?

非常感谢您的任何建议,

Answer 1:

这样做的C#方法是让封送处理char*的东西,而你用字符串工作:

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

更换LPStrLPWStr ,如果你与宽字符工作。



Answer 2:

StringBuilder的对于char *,因为长度未知?

[DllImport("pjsipDlld")]
static extern int dll_registerAccount(StringBuilder username, StringBuilder password);


Answer 3:

    [DllImport("pjsipDlld", CharSet = CharSet.Ansi)]
    static extern int dll_registerAccount(string username, string password);


Answer 4:

注意调用约定的,这个我绊倒了。 在我来说,我需要调用一个C ++ DLL但C风格的出口,它使用cdecl调用约定。 如果您有具有源Visual Studio解决方案的奢华,选择属性 - > C / C ++ - >高级,然后在“调用约定”中找到它。 这我对其进行修复:

[DllImport(DllName, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
// bool MyFunction(char* fileName) <-- From the DLL
static extern bool MyFunction(string fileName);


Answer 5:

  [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”是C和C ++程序的默认调用约定
  • 请参阅这些DOC1更多knowladge


文章来源: equivalent char* in C#