我在VS2010中的解決方案有一個在c#項目中引用的CLI項目。我在CLI中有一個名爲do_something的抽象類。在C#中,我從它繼承了DoSomething類。我想通過傳遞c#實現作爲抽象類參數來運行C++的c#實現,但拋出了「不受語言支持」的異常。語言不支持「方法」
CLI/C++
//abstract class
public ref class do_something{
public:
virtual void do_it()=0;
};
//using an implementation of the abstract class
public ref class cpp_caller{
public:
void run(do_something% doer){
cout<<"run c# from c++"<<endl;
doer.do_it();
}
};
C#
//implementation of abstract class
class DoSomething : do_something
{
public override void do_it()
{
Console.WriteLine("call from c#");
}
}
//inside main
DoSomething csharp_implementation = new DoSomething();
cpp_caller caller = new cpp_caller();
caller.run(csharp_implementation);
的C++項目編譯,但編譯的C#代碼的最後一行時,編譯器會引發異常: '跑' 不被支持的語言
注意:先前的堆棧溢出解決方案沒有幫助!調用run.do_it()在c#中工作正常。最後,CLI編譯器不喜歡使用'^'或'&'通過引用將參數傳遞給run方法。
它應該使用'^'。它也應該使用'^%'並在C#中使用'ref'關鍵字。請顯示你失敗的嘗試。 –
當使用'^','^%'或'%^'時,cli編譯器會拋出:'.do_it'的左邊必須有class/struct/union。 –
'^'是'*'管理的等價物。你需要使用' - >',而不是'.'。 –