Как внутри C++ DLL подключать другую DLL или обрабатывать ошибку без закрытия программы

Рейтинг: 0Ответов: 0Опубликовано: 02.02.2023

У меня есть программа состоящая из C# WinForms и C++ DLL. И winForms вызывают методы из Dll.

Внутри моей DLL для одной из функций подключается заголовок chai.h для которого нужен chai.lib они оба включенны в проект. И так же еще нужна chai.dll которая устанавливается отдельно сайт chai.dll.

Проблема в том что у конечного пользователя не всегда может быть установленна chai.dll и мне бы хотелось узнать как при отсутствии этой длл просто отключать часть функций, потому что сейчас у меня в c# вылетает ошибка DllNotFoundException при вызове любого метода из моей dll если даже он не использует chai. Если я закоментирую импорт chai.h и всех функцих все работает прекрасно.

Пропробую привести приемер кода. C#:

[DllImport("MyDLL.dll", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern void DoSomeStaff();

int Main() {
   DoSomeStaff();  // --> DllNotFoundException MyDll.dll not found
}

C++ dll

 #include "chai.h"


__declspec(dllexport) void _stdcall DoSomeStaff()
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());
   ...
}

// Функция не вызывается, но ошибка есть, если я ее закоментирую все заработает
__declspec(dllexport) void _stdcall UsingChaiDLL()
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());
   CiInit();
   ...
}

Я даже могу не комментировать #include а просто все функции использующие методы из него ибо даже если они не вызываются есть ошибка

Ответы

Ответов пока нет.