Вы смотрели на C ++ / CLI?
Позвольте привести очень короткий пример. Вот исходный файл из проекта Visual C ++ -> CLR -> Class Library. Он в основном получает имя пользователя Windows и возвращает его.
Обратите внимание, что для того, чтобы это скомпилировать, вам нужно зайти в настройки проекта и пометить «Дополнительные зависимости» как «Наследовать от родителя», потому что мы используем эти библиотеки Windows (kernel32.lib, user32.lib,. .)
// CSCPP.h
#pragma once
#include "windows.h"
using namespace System;
namespace CSCPP {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
String^ GetText(){
WCHAR acUserName[100];
DWORD nUserName = sizeof(acUserName);
if (GetUserName(acUserName, &nUserName)) {
String^ name = gcnew String(acUserName);
return String::Format("Hello {0} !", name);
}else{
return gcnew String("Error!");
}
}
};
}
Теперь создан новый проект C # и добавлена ссылка на наш первый проект библиотеки классов C ++ / CLI. А затем вызовите метод экземпляра.
namespace CSTester
{
class Program
{
static void Main(string[] args)
{
CSCPP.Class1 instance = new CSCPP.Class1();
Console.WriteLine(instance.GetText());
}
}
}
Это дало следующий результат на моей машине:
Здравствуйте, m3rlinez!
C ++ / CLI - это в основном управляемое расширение по сравнению со стандартом C ++. Это позволяет вам использовать классы CLR и типы данных в вашем проекте C ++ / CLI, а также предоставлять его для управляемого языка. Используя это, вы можете создать управляемую оболочку для своей старой библиотеки C ++. Существует несколько странных синтаксисов, таких как String^
, для определения ссылочного типа для строки CLR. Я считаю "Quick C ++ / CLI - изучение C ++ / CLI менее чем за 10 минут" здесь полезным.