gpt4 book ai didi

c# - 如何通过引用将 float 从 C++ 传回 C#?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:49 24 4
gpt4 key购买 nike

这可能是一个显而易见的问题,但我已经在谷歌上搜索了 2 个小时,但无法弄清楚。所以我有一个 C++ 类,看起来像这样:

class MyClass
{
public:
static void Function(float& r) { r = 10; }
};

我有一个互操作包装类,如下所示:

public ref class Wrapper
{
public:
static void WrappedFunction(float& r) { MyClass::Function(r); }
};

现在我想从 C# 中调用它,如下所示:

float r;
Wrapper.WrappedFunction(ref r);

但是我在 C# 端遇到编译错误:

 cannot convert from 'ref float' to 'float*'

我有一个模糊的想法,我需要在 Wrapper 类中做一些事情,但我不知道是什么。另外,我知道这个用例对于 dllimport/pinvoke 来说很简单,但出于性能原因,我想用 C++/CLI 包装它。

非常感谢任何帮助!

最佳答案

包装类需要

public ref class Wrapper
{
public:
static void WrappedFunction(float% r)
{ float copy = r; MyClass::Function(copy); r = copy; }
};

使用 % 定义的引用与使用 & 定义的引用几乎完全一样,除了它们与垃圾收集器一起工作。

另一种选择是

public ref class Wrapper
{
public:
static void WrappedFunction(float% r)
{ pin_ptr<float> p = &r; MyClass::Function(*p); }
};

这会将对象固定在内存中以防止垃圾收集器使用它,但让 native 代码直接在托管变量上工作。通常不重要,但如果您有另一个线程需要查看中间值,这就是方法。

关于c# - 如何通过引用将 float 从 C++ 传回 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com