c# - 是否可以从 C# 调用具有数据集类型参数的 C++ 函数

标签 c# c++ managed-c++

我们有一个包含许多方法的遗留 C++ 程序(标准 C++ 未托管)。大多数使用 char 和 int 的参数。但是,其中一个具有以下方法签名:

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

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

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

最佳答案

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

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

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

关于c# - 是否可以从 C# 调用具有数据集类型参数的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326868/

相关文章:

c# - 启动时从角色入口点加载 DataCache

c# - 如何实现光流跟踪器?

c# - 单元测试 system.timers.timer

c++ - 如何使用 bcc32 v6.31 + Borland XE 构建 boost 库?

c++ - 使用 std::forward 除了将参数转发到另一个函数之外

c++ - 帮助事后调试混合模式 Win32 应用程序

c# - 在 Active Directory 中创建新组

c++ - Eclipse 实时错误检查已禁用

c++ - DirectX 11 IDXGISwapChain::GetBuffer 因 DXGI_ERROR_INVALID_CALL 而失败

c# - 在 C# 或 VC++ 中导入 MinGW C++ DLL