Я оборачиваю класс, который читает пользовательский двоичный файл данных и делает данные доступными для .net / c # class
Однако, через пару строк кода, я начинаю получать нарушение доступа к памятиошибка, которая, как я полагаю, связана с перемещением памяти GC, класс управляется
Вот код вызова в C # - читатель представляет собой смешанный код (методы управляемой оболочки для старого неуправляемого кода)
if ( ! reader.OpenFile(...) )
return ;
foreach(string fieldName in fields)
{
int colIndex = reader.GetColIndex( fieldName );
int colType = reader.GetColType( colIndex ); // error is raised here on 2nd iteration
}
for ( int r = 0 ; r < reader.NumFields(); r++ )
{
foreach(string fieldName in fields)
{
int colIndex = reader.GetColIndex( fieldName );
int colType = reader.GetColType( colIndex ); // error is raised here on 2nd iteration
switch ( colType )
{
case 0 : // INT
processField( r, fieldName, reader.GetInt(r,colIndex) );
break ;
....
}
}
}
....
У Reader есть старая ссылка на экземпляр неуправляемого класса, которая содержит двоичные данные в памяти И это тип указателя, поскольку управляемый класс не может содержать неуправляемый тип
Я посмотрел на interior_ptr,pin_ptr но они выдают ошибку c3160 не может быть в управляемом классе
Есть ли обходной путь?Кстати, это моя первая C ++-программа за очень долгое время!
ОБНОВЛЕНИЕ: обновлено Q, опять же, приведенный выше код вызова и читатель смешаны (управляемый + старый неуправляемый код)
& да все аргументы действительны