Главная страница
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.032 c
4-43964
xoluay
2003-12-28 20:45
2004.03.14
директория


14-43893
Тимохов
2004-02-20 15:31
2004.03.14
Что с датой на сервере?


1-43592
MasterKolyan
2004-02-27 12:11
2004.03.14
Пересылка значений между нетипизированными указателями


3-43386
Serj
2004-02-14 13:51
2004.03.14
Как отключить благодарность за выбор DBISAM


14-43792
NAlexey
2004-02-18 15:06
2004.03.14
Pos - скорость.