我有一个c ++ dll(Cli)调用c#dll中的方法。
c#dll具有以下方法签名:
Class MyClass
{
void DoSomeWork(ref ClassA a, ClassB b);
}
如果签名中有没有参考,我的代码是这样的:
MyClass^ myClass = gcnew MyClass();
ClassA a = gcnew ClassA();
ClassB b = gcnew ClassB();
myClass->DoSomeWork(a, b);
如果签名中有引用,我如何从c ++代码中调用它?
我还有一个问题 - 在c#中我可以在数组上调用Any()方法但由于某种原因这样做,c ++ / cli无法正常工作if (reply->Any())
我收到错误:错误C2039:'任何' :不是' System :: Array'
的成员任何帮助都会被批评
THX
答案 0 :(得分:0)
如果你compile your C++ DLL as a Managed Assembly那么你应该可以像访问任何C#程序集一样访问它。
答案 1 :(得分:0)
1a)您可以使用:myClass->DoSomeWork(*a, b);
1b)如果ClassA
是一个类,那么ref
无论如何都是多余的。
2)关于if (reply->Any())
,检查您的源代码中是否包含using namespace System::Linq;
答案 2 :(得分:0)
ref
个参数。 C#中的方法void DoSomeWork(ref ClassA a, ClassB b);
在C ++ / CLI中被视为void DoSomeWork(ClassA^% a, ClassB^ b);
。可以认为%
与非托管C ++中的&
等效:您不需要在方法调用中添加任何特殊内容以通过该方式传递参数。Any()
是一种在Linq::Enumerable
上定义的扩展方法。有关如何在C ++ / CLI中调用扩展方法,请参阅this answer。