Определение типа C ++ в C # - PullRequest
       17

Определение типа C ++ в C #

1 голос
/ 08 февраля 2010

У меня есть файл .DLL и .h. Я использую c #, но .DLL написан на C ++. У меня проблема с вызовом определенной функции в .DLL. Проблема возникает, когда мне нужно вызывать функции с определенными в них типами. Например, include с .DLL был файлом .h, и его тип определен следующим образом:

struct device_info {
  HANDLE dev_handle;  // valid open handle or NULL
  wchar_t* product_string;     // malloc'd string or NULL
  wchar_t* serial_string;     // malloc'd string or NULL
};
typedef struct device_info *PDEV_INFO;

Я попытался запустить его и создал такую ​​структуру:

[StructLayout(LayoutKind.Sequential)] public struct PDEV_INFO
{
        unsafe void* dev_handle;
        unsafe char* product_string;
        unsafe char* serial_string;

}

Моя программа просто падает, я пытаюсь использовать любой из этих типов. Как бы я определил эти типы в C # или как я могу ссылаться на типы из файла .h? Еще лучше были бы типы, определенные где-то в .DLL, и я просто не знаю. Спасибо.

1 Ответ

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

Попробуйте IntPtr вместо указателей. IntPtr был разработан для Marshalling, указатель c # не был. Кроме того, вы можете прочитать о сортировке строк. Вам действительно не нужно делать это самостоятельно.

Попробуйте объявить ваш тип:

[StructLayout(LayoutKind.Sequential)] 
public struct PDEV_INFO
{
        IntPtr dev_handle;
        [MarshalAs(UnmanagedType.LPWStr)] 
        String product_string;
        [MarshalAs(UnmanagedType.LPWStr)] 
        String serial_string;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...