接收cpp/cli对象的C#类构造函数导致错误';语言不支持';
我的解决方案有两个项目:一个C#exe和一个cpp clr dll。 Class1和Class2是在dll中实现的cpp/clr类,Class1的构造函数需要一个Class2对象:接收cpp/cli对象的C#类构造函数导致错误';语言不支持';,c#,.net,visual-studio-2015,c++-cli,clr,C#,.net,Visual Studio 2015,C++ Cli,Clr,我的解决方案有两个项目:一个C#exe和一个cpp clr dll。 Class1和Class2是在dll中实现的cpp/clr类,Class1的构造函数需要一个Class2对象:Class1(Class2 cl2) 当我尝试在我的C#类中实例化它时,我得到以下错误: Error CS0570 'Class1.Class1(?)' is not supported by the language. 我该怎么办? 我的代码如下: // cpp_dll.h #pragma once using n
Class1(Class2 cl2)
当我尝试在我的C#类中实例化它时,我得到以下错误:
Error CS0570 'Class1.Class1(?)' is not supported by the language.
我该怎么办?
我的代码如下:
// cpp_dll.h
#pragma once
using namespace System;
namespace cpp_dll {
public ref class Class2
{
};
public ref class Class1
{
public:
Class1(Class2 cl2);
};
}
------------------
// cpp_dll.cpp.
#include "stdafx.h"
#include "cpp_dll.h"
cpp_dll::Class1::Class1(Class2 cl2)
{
}
-------------------
//MainWindow.xaml.cs
using System.Windows;
using cpp_dll;
namespace csharp_app
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
Class1 cl1 = new Class1(new Class2()); //here I get CS0570
}
}
}
您应该像这样声明Class1的构造函数:
public:
Class1(Class2^ cl2); <--use ^
公共:
类别1(类别2^cl2) 我想我是因为傲慢而错过了:
Class2是一个ref类,因此应该按原样传递(见下文):
类别1(类别2^cl2);//在
cpp_dll::Class1::Class1(Class2^cl2)//在cpp中
var cl2=新类2()//在.cs中
类别1 cl1=新类别1(cl2)//ref应获取可写对象
本月无奖金):谢谢。它应该是ref,但解决方案是正确的。