Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
ВнизDLL -> OBJ Найти похожие ветки
← →
Unforseen (2004-02-29 14:41) [0]Приветствую.
Я написал ДЛЛку и мне очень хочеться сделать так, чтобы её можно было также прилинковывать статически, дабы не таскать лишний файл.
Единственное решение, которое я нашел - OBJ файлы (Project->Options->Linker). Отсюда
вопрос номер 1: какие лучше использовать - C или C++ (с какими опциями?).
Вопрос номер 2: Как это потом прилинковать к тому же дельфовому ЕХЕ.
Перерыл кучу документации - не линкуется и все тут. Unsatisfied forward declaration...
Спасибо.
← →
Defunct (2004-02-29 15:36) [1]> Unsatisfied forward declaration...
Переведите, и все будет понятно.
← →
Verg (2004-02-29 15:37) [2]Ну точно сегодня - досрочное 1-ое апреля....
← →
Unforseen (2004-02-29 15:53) [3]В ДЛЛке функция ТОЧНО есть и согласно документации я должен сделать
{$L "my_dll.obj"}
function myFunc(param):ret_type; stdcall; external;
И... ничего. Ошибки пачками.
Проблема в том, что дельфа не видит этих функций.
← →
Defunct (2004-02-29 15:58) [4]еще бы.
DLL нельзя просто переименовать в OBJ.
← →
Unforseen (2004-02-29 16:03) [5]Разумеется, что не переименовать. Я же задаю компилятору задание выдать мне С Object File. А там с названиями функций какая-то тьма...
← →
Palladin (2004-02-29 16:40) [6]прекомпилятор C изменяет внутренние названия функции в соответствии с параметрами, на этом там построена система перегрузки
← →
Unforseen (2004-02-29 17:21) [7]Вот бы еще знать, что за параметры и где их настроить?..
← →
Palladin (2004-02-29 17:28) [8]в соответствии с параметрами функции, настраиваются они в исходниках
← →
Unforseen (2004-02-29 17:35) [9]Вот к примеру, одна из экспортируемых функций в длл
function ProcessKill(myProcessName: PChar):boolean;stdcall;
...
exports
ProcessKill
В юните пишу
interface
{$LINK mylib.obj}
function ProcessKill(myProcessName: PChar):boolean;stdcall;
implementation
function ProcessKill(myProcessName: PChar):boolean;external;
Или (не?)значительные вариации согласно разным инструкциям. Где у меня что кривое?
← →
Defunct (2004-03-01 03:17) [10]Я не уверен, а нужна ли секция Exports? Насколько мне не изменяет память, Exports только для динмической компоновки. Для статической компоновки достаточно секции Interface.
Поправьте если я не прав.
← →
Defunct (2004-03-01 03:22) [11]И stdcall при статической компоновке тоже лишний.
попробуйте так:
Пишем обычный модуль с экспортируемыми функциями и делаем из него obj:
Unit ...;
Interface
function ProcessKill(myProcessName: PChar):boolean;
....
А в другом модуле или проекте подключаем его так как Вы пописали в [9].
← →
Unforseen (2004-03-01 17:49) [12]Я поступил следующим образом: перенес все свои "экспортируемые" функции в отдельный юнит, затем просто вписываю его в ДЛЛку и экспортирую по-нормальному.
Таким образом у меня есть внешний модуль (сама длл) и скомпилированный юнит, который можно прикрутить к любому дельфовому(!) проекту.
А как быть с другими компиляторами?
Во-первых, из PAS-файла OBJ приходиться делать руками (если можно иначе - прошу поправить)
dcc32 -jhne myunit.pas
На полученый таким образом OBJ натравливаю
TDUMP -d myunit.obj out.txt
и вижу человеческие имена функций, например, тот же ProcessKill.
НО дельфи полностью отказывается понимать созданый таким образом OBJ и ругается страшными словами вроде 16-Bit fixup encountered in object file и все теми же Unsatisfied forward or external declaration.
Пироги, однако...
Ну не верю я, что к дельфе нельзя прикрутить созданный ей же файл :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c