我们有许多方法的遗留C ++程序(标准C ++未管理)。大多数使用char和int的参数。但是,一个具有以下方法签名:
Convert(CDataSet &DataSet, CValue &Var, char *pOutput, int &nParser)
我们需要从C#调用该方法。我们有一个现有的Managed C ++类,它可以调用需要char和int的非托管方法而不会出现问题。但是当我们需要将数据集传递给它时,我们最终会知道如何从C#调用C ++方法。有些人告诉我们这是不可能的。这是真的吗?
如果我们无法传递数据集,是否可以传递一个对象然后让托管类将其转换为数据集以传递给非托管类?
答案 0 :(得分:1)
在托管C ++包装器中,例如,接受System.Data.DataSet并将其数据转换为CDataSet并调用非托管代码。返回时,将更新转换回来(如果需要)。
UPD:通过“转换”我的意思是在你的包装器方法中创建一个新的CDataSet类实例,从托管对象填充它的数据,然后调用非托管函数。当必要时将传输数据返回到原始托管对象并返回。
如果您需要在调用之间或跨进程边界管理对象的更新(即,即使没有传递对象,其他函数调用也会导致更新此对象),而不是创建非托管对象周围的包装并提供托管接口,让你以所需的水平操纵对象。