LoadLibrary

Автор Тема: LoadLibrary  (Прочитано 10531 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн dr.B00Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
LoadLibrary
« : 24-05-2016, 16:16:44 »
Добрый день. Подскажите возможно ли в скриптах на с++ подключение dll?
Пробовал таким образом - не получилось.
Код - C++ [Выбрать]
  1.         HMODULE hDll;
  2.  
  3.         hDll = LoadLibrary(_T("fusion_cmm.dll"));
  4.         if (!hDll)
  5.         {
  6. ...
  7.  
« Последнее редактирование: 24-05-2016, 16:33:28 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: LoadLibrary
« Ответ #1 : 24-05-2016, 16:33:13 »
dr.B00
Приветствую на форуме!
1. Ознакомься пожалуйста с правилами форматирования кода на форуме и соблюдай их.
2. А если попробовать задать полный путь к файлу?
3. Почему if (!hDll) ? Это ситуация с ошибкой, т.к. в нормальном случае возвращается ненулевое значение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 24-05-2016, 22:57:04

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: LoadLibrary
« Ответ #2 : 24-05-2016, 17:16:43 »
Взял первую попавшуюся dll и переименовал её в test.dll. Проверил следующий код. Всё работает.

Код - C++ [Выбрать]
  1. #include <windows.h>
  2. #include <Core/CoreAll.h>
  3. #include <Fusion/FusionAll.h>
  4. #include <CAM/CAMAll.h>
  5.  
  6. using namespace adsk::core;
  7. using namespace adsk::fusion;
  8. using namespace adsk::cam;
  9.  
  10. Ptr<Application> app;
  11. Ptr<UserInterface> ui;
  12.  
  13. extern "C" XI_EXPORT bool run(const char* context)
  14. {
  15.         app = Application::get();
  16.  
  17.         if (!app)
  18.                 return false;
  19.  
  20.         ui = app->userInterface();
  21.         if (!ui)
  22.                 return false;
  23.  
  24.   HMODULE hdll = LoadLibraryW(L"C:\\test.dll");
  25.   if (hdll) {
  26.            ui->messageBox("Dll loaded");
  27.   } else {
  28.            ui->messageBox("Dll not loaded");
  29.   }
  30.  
  31.         return true;
  32. }
  33.  
  34. extern "C" XI_EXPORT bool stop(const char* context)
  35. {
  36.         if (ui)
  37.         {
  38.                 ui->messageBox("in stop");
  39.                 ui = nullptr;
  40.         }
  41.  
  42.         return true;
  43. }
  44.  
  45.  
  46. #ifdef XI_WIN
  47.  
  48. #include <windows.h>
  49.  
  50. BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved)
  51. {
  52.         switch (reason)
  53.         {
  54.         case DLL_PROCESS_ATTACH:
  55.         case DLL_THREAD_ATTACH:
  56.         case DLL_THREAD_DETACH:
  57.         case DLL_PROCESS_DETACH:
  58.                 break;
  59.         }
  60.         return TRUE;
  61. }
  62.  
  63. #endif // XI_WIN



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн dr.B00Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: LoadLibrary
« Ответ #3 : 24-05-2016, 22:04:39 »
Александр Ривилис,
Большое спасибо. Когда указал полный путь к dll получилось (хотя в Include directories место хранения было прописано).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: LoadLibrary
« Ответ #4 : 24-05-2016, 22:56:49 »
(хотя в Include directories место хранения было прописано)
Для LoadLibrary Include directories не указ. Более того это информация используется на стадии компиляции C++, а не для выполняющегося add-in. Читай описание LoadLibrary: https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение