Я предполагаю, что этот вопрос уже задавался в отношении более старых версий Visual Studio и без использования .NET Core 2.1 или .NET Standard.
В настоящее время я работаю над приложением .NET Core 2.1 в Visual Studio 2017. В моем проекте мне нужно использовать существующую библиотеку DLL из проекта C ++ / CLI (Dynamic Linked Library). Это довольно сложно, потому что .NET Core 2.1 не поддерживает C ++ / CLI из коробки.
Моя архитектура это:
Чтобы иметь возможность использовать DLL из C ++ / CLI в моем коде C #, я использую PInvoke загрузить функциональность в проекте .NET Standard.
Я пытаюсь проверить:
var test = MyLibHelper.AddNumbers(1, 2);
К сожалению, я всегда получаю следующую ошибку, если я не помещаю логику в проект Hello World C ++ / CLI:
System.EntryPointNotFoundException: ‘Невозможно найти точку входа с именем’ AddNumbers ‘в DLL’ MyLib.dll ‘.’
В моем проекте .NET Standard (2) у меня есть вспомогательный класс для загрузки метода DLL:
internal static class MyLibHelper
{
[DllImport("MyLib.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern int AddNumbers(int n1, int n2);
}
В моем проекте C ++ / CLI (3) у меня есть исходный файл MyLib.cpp который выставляет функциональность:
extern "C" __declspec(dllexport) int AddNumbers(int n1, int n2)
{
return n1 + n2;
}
На самом деле эта кодировка работает нормально, если я создаю проект Hello World C ++ / CLI без заголовочного файла и использую __declspec (dllexport) и extern «C».
Мои вопросы:
Учитывая, что вместо приложения Hello World C ++ / CLI мне нужно использовать существующий проект,
Большое спасибо!
Задача ещё не решена.
Других решений пока нет …