Структура и Marshal.SizeOf - cannot be marshaled as an unmanaged structure…

218
23 июня 2017, 06:02

Приветствую.

Имею такой код (C#), который обращается к C++ дллке (не /clr!), перекидывает ей структуру, чтобы та в свою очередь заполнила структуру данными и вернула её соответственно: https://pastebin.com/DPuBeqBX

Ошибка начала появляться после того, как я добавил (так как появилась необходимость получить список файлов в торренте и отдать его вместе с базовыми данными, которые уже и так возвращаю нормально) в TorrentInfoType структуру вот этот кусок (и в С++ часть соответственно тоже):

// Files list in .torrent
[MarshalAs(UnmanagedType.LPArray)]
public TorrentInfoType_FilesList[] files;

Без этого куска, работает нормально. Ошибка соответственно возникает вот тут: int tempSize = Marshal.SizeOf(typeof(TorrentInfoType));

И просто для референса, на стороне С++ структуры выглядят так: https://pastebin.com/43RDUdQx

И потом в С++ной части в функции dll_TorrentGetInfo я вызываю функцию для копирования в структуру которая потом возвращается в C#:

void TorrentInfo::CopyInfo(TorrentInfoType* dest) const
{
  dest->IsValid      = IsValid();
  dest->name         = _wcsdup(GetNameW().c_str());
  dest->hash         = _wcsdup(GetHashW().c_str());
  dest->creationDate = GetCreationDate();
  dest->creator      = _wcsdup(GetCreatorW().c_str());
  dest->comment      = _wcsdup(GetCommentW().c_str());
  dest->IsPrivate    = IsPrivate();
  dest->totalSize    = GetTotalSize();
  dest->filesCount   = GetFilesCount();
  dest->pieceLength  = GetPieceLength();
  dest->piecesCount  = GetPiecesCount();    
  // TODO: Fill files list.
  // ...
}

Поясните пожалуйста новичку, что делаю не так, и как можно исправить проблему :-\

READ ALSO
Entity Framework. Таблица с деревом категорий

Entity Framework. Таблица с деревом категорий

Делаю дерево категорий, каждая категория может быть родительской и иметь определенное место на текущем уровне, те

287
Как получить часть документа в mongodb?

Как получить часть документа в mongodb?

По умолчанию выборка содержит все поля документа, но мне не нужны все поляНапример, имеется коллекция users вида:

270
Запретить изменения значения

Запретить изменения значения

Имею List<Class>, который раз в N минут обновляется путем десериализации JSON файла, у коллекции реализован INotifyPropertyChanged для грамотного привязывания...

268
Получить нужный текст из байтов

Получить нужный текст из байтов

Подскажите как получить нужный мне текст

224