c# - 通过引用将 int 从 C++/CLI 传递到 C#

标签 c# c++-cli

看来一定有重复的问题,但我没能找到它。

我正在编写一个桥让旧的 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/

相关文章:

c# - 如何克服 System.ServiceModel.FaultException

c# - .NET 中 SafeBuffer 和 SafeHandleZeroOrMinusOneIsInvalid 之间的主要区别是什么?

c# - 在 C# 中使用带有字符串 (Dll) 的 C++ 类

C# 如何在继续之前等待网页完成加载

c# - 使用 SmtpClient 发送文件附件

visual-studio-2010 - 人们用什么来替换 VS 2010 中缺少的 C++/CLI Intellisense?

.net - 如何使Stack.Pop线程安全

.net - C++/CLI .NET 可以使用资源 .resx 文件进行本地化吗?

c# - 部署时 Log4Net 不记录

c# - 嵌入 ASP.Net 的 WinForms