У меня есть этот пример класса 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)), но не к общедоступным переменным (ширина и высота)
Как я могу получить доступ к этим переменным
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.
Файлы определений следует считать устаревшими. Чтобы экспортировать классы, вы должны добавить атрибуты dllimport или dllexport после ключевого слова class. При компоновке с вашей библиотекой вы должны сделать это с созданной MSVC статической (.lib) библиотекой, которую можно найти в том же каталоге, что и ваша динамическая библиотека.
Видеть: https://msdn.microsoft.com/en-us/library/81h27t8c. aspx https://msdn.microsoft.com/en-us/library/3y1sfaz2. aspx
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .