2011-05-25 56 views
3

我在将C++/CLI代码中的参数传递给.NET C#函数时遇到问题。如何在C++/CLI中将C++短*传递给托管C#程序集

在C++中我有类似下面:

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

在C#端,功能都被定义REF参数为:

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

编译器错误我收到的时候调用SetValue(id)为“无法将参数1从'short *'转换为'short%'”。

我发现一个跟踪引用(%)等价于C#ref,但我不知道如何将它与我试图传递的short *参数一起使用。

在此先感谢。的CSharpClass::SetValue

回答

3

逻辑C++/CLI签名

void SetValue(short% id); 

如果你知道C++(相对于C++/CLI),这里的答案是完全一样的,因为这将是,如果你有C++签名

void SetValue(short& id); 

也就是说,简单地取消引用指针:

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

非常感谢您的答复。我可以发誓我已经试过这个,但显然我不能有,因为只要我解引用指针,它就编译了。干杯。 – AndyL 2011-05-25 12:37:41

1

如果你想成为长篇大论,declare a tracking reference,跟踪参考分配给您的ID参数,然后通过跟踪参考你的函数...

short %s = *id; 

SetValue (s); 

如果你不想长篇大论,只是取消引用指针。虽然编译器不能转换短*成短%,它可以转换成短很短...%

SetValue (*id); 
相关问题