How to pass a C++ short* to managed C# assembly in C++/CLI

那年仲夏 提交于 2019-12-10 09:54:53

问题


I'm having trouble passing an argument from C++/CLI code into a .NET C# function.

In C++ I have something resembling the following:

void SomeFunction(short *id)
{
   CSharpClass::StaticClassInstance->SetValue(id);
}

On the C# side, the function is declared with a ref argument as:

public void SetValue(ref short id)
{
  id = this.internalIdField;
}

The compiler error I'm getting when calling SetValue(id) is "cannot convert parameter 1 from 'short *' to 'short %'".

I found out that a tracking reference (%) is equivalent to C# ref but I don't know how to use it with the short* parameter I'm trying to pass.

Thanks in advance.


回答1:


The logical C++/CLI signature of CSharpClass::SetValue is

void SetValue(short% id);

If you know C++ (as opposed to C++/CLI), the answer here is the exact same as it would be if you had the C++ signature

void SetValue(short& id);

I.e., simply dereference the pointer:

void SomeFunction(short *id)
{
    CSharpClass::StaticClassInstance->SetValue(*id);
}



回答2:


If you want to be long winded, declare a tracking reference, assign the tracking reference to your id parameter and then pass the tracking reference to your function...

short %s = *id;

SetValue (s);

If you'd rather not be long winded, just dereference the pointer. While the compiler cannot convert a short * into a short % it can convert a short into a short %...

SetValue (*id);


来源:https://stackoverflow.com/questions/6118263/how-to-pass-a-c-short-to-managed-c-sharp-assembly-in-c-cli

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!