У меня есть этот пример класса C ++ в библиотеке dll

class Rectangle {
  public:
    int width, height;
    void set_values (int,int);
    int area (void);
} rect;

И я экспортировал все с помощью файла .def при импорте dll, у меня есть доступ к двум функциям (set_values (int, int) и area (void)), но не к общедоступным переменным (ширина и высота)

Как я могу получить доступ к этим переменным

0
arktouros 13 Мар 2018 в 13:24

2 ответа

Лучший ответ

Используйте dllexport для экспорта ваших функций в dll:

extern "C" __declspec(dllexport) bool void set_values (int,int);

Вы также можете использовать dumpbin для создания файла определения

dumpbin /EXPORTS tryDLL.dll > tryDLL.def

Затем используйте lib.exe для создания файла .lib, который будет работать с вашим файлом dll:

lib /def:try.def /out:trydll.lib

После правильного экспорта вы можете скопировать файл DLL в папку приложения и включить каталог и файл библиотеки (или использовать #pragma) в свой проект. Экспортированные определения классов и функций должны быть объявлены в файле заголовка, который все еще необходимо включить в ваш проект. При этом ваша функция-член может вызываться как в любой другой обычной программе. Вы можете получить доступ к статическим переменным-членам и константам, объявленным в ваших объявлениях dll.

1
seccpur 13 Мар 2018 в 12:27

Файлы определений следует считать устаревшими. Чтобы экспортировать классы, вы должны добавить атрибуты dllimport или dllexport после ключевого слова class. При компоновке с вашей библиотекой вы должны сделать это с созданной MSVC статической (.lib) библиотекой, которую можно найти в том же каталоге, что и ваша динамическая библиотека.

Видеть: https://msdn.microsoft.com/en-us/library/81h27t8c. aspx https://msdn.microsoft.com/en-us/library/3y1sfaz2. aspx

0
Reece 13 Мар 2018 в 11:56