似乎必须有一个重复的问题,但我一直无法找到它.
我正在写一个桥,让旧的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++的信息.
所以,我的问题:你如何将intC++/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包装器2:
CString GetNameAndValue(int& value)
{
    String^ x = MyClass::GetNameAndValue(value);
    return CString(x);
}
对于C#"ref"来说也是一样的.
| 归档时间: | 
 | 
| 查看次数: | 5516 次 | 
| 最近记录: |