0

我们有一个带有许多方法的遗留 C++ 程序(标准 C++ 不受管理)。大多数使用char和int的参数。但是,一个具有以下方法签名:

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

我们需要从 C# 调用该方法。我们有一个现有的托管 C++ 类,它可以毫无问题地调用需要 char 和 int 的非托管方法。但是,当需要将数据集传递给它时,如何从 C# 调用 C++ 方法,我们束手无策。有人告诉我们这是不可能的。真的吗?

如果我们不能传递数据集,是否可以传递一个对象,然后让托管类将其转换为数据集以传递给非托管类?

4

1 回答 1

1

例如,在您的托管 C++ 包装器库中接受 System.Data.DataSet 并将其数据转换为 CDataSet 并调用非托管代码。返回时将更新转换回来(如果需要)。

UPD:通过“转换”我的意思是在你的包装方法中创建一个 CDataSet 类的新实例,从托管对象填充它的数据,然后调用非托管函数。当它返回时,如有必要,将数据传输回原始托管对象并返回。

如果您需要在调用之间或跨进程边界管理对对象的更新(即,即使未传递对象,其他函数调用也会导致对该对象的更新)而不是在非托管对象周围创建一个包装器并提供可让您操作的托管接口所需级别的对象。

于 2012-09-08T01:39:02.430 回答