Native DLL с помощью чистого VB6 без примочек

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение arthur2 » 27.02.2014 (Чт) 5:54

Экспортируем функции. Затем в этом же проекте декларируем их. В Declare в качестве Lib указываем путь к своему же экзешнику.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение Хакер » 27.02.2014 (Чт) 5:55

Так это называется «импортировать из самого себя», а ты написал «экспортировать из самого себя». Экспорт и так всегда происходит из самого себя.

Конечно так можно и это очевидно, но в чём смысл такого мероприятия?

Плюс, огромный минус в привязке к имени exe-файла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение arthur2 » 27.02.2014 (Чт) 6:12

Так это называется «импортировать из самого себя», а ты написал «экспортировать из самого себя».
Сначала из себя экспортируем, потом в себя импортируем. Ну да, "импортировать" - внятнее :)
Смысл - можно переопределять функции. Пока вроде больше никакого.
Последний раз редактировалось arthur2 09.03.2014 (Вс) 15:17, всего редактировалось 1 раз.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение Хакер » 27.02.2014 (Чт) 6:20

arthur2 писал(а):Смысл - можно переопределять функции. Пока вроде больше никакого.

Для этого надо пользоваться кирпичём MagicPointers.

Плюсы очевидны:
  • Не выставляем private-кишки наружу.
  • Не привязаны к имени исполняемого файла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение arthur2 » 27.02.2014 (Чт) 6:24

Хакер писал(а):Для этого надо пользоваться кирпичём MagicPointers.
Им, собственно, и пользуюсь... А это просто пришло в голову - решил проверить.
Артур
 
   

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Native DLL с помощью чистого VB6 без примочек

Сообщение ger_kar » 15.03.2016 (Вт) 19:51

Хакер писал(а):...
VB поддерживает секцию VBCompiler в которой может быть два ключа:
C2Switches — который определяет дополнительные ключи вызова компилятора (c2.exe)
LinkSwitches — который опредеяет дополнительные ключи вызова линкера (link.exe)
...
Так вот, если у вас в модулях есть функции Foo и Bar и вы хотите их экспортировать в своей DLL, единственное, что вам нужно сделать, это открыть vbp-файл блокнотом и добавить туда вот это:
Выделить всё[VBCompiler]LinkSwitches=-export:Foo -export:Bar
...
VBP-файл (файл проекта) по своей сути является ini-файлом. Это никакой не секрет, не тайна, а вполне себе документированный факт. Вы можете делать в нём [секции] и пары ключ=значение как в любом нормальном ini-файле. (Это настолько документировано, что Add-in'ам дали возможность вызывать методы ReadProperty/WriteProperty у класса VBProject, чтобы Add-in'ы могли хранить свои произвольные данные, привязанные к проектам.)
...В топку всякие примочки, подменяющие link.exe или делающие подобные грязные трюки. VB изначально позволяет вам обойтись без этого. Правда и никакой «инициализации рантайма» нет, но ни одна из «грязных примочек» её и так не предлагала, только мой FNDLL имел в этом плане отличие.

А теперь вопросы:
1) Если Add-in'ы могут писать в файл проекта, то может этот процесс как то автоматизировать написав соответствующий Add-in, только вот вопрос, как помечать такие экспортируемые функции?
2)Инициализации рантайма нет, но если функции использовать из проекта VB6, то к моменту вызова функций рантайм же по идее будет инициализированным так? Т.е. для использования из VB6 доп. инициализация и не нужна вовсе?
Бороться и искать, найти и перепрятать

Пред.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 11

    TopList