Обычно я делаю такие вещи, создавая статический C ++ CLR Wrapper Lib.
Вот шаги, которые я обычно использую (хотя я использую их не очень часто):
Вот минимальный пример с использованием Visual Studio:
1. Создание управляемого проекта библиотеки C # .NET
Назовите его HelloLibManaged
с одним файлом Hello.cs и следующим содержимым:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloLibManaged
{
public class Hello
{
public void Print()
{
System.Console.WriteLine("Hello from Managed Lib");
}
}
}
Создайте эту библиотеку с x86 или x64 , просто не используйте процессор
2. Создайте новый C ++ CLR статический проект lib в том же решении.
Давайте назовем это HelloLibCpp
HelloUnmanaged.h
#pragma once
namespace hello_managed {
class Hello
{
public:
void Print();
};
}
и
HelloUnmanaged.cpp
#include "HelloUnmanaged.h"
namespace hello_managed
{
void Hello::Print()
{
HelloLibManaged::Hello^ hello = gcnew HelloLibManaged::Hello();
hello->Print();
}
}
Отменить свойства проекта -> Общие указать статическую библиотеку.
В настройках Build укажите x86 / x64 - используйте тот же тип сборки, что и для сборки Managed lib, начиная с шага 1.
Теперь вы можете собрать dll и использовать ее в других неуправляемых проектах C ++.
Для более сложных вещей, таких как возвращаемые типы и методы с параметрами, вы должны выполнить сортировку типов между управляемым / неуправляемым кодом. Есть много ресурсов онлайн с дополнительной информацией о Преобразовании типов между управляемым / неуправляемым кодом. Ключевое слово: Маршаллинг .