Зовущий.сборка dll с /clr:netcore из неуправляемого C

#c #clr #managed #unmanagedexports

Вопрос:

У меня есть неуправляемые приложения на C , которые подключаются к различным источникам данных через библиотеки DLL поставщиков. Для библиотек DLL .Net framework я использовал для создания проектов /clr, и это работало для меня без каких-либо проблем.

Но теперь мне нужно использовать .Библиотека DLL Net 5 и не может заставить ее работать таким образом. чтобы смешать неуправляемый код и код .net 5, я должен использовать /clr:netcore, который строится только как DLL, но мое приложение должно быть службой Windows, поэтому я создал DLL-оболочку для поставщиков .Net 5 DLL с помощью /clr:netcore с несколькими экспортированными методами(неуправляемыми). Используется файл .def для указания экспортируемых методов.

 wrapper.h
    typedef int(__stdcall* PHCallback)(void* client, LPCTSTR strItem, void* data);

    void* __declspec(dllexport) CreateClient(LPCTSTR params);
    bool __declspec(dllexport) Connect(void* client);
    void __declspec(dllexport) SetCallback(void* client, PHCallback* pCallback);
    void __declspec(dllexport) SendRequest(void* client, LPCTSTR request);
 

В этой оболочке createClient создает экземпляр объекта, определенного в библиотеке DLL поставщика, чтобы я мог использовать его позже в других методах. SetCallback устанавливает обратный вызов, который будет вызван, когда данные будут готовы, ничего особенного.

Составил Wrapper.dll попался .файлы lib и .dll — пока все хорошо.

Затем я попытался связать свое неуправляемое приложение с этим Wrapper.dll (используя файл заголовка и .lib). Все было в порядке… но когда я пытаюсь запустить/отладить свое приложение, я получаю сообщение об ошибке «Зависимая библиотека dll не найдена».

Все .lib/.dll/.exe находятся в одном каталоге. Если я открою файл .exe с помощью DependancyWalker — он скажет, что не может найти wrapper.dll тоже(почему?) Если я открою wrapper.dll непосредственно в DependancyWalker — он показан, и все мои экспортированные методы там.

Итак, что мне нужно, чтобы это сработало? Или таким образом невозможно использовать библиотеки DLL .net 5.0 из неуправляемого c ?

Я

Комментарии:

1. Таргетинг 5.0 сейчас сломан, он все еще работает для 3.1. Поэтому сначала попробуйте убедиться, что вы правильно поняли основы, надеюсь, 6.0 исправит это.

2. У меня есть dll поставщиков, скомпилированная с .net 5.0, я не могу это изменить.