Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.14;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-43799
Mike Kouzmine
2004-02-18 14:00
2004.03.14
Дежа вю


14-43867
VolanD2002
2004-02-19 15:37
2004.03.14
Надо


1-43488
Роман К
2004-02-29 14:01
2004.03.14
Можно ли включить визуальный стиль XP только для своей программы


7-43898
ikivio
2003-12-27 12:05
2004.03.14
Клавиша на клавиатуре


8-43690
tse
2003-11-09 00:07
2004.03.14
Запись звука с линейного входа в wav файл