использовать библиотеку dll с методом LoadLibrary () на C ++ - PullRequest
1 голос
/ 03 декабря 2008

Могу ли я использовать метод LoadLibrary для импорта данных типа struct ?? извините за мой английский. спасибо.

Ответы [ 5 ]

8 голосов
/ 03 декабря 2008

Позвольте мне предположить некоторые вещи, которые опущены в вопросе:

  1. У вас есть динамическая библиотека с именем flubber.dll
  2. Библиотека экспортирует функцию bool GetFlubber(Flubber* flubber).
  3. Функция и тип Flubber (который просто является struct!) Объявлены в заголовочном файле с именем flubber.h .

Если эти 3 условия соблюдены, вы можете использовать LoadLibrary на flubber.dll , затем GetProcAddress с GetFlubber в качестве имени процедуры и, наконец, вы можете объявить Flubber локальный экземпляр и передайте его в GetFlubber через полученный адрес процесса.

3 голосов
/ 03 декабря 2008

Вы хотите поместить данные в dll и использовать LoadLibrary и Getprocaddres, чтобы получить указатель на данные? Это возможно, хотя чаще помещать функции в dll и разрешать им возвращать указатель на данные.

2 голосов
/ 03 декабря 2008

Хм ... Боюсь, этот вопрос было немного трудно понять.

В C ++ объявление структуры - это просто объявление. Он не генерирует что-то, что вы можете загрузить во время выполнения, это чистая конструкция во время компиляции, которая просто сообщает компилятору, как что-то размещено в памяти, какие поля используются, их типы и порядок и т. Д.

1 голос
/ 03 декабря 2008

Я предполагаю, что вы используете VC ++ 2005.

MS теперь предоставляет вам Задержка загрузки Dll's .

Компоновщик Visual C ++ теперь поддерживает отложенную загрузку DLL. Это освобождает вас от необходимости использовать функции Windows SDK LoadLibrary и GetProcAddress для реализации отложенной загрузки DLL.

Шаги, которые необходимо выполнить для настройки задержки загрузки.

Перейдите в Project-> Properties-> Linker-> Input и укажите свой Dll в 'Delay Loaded DLLs'

0 голосов
/ 09 декабря 2008

Как и предполагали другие ответы, сложно сказать, о чем здесь говорят, но я добавлю ответ для другой интерпретации вопроса. Я не уверен, что это «официально поддерживается», но вы можете сделать так, чтобы DLL экспортировал глобальную переменную, а затем динамически осуществлял доступ к ней через GetProcAddress.

Например, если библиотека с именем foo.dll содержит глобальный тип FOO с именем g_MyGlobal, то она может экспортировать переменную в foo.def. Код клиента затем можно позвонить:

MyPointer = GetProcAddress(..., "g_MyGlobal");

и получите указатель «FOO *» на глобальный.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...