Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-43636
Вопрошающий
2004-03-02 12:21
2004.03.14
Регистрация компонента ActiveX - Formula One (VCF132.OCX)


9-43236
Unknown user
2003-07-24 19:27
2004.03.14
Быстрый вывод в OpenGL.


1-43511
linkz
2004-02-28 21:52
2004.03.14
Получить строку и обработать в таймере


1-43475
Sand
2004-02-29 15:50
2004.03.14
Object Inspektor не сохраняет установки для моей компоненты


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский