эквивалентный символ * в C # - PullRequest
       10

эквивалентный символ * в C #

3 голосов
/ 20 сентября 2009

У меня есть DLL, которая написана на C ++. И я п / я вызываю для вызова функций.

У меня есть это объявление c ++.

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

Я сделал это объявление dllimport:

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

Будет ли мой DllImport эквивалентен c ++ с использованием IntPtr?

Большое спасибо за любой совет,

Ответы [ 5 ]

24 голосов
/ 20 сентября 2009

C # способ сделать это, позволяя маршалеру обрабатывать вещи char*, пока вы работаете со строкой:

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

Замените LPStr на LPWStr, если вы работаете с широкими символами.

2 голосов
/ 20 сентября 2009

StringBuilder для char *, так как длина неизвестна?

[DllImport("pjsipDlld")]
static extern int dll_registerAccount(StringBuilder username, StringBuilder password);
1 голос
/ 23 января 2019
  [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 для получения дополнительной информации
1 голос
/ 18 ноября 2016

Помните о соглашениях о вызовах, это сбило меня с толку. В моем случае мне нужно вызвать 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);
1 голос
/ 20 сентября 2009
    [DllImport("pjsipDlld", CharSet = CharSet.Ansi)]
    static extern int dll_registerAccount(string username, string password);
...