【问题标题】:Call managed C++ functions from C#从 C# 调用托管 C++ 函数
【发布时间】:2011-06-01 11:16:15
【问题描述】:

我有一个用于非托管 C++ 代码的托管 C++ 包装器,有必要在方法中使用一些指针参数!

在 C# 中调用此包装函数的最佳方法是什么(我在托管代码中使用引用参数进行了尝试,然后创建指针并调用非托管代码)?

例子:

// c++/managed
Uint32 someMethod(int &value);

Uint32 Wrapper::someMethod(int &value)
{
    int *valuePtr = &value;
    return unmanagedObj->someMethod(valuePtr);
}

// c++/unmanaged
Uint32 someMethod(int *value);

Uint32 UnmanagedClass::someMethod(int *value)
{
    ...
}

我在 VS2008 中使用带有“添加引用”的托管 C++ 包装器,但是当我调用 someMethod 时 C#中只有指针而不是引用?!

// c#
// e.g. value conversion to C++ pointer
...
Wrapper wrapper = new Wrapper();
wrapper.someMethod(ref value); // should work but here we have an C++ pointer
// and not a reference ?!?!

感谢您的任何提示!

问候

【问题讨论】:

  • 托管 C++ 正式称为 C++CLI,所以我重新标记了它。
  • 好吧对不起!它被忽略了!

标签: c# pointers c++-cli unmanaged managed


【解决方案1】:

您要查找的是 int%,这是 C++CLI 引用的正确语法,称为 tracking reference

Uint32 Wrapper::someMethod(int %value)

【讨论】:

  • 谢谢(我已经在想reference = pointer ;-))!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
相关资源
最近更新 更多