Можно ли из C # вызвать функцию C ++, имеющую параметр типа Dataset

У нас есть устаревшая программа C ++ (стандарт C ++ не управляемый) со многими методами. Большинство используют параметры char и int. Тем не менее, один имеет следующую сигнатуру метода:

Convert(CDataSet &DataSet, CValue &Var, char *pOutput, int &nParser)

Нам нужно вызвать этот метод из C #. У нас есть класс Managed C ++, который может без проблем вызывать неуправляемые методы, которым требуются char и int. Но мы знаем, как вызвать метод C ++ из C #, когда ему нужно передать набор данных. Некоторые говорят нам, что это невозможно сделать. Это правда?

Если мы не можем передать набор данных, возможно ли передать объект и затем управляемый класс преобразует его в набор данных для передачи в неуправляемый класс?

0

Решение

В вашей управляемой оболочке C ++ lib, например, примите System.Data.DataSet и преобразуйте его данные в CDataSet и вызовите неуправляемый код. По возвращении конвертируйте обновления обратно (при необходимости).

UPD: под словом «конвертировать» я подразумеваю создание нового экземпляра класса CDataSet внутри вашего метода-оболочки, заполнение его данными из управляемого объекта и затем вызов неуправляемой функции. При возврате он передает данные обратно в исходный управляемый объект, если необходимо, и возвращает.

Если вам нужно управлять обновлениями объекта между вызовами или через границы процесса (т.е. другие вызовы функций приводят к обновлениям этого объекта, даже если объект не передан), то создайте оболочку вокруг неуправляемого объекта и предоставьте управляемый интерфейс, который позволит вам манипулировать объект на необходимом уровне.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]