似乎必须有一个重复的问题,但我一直没能找到它。通过引用从C++/CLI传递给C#
我正在编写一个桥梁让旧的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。
好的,那么GetNameAndValue(%value)
怎么样?这给了我错误C3071:运算符'%'只能应用于ref类或值类型的实例。
不够公平。所以如果我创建一个int
我可以通过%
?
int foo;
str = TheObject::GetNameAndValue(%ix);
没有骰子。再次C3071。其中我觉得奇怪,因为int
绝对是是的一种值类型。或者是?
必须有%,^,&或一些其他淫秽的魔术组合,将做我想做的事情,但在这个事情发誓30分钟后,我很难过。在Google搜索C++/CLI和C#的不同组合大多提供了有关如何从C#调用C++的信息。
SO,我的问题:你如何将C++/CLI中的int
传递给期望out int
(或ref int
,如果必须的话)的C#方法?
你有事情严重倒退。 C++/CLI很容易让C程序调用C#方法。它是从托管代码到本地代码的另一种方式的语言扩展。从本地程序运行托管代码需要更大的武器,它必须首先加载并初始化CLR。这将需要超过30分钟才能理清。 –
@HansPassant:这不是我在短时间内的工作经验。我的C程序调用一个用C++/CLI编译的DLL,而C++/CLI又调用另一个程序集中的C#代码。工作得很好。据我了解,C++/CLI DLL加载运行时。无论如何,我已经能够将C#代码中的信息返回给C代码。 –
C++/CLI支持__declspec(dllexport),这是我能想到的唯一场景,您可以从中获得好运。与Giesecke的[DllExport]黑客相同的想法。正如所发布的,你的问题对我来说毫无意义,你遇到的问题完全正常。祝你好运。 –