语言不支持
not supported by the language
我经常用 C++ 编写代码,对于我现在正在处理的特定项目,我正在编写一个 C++ 库,其方法将在 C# 库中使用,其方法将在C# 应用程序。
我在 Windows 10 上使用 Microsoft Visual Studio 2017。
我创建了一个包含 3 个项目的解决方案:
- C++/CLI 动态库 (
New Project => Visual C++ => CLR => Class Library
)
- C# 库 (
New Project => Windows Classic Desktop => Class Library (.NET Framework)
)
- 和一个 C# 应用程序 (
New Project => Windows Classic Desktop => Console App (.NET Framework)
)
现在,我只是想让这 3 个项目一起通信,我似乎在 C++ 库和 C# 库之间有问题。
我的 C++ 库中的代码如下;
cppLib.h
#pragma once
#include <string>
using std::string;
using namespace System;
namespace cppLib {
public ref class cppClass
{
public:
static string test();
static double add(double arg1, double arg2);
};
}
cppLib.cpp
#include "cppLib.h"
namespace cppLib {
string cppClass::test() {
return "Hello World from C++ lib.";
}
double cppClass::add(double arg1, double arg2) {
return arg1 + arg2;
}
}
我的 C# 库中的代码如下:
Wrapper.cs
using cppLib;
namespace CsWrapper
{
public class Wrapper
{
//static public string TestCppLib()
//{
// return cppClass.test();
//}
static public double Add(double arg1, double arg2)
{
return cppClass.add(arg1, arg2);
}
public string WrapperTest()
{
return "Hello World from C# lib.";
}
}
}
按原样,此代码构建时没有错误也没有警告。所以我可以在我的 C# 库方法 static public double Add(double arg1, double arg2)
中从我的 C++ 库调用我的 static double add(double arg1, double arg2);
方法,但是如果我尝试取消注释 Wrapper.cs[=58= 中的以下代码] :
//static public string TestCppLib()
//{
// return cppClass.test();
//}
我收到 'cppClass.test(?)' is not supported by the language
错误消息:
Severity Code Description Project File Suppression State
Error CS0570 'cppClass.test(?)' is not supported by the language CsWrapper D:\documents\...\CsWrapper\Wrapper.cs Active
这是什么意思?如何在我的 C# 库中从我的 C++ 库中调用一个方法而没有问题,但另一个我不能?我的 public string WrapperTest()
方法 returns 一个可以在我的 C# 应用程序中使用的字符串(它可以工作,我可以显示它),那么为什么我不能在我的 C# 库中调用该特定的 C++ 方法?这也是我第一次用 C# 编码。
在 C++/CLI 中,如果要由 C# 应用程序/库使用该方法,则不能将字符串作为本机 C++ 模板类型返回,因为 C# 代码不知道如何使用它。
必须使用类型的托管(.Net 变体);对于 C++ string
,它是 String^
。 ^
表示它是一个 ref class(托管)指针。
代码变为:
cppLib.h
#pragma once
#include <string>
using std::string;
using namespace System;
namespace cppLib {
public ref class cppClass
{
public:
static String^ test();
static double add(double arg1, double arg2);
};
}
cppLib.cpp
#include "cppLib.h"
namespace cppLib {
String^ cppClass::test() {
return "Hello World from C++ lib.";
}
double cppClass::add(double arg1, double arg2) {
return arg1 + arg2;
}
}
其余保持不变。
我经常用 C++ 编写代码,对于我现在正在处理的特定项目,我正在编写一个 C++ 库,其方法将在 C# 库中使用,其方法将在C# 应用程序。
我在 Windows 10 上使用 Microsoft Visual Studio 2017。
我创建了一个包含 3 个项目的解决方案:
- C++/CLI 动态库 (
New Project => Visual C++ => CLR => Class Library
) - C# 库 (
New Project => Windows Classic Desktop => Class Library (.NET Framework)
) - 和一个 C# 应用程序 (
New Project => Windows Classic Desktop => Console App (.NET Framework)
)
现在,我只是想让这 3 个项目一起通信,我似乎在 C++ 库和 C# 库之间有问题。
我的 C++ 库中的代码如下;
cppLib.h
#pragma once
#include <string>
using std::string;
using namespace System;
namespace cppLib {
public ref class cppClass
{
public:
static string test();
static double add(double arg1, double arg2);
};
}
cppLib.cpp
#include "cppLib.h"
namespace cppLib {
string cppClass::test() {
return "Hello World from C++ lib.";
}
double cppClass::add(double arg1, double arg2) {
return arg1 + arg2;
}
}
我的 C# 库中的代码如下:
Wrapper.cs
using cppLib;
namespace CsWrapper
{
public class Wrapper
{
//static public string TestCppLib()
//{
// return cppClass.test();
//}
static public double Add(double arg1, double arg2)
{
return cppClass.add(arg1, arg2);
}
public string WrapperTest()
{
return "Hello World from C# lib.";
}
}
}
按原样,此代码构建时没有错误也没有警告。所以我可以在我的 C# 库方法 static public double Add(double arg1, double arg2)
中从我的 C++ 库调用我的 static double add(double arg1, double arg2);
方法,但是如果我尝试取消注释 Wrapper.cs[=58= 中的以下代码] :
//static public string TestCppLib()
//{
// return cppClass.test();
//}
我收到 'cppClass.test(?)' is not supported by the language
错误消息:
Severity Code Description Project File Suppression State
Error CS0570 'cppClass.test(?)' is not supported by the language CsWrapper D:\documents\...\CsWrapper\Wrapper.cs Active
这是什么意思?如何在我的 C# 库中从我的 C++ 库中调用一个方法而没有问题,但另一个我不能?我的 public string WrapperTest()
方法 returns 一个可以在我的 C# 应用程序中使用的字符串(它可以工作,我可以显示它),那么为什么我不能在我的 C# 库中调用该特定的 C++ 方法?这也是我第一次用 C# 编码。
在 C++/CLI 中,如果要由 C# 应用程序/库使用该方法,则不能将字符串作为本机 C++ 模板类型返回,因为 C# 代码不知道如何使用它。
必须使用类型的托管(.Net 变体);对于 C++ string
,它是 String^
。 ^
表示它是一个 ref class(托管)指针。
代码变为:
cppLib.h
#pragma once
#include <string>
using std::string;
using namespace System;
namespace cppLib {
public ref class cppClass
{
public:
static String^ test();
static double add(double arg1, double arg2);
};
}
cppLib.cpp
#include "cppLib.h"
namespace cppLib {
String^ cppClass::test() {
return "Hello World from C++ lib.";
}
double cppClass::add(double arg1, double arg2) {
return arg1 + arg2;
}
}
其余保持不变。