c# - C++/CLI 中的 System::IntPtr 到 int*

标签 c# c++ interop c++-cli

我正在尝试使用 C++/CLI 互操作层从 C# 应用程序调用现有的 C++ 库。我有一个看起来像这样的 C++ 函数:

void doSomething(int* foo, int size);

还有一个 C# 对象,它包含两个字段,一个 IntPtr start 和一个 int size。我编写了一个如下所示的托管 C++ 类:

public ref class Wrapper {
public:
    void run(System::IntPtr itn, int size);
};

现在我想在 Wrapper::run 中调用 doSomething,并让 doSomething 可以访问 C# 对象指向的同一数据 block 。如果没有拷贝,我尝试做的事情是否可行?如果可以,怎么做?

最佳答案

要从Wrapper::run 调用doSomething,请尝试转换System::IntPtr::ToPointer 的返回值,像这样:

doSomething(reinterpret_cast<int*>(itn.ToPointer()), size);

关于c# - C++/CLI 中的 System::IntPtr 到 int*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14220611/

相关文章:

c++ - 变量始终为空

c++ - 请解释这个执行强制转换和类型检查的硬核宏

java - Java 应用程序的哪些部分应该用 Scala 编写?

c# - 从 VBScript 调用 .NET COM 对象

java - J++ 到 Java : how to migrate from RNI to JNI?

c# - 如果类继承自 IDisposable(或任何),则接口(interface)从 IDisposable(或任何)继承是好的/必要的吗?

c# - 如果条件满足,如何测试 void 方法返回

c++ - 带有指针和引用的简单函数

c# - C# 代码背后的必填字段验证器

c# - 覆盖抽象方法,但保持方法抽象?