Как получить доступ / переменная маршалла char * из dll импорта в C # - PullRequest
1 голос
/ 25 февраля 2010


Мне нужен доступ к функциональности из win32 dll, для этого я использую [dllimport] в коде C #.


какую именно сигнатуру метода мне нужно создать с помощью [dllimport] для следующих методов c ++

void GetGeneratedKey(char *code, int len, char *key)

Пожалуйста, помогите в этом.

Спасибо
NRK

Ответы [ 4 ]

3 голосов
/ 25 февраля 2010

Это сильно зависит от того, что происходит с переменными key и code в собственной функции C. Основываясь на подписи, я предполагаю, что code читается из и key пишется. Если это так, попробуйте следующую подпись

[DllImport("SomeDll")]
public static extern void GetGeneratedKey(
  [In] string code,
  [In] int length,
  StringBuilder key);
1 голос
/ 25 февраля 2010

Просто используйте string. Должен просто работать.

0 голосов
/ 18 января 2013

Вот мое решение для неуправляемого случая.

C ++

 void GetGeneratedKey(
 const char *code,
 int length,
 char *key);

C #

[DllImport("Some.Dll")]
public static extern void GetGeneratedKey(
[MarshalAs(UnmanagedType.LPStr)]string code,
int length,
[MarshalAs(UnmanagedType.LPStr)]StringBuilder key);
0 голосов
/ 26 февраля 2010

всем за быстрый ответ и поддержку
Я использовал метод подписи, как показано ниже

Подпись метода VC ++
void GetGeneratedKey (код char *, int len, ключ char *)

C # подпись
[DllImport ( "SomeDll")]
public static extern void GetGeneratedKey (код байта [], int len, ключ bute);


NRK

...