Здравствуйте, DZ_JIGVAL, Вы писали:
DJ>__declspec(dllexport) int __stdcall Init(pSend Send);
... DJ>а не DJ>tmpInit = (pInit) GetProcAddress(h_plugin, "?Init@@YGHP6GHHPADH@Z@Z");
В принципе, ты можешь описать функцию как
extern"C"__declspec(dllexport) int __stdcall Init(pSend Send);
, тогда придеься грузить ее по имени "_Init" — это может быть проще.
DJ>.def файл сгенерил, НО как его использовать то?
Тоже вариант. Если компилируешь в среде Visual C++, просто подключи его к проекту. Иначе передавай его в опции линкера /def:myfile.def.
Успехов,
Виталий.
Re[2]: GetProcAddress и имена с собаками
От:
Аноним
Дата:
18.11.02 04:57
Оценка:
Здравствуйте, retalik, Вы писали:
R>В принципе, ты можешь описать функцию как R>
R>extern"C"__declspec(dllexport) int __stdcall Init(pSend Send);
R>
R>, тогда придеься грузить ее по имени "_Init" — это может быть проще.
пока устраивает, уже посмотрел. (_Init@4)Т.е. если я правильно понял, в независимости от компилира extern "C" заставит сделать именно такие имена? (например если кто в Делфи делает, есди это возможно, или в Билдере)
DJ>>.def файл сгенерил, НО как его использовать то? R>Тоже вариант. Если компилируешь в среде Visual C++, просто подключи его к проекту. Иначе передавай его в опции линкера /def:myfile.def.
дык, в том то и дело, что динамически надо, что-то типа плаг-инов.
c COM и CORBA и все такое не очень охота разбираться, да и навороты не нужны.
Здравствуйте, Аноним, Вы писали:
А>пока устраивает, уже посмотрел. (_Init@4)
А, да, у тебя же __stdcall... Тогда действительно _Init@4. _Init — это для __cdecl.
А>Т.е. если я правильно понял, в независимости от компилира extern "C" заставит сделать именно такие имена? (например если кто в Делфи делает, есди это возможно, или в Билдере)
Насколько я не знаю , в дельфях можно экспортируемой функции любое имя задать. Спроси в соответствующем форуме.
Для билдера — вроде бы, да.
DJ>>>.def файл сгенерил, НО как его использовать то? R>>Тоже вариант. Если компилируешь в среде Visual C++, просто подключи его к проекту. Иначе передавай его в опции линкера /def:myfile.def. А>дык, в том то и дело, что динамически надо, что-то типа плаг-инов.
Что значит динамически? Ты же все равно свою DLL скомпилировать должен. Вот при ее компиляции и задай имя def-файла. Тогда получится экспортировать просто "Init".
Здравствуйте, Аноним, Вы писали:
А>пока устраивает, уже посмотрел. (_Init@4)Т.е. если я правильно понял, в независимости от компилира extern "C" заставит сделать именно такие имена? (например если кто в Делфи делает, есди это возможно, или в Билдере)
Категорически НЕТ.
Указанное имя специфично исключительно для Microsoft C/C++. У борланда extern "C" __stdcall был вообще без какого-либо манглинга (для его линейки C/C++, скорее всего и для билдера то же самое).
С Delphi вообще отдельная песня. Сей продукт никакого отношения к C/C++ компиляторам не имеет, и все их законы на него не распространяются. Короче, делфа экспортирует имя один в один.
DJ>>>.def файл сгенерил, НО как его использовать то? R>>Тоже вариант. Если компилируешь в среде Visual C++, просто подключи его к проекту. Иначе передавай его в опции линкера /def:myfile.def.
А>дык, в том то и дело, что динамически надо, что-то типа плаг-инов.
Уважаемый, вы о чем? Виталик говорит о компиляции, а вы?
А>c COM и CORBA и все такое не очень охота разбираться, да и навороты не нужны.
Мама дорогая! Plugin's topic revisited!!!
Все что нужно, так это одна единственная экспортируемая функция, в которую передается структура, первым полем которой будет признак версии (у MS эту роль выполняет поле размера передаваемой структуры). В эту структуру плагин запишет адреса всех входов своего API и глобальных данных (последнее — при необходимости). Эта структура будет для базового экзешника эквивалентом секции импорта плагина.
Другой вариант — эта структура формируется самим плагином, и указатель на нее возвращается его функцией инициализации.
Здравствуйте, retalik, Вы писали:
DJ>>>>.def файл сгенерил, НО как его использовать то? R>>>Тоже вариант. Если компилируешь в среде Visual C++, просто подключи его к проекту.
Все! Понял!
Ступил на счет компиляции с ключем /def:myfile.def.
у мухи слуховой аппарат расположен на крыльях.... и это можно доказать!
Здравствуйте, Игорь Вартанов, Вы писали:
А>>пока устраивает, уже посмотрел. (_Init@4)Т.е. если я правильно понял, в независимости от компилира extern "C" заставит сделать именно такие имена? (например если кто в Делфи делает, есди это возможно, или в Билдере)
ИВ>Категорически НЕТ.
ясно.
ИВ>Мама дорогая! Plugin's topic revisited!!!
ИВ>Все что нужно, так это одна единственная экспортируемая функция, в которую передается структура, первым полем которой будет признак версии (у MS эту роль выполняет поле размера передаваемой структуры). В эту структуру плагин запишет адреса всех входов своего API и глобальных данных (последнее — при необходимости). Эта структура будет для базового экзешника эквивалентом секции импорта плагина.
про единственную фунцию и все такое — прочитал, на RSDN-e же. Собственно как "ту единственную" то загрузить.
Я уже написал, что просто неправильно понял куда при.... примазать полученный mydll.def
Теперь то все ясно
ИВ>P.S. Я хоть в тему ответил?
О да! Именно после этого сообщения я то и понял — КАК БЫЛ НЕПРАВ!
всем пасиб
у мухи слуховой аппарат расположен на крыльях.... и это можно доказать!