Отправка структуры с динамическим массивом строк в c ++ dll из c # - PullRequest
1 голос
/ 15 июля 2011

У меня есть структура, определенная как

struct DiskInfo{
int size,
char **atributes
};

Мне нужно отправить ее в C ++ DLL, которая будет запускать что-то вроде

for(i=0;i<Files.count;i++)
{
   newList[i] = (wchar_t *)malloc(sizeof(List->Strings[i]));  
   wcscpy(newList[i], List->Strings[i]);
  .... more code
 }

На данный момент у меня есть структура poplutaed вседанные, и мне нужно отправить его обратно на C #.Я попытался:

internal struct DiskInfo
    {
        internal int size;
        [MarshalAs(UnmanagedType.ByValArray)]
        internal string[] Files;
    }

и подпись

[DllImport("Disk.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = GetDiskInfo")]
    internal static extern uint GetDiskInfo(
       [In, Out] 
        DiskInfo Param);

И вызов функции

 data= new DiskInfo();
 Native.GetDiskInfo(data);

Однако данные всегда возвращаются как нулевые.Что я делаю не так?

1 Ответ

1 голос
/ 16 июля 2011

В C # DiskInfo является структурой, что означает, что это тип значения и будет передан в метод путем копирования (если не используется ключевое слово ref).Таким образом, код C ++ не может изменить исходную структуру, только копию.Возможно, вам повезет больше, если вы объявили GetDiskInfo с ключевым словом ref, а также использовали это ключевое слово в вызове метода.

...