Я регулярно пишу код на C ++, и для конкретного проекта, над которым я сейчас работаю, я пишу C ++ lib, чьи методы должны использоваться в C # lib, чьи методы должны использоваться в приложении C # .
Я использую Microsoft Visual Studio 2017 в Windows 10.
Я создал решение с 3 проектами:
- Динамическая библиотека C ++ / CLI (
New Project => Visual C++ => CLR => Class Library
)
- A C # lib (
New Project => Windows Classic Desktop => Class Library (.NET Framework)
)
- И приложение на C # (
New Project => Windows Classic Desktop => Console App (.NET Framework)
)
Пока я просто пытаюсь заставить эти 3 проекта взаимодействовать друг с другом, и у меня, похоже, есть проблемы между C ++ lib и C # lib.
Код в моей C ++ lib следующий:
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 # lib следующий:
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.";
}
}
}
Как есть, этот код создается без ошибок и предупреждений. Поэтому я могу вызывать мой static double add(double arg1, double arg2);
метод из моей библиотеки C ++ в моем методе C # lib static public double Add(double arg1, double arg2)
, НО, если я попытаюсь раскомментировать следующий код в Wrapper.cs :
//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()
возвращает строку, которую я могу использовать в своем приложении C # (она работает, я могу отобразить ее), так почему я не могу вызвать этот конкретный метод C ++ в моей C # lib? Это также действительно мой первый раз кодирование на C #.