Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.02.2018
Сообщений: 1

Не загружается DLL. Правила написания DLL

09.02.2018, 12:49. Показов 1050. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день!
Вопрос в следующем. Есть код на Си++ с применением классов, раскиданных по нескольким исходникам. Код рабочий, gcc под с++11 его компилирует. Причем в экспорте есть только одна виртуальная функция. Все классы просто объявлены внутри и извне не используются. После сборки dll файла при попытке добавления dll в среде разработки возникает сообщение: cannot load ...dll. Error description provided by operating system: Не найден указанный модуль.
После того, как я закоментировал почти весь код в файлах ошибка пропала и библиотека подгрузилась. Стал по суть чуть убирать комментарии с классов и методов и при это некоторые, казалось бы, безобидные методы вернули ошибку. Даже пустой метод, который ничего не делает. А также я заметил, что подключение <iostream> вызывает такую же ошибку, как ни странно.

В чем может быть дело?
Есть ли какие-то правила и ограничения на исходный код, который не экспортируется и используется сугубо внутри библиотеки dll?
Может это быть вызвано неадекватным поведением антивируса?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2018, 12:49
Ответы с готовыми решениями:

Нужен пример написания DLL
Смотрел информацию из msdn, делал все по пунктам, но как то не идет. Можете мне для примера кинуть исходный код простенькой библиотеки на...

Путь изучения С++ для написания нативных dll библиотек?
Здравствуйте. Возможно, что вопрос очень простой и много уже где задавался. Суть вопроса такова. На данный момент я изучаю .NET, а...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

7
Модератор
Эксперт С++
 Аватар для zss
13780 / 10973 / 6491
Регистрация: 18.12.2011
Сообщений: 29,259
09.02.2018, 13:11
Насколько я знаю, экспортировать объектно ориентированные методы нельзя.
Придется добавить функцию, которая не принадлежит к какому-либо классу,
и уже через нее работать с классом.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.02.2018, 15:08
Цитата Сообщение от Slip84 Посмотреть сообщение
Может это быть вызвано неадекватным поведением антивируса?
Это проверить легче всего - просто вырубить его на время.

Пример для линукса

Кликните здесь для просмотра всего текста
myclass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef __MYCLASS_H__
#define __MYCLASS_H__
 
class MyClass
{
public:
  MyClass();
 
  /* use virtual otherwise linker will try to perform static linkage */
  virtual void DoSomething();
 
private:
  int x;
};
 
#endif
myclass.cc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "myclass.h"
#include <iostream>
 
using namespace std;
 
extern "C" MyClass* create_object()
{
  return new MyClass;
}
 
extern "C" void destroy_object( MyClass* object )
{
  delete object;
}
 
MyClass::MyClass()
{
  x = 20;
}
 
void MyClass::DoSomething()
{
  cout<<x<<endl;
}
class_user.cc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <dlfcn.h>
#include <iostream>
#include "myclass.h"
 
using namespace std;
 
int main(int argc, char **argv)
{
  /* on Linux, use "./myclass.so" */
  void* handle = dlopen("myclass.so", RTLD_LAZY);
 
  MyClass* (*create)();
  void (*destroy)(MyClass*);
 
  create = (MyClass* (*)())dlsym(handle, "create_object");
  destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object");
 
  MyClass* myClass = (MyClass*)create();
  myClass->DoSomething();
  destroy( myClass );
}
Code
1
2
g++ -fPIC -shared myclass.cc -o myclass.so
g++ class_user.cc -ldl -o class_user
0
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,935
09.02.2018, 15:38
Файлик для универсальной работы с динамическими библиотеками
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 *  Linux
 */
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
  #ifndef linux
    #define linux 1 //чтобы была всего одна константа, а не десяток
  #endif
  //Linux
  #include <dlfcn.h>
  #define DynLoad(s) dlopen(s, RTLD_LAZY)
  #define DynFunc(lib, name)  dlsym(lib,name)
  #define DynClose(lib) dlclose(lib)
/*
 *  Win 32
 */
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
  #ifndef WIN32
    #define WIN32 1
  #endif
  //Win32
  #define _CRT_SECURE_NO_WARNINGS
  #include <windows.h>
  
  #define DynLoad(s) LoadLibrary(s)
  #define DynFunc(lib, name)   GetProcAddress((HINSTANCE)lib, name)
  #define DynClose(lib) FreeLibrary(lib)
 /*
  *  Other systems (unsupported)
  */
#else
  #error "Unsupported platform"
#endif
1
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.02.2018, 15:46
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
универсальной
Ха, Mac OS нету (:
0
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,935
09.02.2018, 16:25
outoftime, Потому что у меня MacOS нету, как и возможности, необходимости и желания писать под нее. Хотя если приведете вариант реализации - включу.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.02.2018, 16:31
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Хотя если приведете вариант реализации - включу.
Видел темку где различия были только на этапе компиляции. А в целом, я не в теме.
0
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,935
09.02.2018, 19:07
Гугл считает что macOS признает dlopen / dlsym / dlclose, так что можно добавить в первую ветку или скопировать макросы в третью. Но без тестирования делать это все-таки не хочется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2018, 19:07
Помогаю со студенческими работами здесь

Создание .dll и присоеденение .dll к проекту путем непосредственного написания кода
Здравствуйте, дорогие форумчане! Я прекрасно знаю, как создавать и прикреплять к проекту .dll файлы при помощи опций компилятора в Visual...

Не загружается php_ifx.dll, пишет unable to load dinamic library dhpextensionsphp_ifx.dll
люди добрые, помогите кто чем может.. под виндами, стоит PHP 4.3.4, в php.ini указан extension_dir и естественно соответствующий...

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll, libmysqld50.dll, libmysqld51.dll. Но я нигде...

Сборка Qt: отучение Qt от mingw10.dll, libgcc_s_dw2-1.dll и других Qt***.dll
В связи с тем, что часто возникают одни и те же вопросы, а в нете копаться никто не любит привожу перевод буржуйской вики по отлучению...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru