У нас есть устаревшая программа C ++ (стандарт C ++ не управляемый) со многими методами. Большинство используют параметры char и int. Тем не менее, один имеет следующую сигнатуру метода:
Convert(CDataSet &DataSet, CValue &Var, char *pOutput, int &nParser)
Нам нужно вызвать этот метод из C #. У нас есть класс Managed C ++, который может без проблем вызывать неуправляемые методы, которым требуются char и int. Но мы знаем, как вызвать метод C ++ из C #, когда ему нужно передать набор данных. Некоторые говорят нам, что это невозможно сделать. Это правда?
Если мы не можем передать набор данных, возможно ли передать объект и затем управляемый класс преобразует его в набор данных для передачи в неуправляемый класс?
В вашей управляемой оболочке C ++ lib, например, примите System.Data.DataSet и преобразуйте его данные в CDataSet и вызовите неуправляемый код. По возвращении конвертируйте обновления обратно (при необходимости).
UPD: под словом «конвертировать» я подразумеваю создание нового экземпляра класса CDataSet внутри вашего метода-оболочки, заполнение его данными из управляемого объекта и затем вызов неуправляемой функции. При возврате он передает данные обратно в исходный управляемый объект, если необходимо, и возвращает.
Если вам нужно управлять обновлениями объекта между вызовами или через границы процесса (т.е. другие вызовы функций приводят к обновлениям этого объекта, даже если объект не передан), то создайте оболочку вокруг неуправляемого объекта и предоставьте управляемый интерфейс, который позволит вам манипулировать объект на необходимом уровне.
Других решений пока нет …