通过引用从c++ /CLI传递int到c#
本文关键字:传递 int CLI 引用 c++ | 更新日期: 2023-09-27 18:03:13
似乎有一个重复的问题,但是我还没能找到它。
我正在写一个桥,让旧的C程序访问一些c#对象。桥是用c++/CLI编写的。
在一种情况下,有一个c#函数定义为:public static string GetNameAndValue(out int value);
我的c++/CLI包装函数:
char* GetNameAndValue(int* value);
从C中调用很容易,但是我如何从c++/CLI调用c#方法?
我首先尝试了显而易见的:
String ^ str;
str = TheObject::GetNameAndValue(value);
这给了我错误C2664:不能将参数2从'int *'转换为'int %'。
好的,那么GetNameAndValue(%value)
呢?这给了我错误C3071:操作符'%'只能应用于ref类或值类型的实例。
好了。所以如果我创建一个int
,我可以用%
传递它??
int foo;
str = TheObject::GetNameAndValue(%ix);
不行。C3071。我觉得很奇怪,因为int
肯定是一个值类型。是吗?
一定有一些%,^,&或者其他一些下流的东西的神奇组合可以达到我想要的效果,但是在咒骂了30分钟之后,我被困住了。在谷歌上搜索c++/CLI和c#的不同组合,主要是关于如何从c#调用c++的信息。
所以,我的问题:如何将int
从c++/CLI传递到期望out int
(或ref int
,如果我必须的话)的c#方法?
c#:
class MyClass
{
public static string GetNameAndValue(out int value);
}
c++/CLI: int value;
String^ x = MyClass::GetNameAndValue(value);
c++/CLI包装:CString GetNameAndValue(int* value)
{
String^ x = MyClass::GetNameAndValue(*value);
return CString(x);
}
c++/CLI wrapper 2:
CString GetNameAndValue(int& value)
{
String^ x = MyClass::GetNameAndValue(value);
return CString(x);
}
对于c# "ref"也是一样。
我知道这已经回答了,但只是为了澄清编译器建议的"C2664:无法将参数2从'int *'转换为'int %'"。
我想它需要这个(c++/CLI):
int a=5
int% foo=a;
str = TheObject::GetNameAndValue(foo);