#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, я не могу это изменить.