从C#调用托管C ++函数

时间:2011-06-01 11:16:15

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

我有一个托管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 ?!?!

感谢您的任何提示!

招呼

1 个答案:

答案 0 :(得分:3)

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

Uint32 Wrapper::someMethod(int %value)