.NET Standard и pInvoke, System.EntryPointNotFoundException Невозможно найти точку входа

Я предполагаю, что этот вопрос уже задавался в отношении более старых версий 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 из коробки.

Моя архитектура это:

  1. .NET Core Project:, получает бизнес-логику из моего .NET Standard
    проект введен
  2. .NET Стандартный Проект: держит бизнес-логику
    и загружает DLL.
  3. C ++ / CLI: Динамически связанная библиотека, предлагает некоторые
    Дополнительную бизнес-логику я не могу сменить на C #.

Чтобы иметь возможность использовать 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 мне нужно использовать существующий проект,

  • Где я должен поместить этот extern «C», как в заголовок, так и в исходный файл?
  • Мне нужно использовать заголовочный файл, поэтому необходимо ли размещать extern
    «C» и __declspec (dllexport) также в заголовочный файл?
  • Я продолжаю получать сообщение об ошибке «Невозможно найти точку входа с именем …»,
    где я могу найти точку входа для моего метода C ++?
  • Что касается точки входа, я читал о «искаженных именах» — знаете ли вы, где / как / в каком файле я могу найти искаженное имя моего метода C ++?

Большое спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …