С родной++ DLL с помощью функции LoadLibrary ВСТО не работает
Я разработал VSTO Adding to Word с VS2010 C#, и у него есть собственная DLL, разработанная с Embercardeo c++ 10, проблема в том, что моя библиотека DLL C++ загружает другую собственную библиотеку DLL через LoadLibrary("lib2.dll") эта команда не работает, но когда я использую абсолютный путь в качестве LoadLibrary("E:\\DMSUSER\\bin\\Debug\\lib2.dll") он загружается и работает правильно.
Примечание: все библиотеки DLL находятся в одном каталоге, и LoadLibrary("lib2.dll") успешно работает в режиме VS debug running. мои коды следующие.
Что я уже пробовал:
//not loading code HINSTANCE DllInst = NULL; if (DllInst == NULL) DllInst = LoadLibrary("lib2.dll"); if (DllInst) {//my code}
//рабочий код с абсолютным путем к файлу
HINSTANCE DllInst = NULL; if (DllInst == NULL) DllInst = LoadLibrary("E:\\DMSUSER\\bin\\Debug\\lib2.dll"); if (DllInst) {//my code}
11917640 Member
https://docs.microsoft.com/en-us/windows/desktop/Dlls/dynamic-link-library-search-order порядок поиска библиотеки динамических ссылок см. В разделе стандартный порядок поиска для настольных приложений.
1. каталог, из которого загружается приложение (каталог exe). 2. Системный каталог. 3. Каталог окон. 4. Текущий каталог. 5. Путь
11917640 Member
Если он работает под отладчиком, то разница, вероятно, находится в текущем каталоге.
JMMS Karunarathne
все библиотеки DLL находятся в одном каталоге, если я развертываю с абсолютным путем-это работает, проблема заключается в том, что какой-то пользователь устанавливает в пользовательский каталог dll, который не загружается.
Rick York
Его первое замечание очень важно и является ключом к вашей проблеме. У вас есть три варианта : 1. требуйте, чтобы библиотеки DLL находились в одном из 5 мест, перечисленных выше; 2. попросите пользователя сообщить вам, где они находятся, с помощью опции конфигурации, если они не находятся в одном из этих мест; 3. Найдите диск(Ы) и найдите их самостоятельно. Других вариантов нет в наличии.