看来一定有重复的问题,但我没能找到它。
我正在编写一个桥让旧的 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 分钟后,我被难住了。在 Google 上搜索 C++/CLI 和 C# 的不同组合,主要提供有关如何从 C# 调用 C++ 的信息。
那么,我的问题是:如何将 int
从 C++/CLI 传递到需要 out int
(或 ref int
,如果必须的话)?
最佳答案
C#:
class MyClass
{
public static string GetNameAndValue(out int value);
}
C++/命令行界面:
int value;
String^ x = MyClass::GetNameAndValue(value);
C++/CLI 包装器:
CString GetNameAndValue(int* value)
{
String^ x = MyClass::GetNameAndValue(*value);
return CString(x);
}
C++/CLI 包装器 2:
CString GetNameAndValue(int& value)
{
String^ x = MyClass::GetNameAndValue(value);
return CString(x);
}
对于 C#“ref”也是如此。
关于c# - 通过引用将 int 从 C++/CLI 传递到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619599/