Вы можете обернуть свой старый код C ++ в оболочку C ++ / CLI и встроить его в файл DLL.Затем он должен быть виден в любом проекте .NET.
В зависимости от вашего алгоритма / структуры функций, это может немного измениться, но основная форма и способ, которым я это сделал, следующие.Имейте в виду, что это ОЧЕНЬ простой пример, но я попытался включить ключевые моменты:
1.Определите оболочку CLI
using namespace System;
#include "myAlgorithmClass"
public ref class MyCLIWrapperClass //the 'ref' keyword specifies that this is a managed class
{
public:
MyCLIWrapperClass(); //Constructor
//function definitions are the same, though some types,
//like string, change a little. Here's an example:
String ^ GetAString(); //the "String" is the .NET "System.String" and the ^ is sort of a pointer for managed classes
//int, double, long, char, etc do not need to be specified as managed.
//.NET code will know how to handle these types.
//Here you want to define some functions in the wrapper that will call
//the functions from your un-managed class. Here are some examples:
//Say that your functions in the Algorithm class are int Func1, double Func2, and std::string Func3:
int Func1();
double Func2();
String ^ Func3();
private:
//All private functions and members here
myAlgorithmClass algor;
};
2.Реализуйте класс-оболочку
using namespace System;
#include <string> //For the string function ex. below
#include "myAlgorithmClass"
MyCLIWrapperClass::MyCLIWrapperClass()
{
algor = myAlgorithmClass(); //create instance of your un-managed class
}
int MyCLIWrapperClass::Func1()
{
return algor.Func1(); //Call the un-managed class function.
}
double MyCLIWrapperClass::Func2()
{
return algor.Func2(); //Call the un-managed class function.
}
String ^ MyCLIWrapperClass::Func3()
{
//Converting a std::string to a System.String requires some conversion
//but I'm sure you can find that somewhere on Google or here on SO
String ^ myString = "";
std::string myUnmanagedString = algor.Func3(); //Call the un-managed class function.
//Convert myUnmanagedString from std::string to System.String here
return myString;
}
После того, как вы напишите класс-оболочку и скомпилируете его в библиотеку классов, вы можете создать ссылку на файл .DLL в проекте C #, и C # должен увидеть управляемый класс-оболочку и все его открытые функции.
Еще одна вещь, на которую следует обратить внимание: если вы создаете новые управляемые объекты в C ++, вы используете ключевое слово «gcnew» вместо «new».Таким образом, новая строка будет String ^ someString = gcnew String();
Наконец, вот несколько ссылок на некоторые вещи о CLI, которые могут помочь:
CLI - Wikipedia CLI - Код проекта CLI - FunctionX