Про объектный файл.

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Alagert
Сообщения: 167
Контактная информация:

Про объектный файл.

Сообщение Alagert »

Имеется объектный файл init.obj а в нем есть функция

Код: Выделить всё

function UserFunction1(     X : float; ProcAddr : Pointer) : float; external;

есть ли возможность заюзать эту функции в сишной проге. Как это сделать?
Born to be ROOT
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian
Контактная информация:

Re: Про объектный файл.

Сообщение xorader »

берёшь и юзаешь :) при компиляции только указываешь флаг '-c'

пример (где example.c - твоя прога):
gcc -c -o example.o example.c
gcc -o example example.o init.obj
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
Alagert
Сообщения: 167
Контактная информация:

Re: Про объектный файл.

Сообщение Alagert »

Вот спасибо за ключик.
а то что функция изначально написана на Паскале, для ее вызова мне нужно поменять сиснтаксии на аналагичный сишный что ли? Как мне изменить ProcAddr:Pointer. Как я знаю это некиф аналог указателей.Как с ним быть?
Born to be ROOT
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian
Контактная информация:

Re: Про объектный файл.

Сообщение xorader »

эээ.. что то я поторопился с ответом.. не всё так просто... вроде, у паскаля и си разные последовательности заталкивания в стэк аргументов для функции.. и вытаскивают вроде по разному... где то я таблицу видел сравнения. А вообще, не рекомендую очень очень это делать - ибо ошибиться очень просто - перепишите функцию на Си, или исходников нет ? В любом случае просто так вы не подцепите её... гуглируйте - может уже есть решение.
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
Alagert
Сообщения: 167
Контактная информация:

Re: Про объектный файл.

Сообщение Alagert »

Просто как я понимаю сорцы этой функции не достать, а объектник есть. И нужно что бы прога работала.
Вот блин и мучаюсь с этой хренью.
Born to be ROOT
Спасибо сказали:
Аватара пользователя
Gloomy
Сообщения: 340
Статус: сочувствующий

Re: Про объектный файл.

Сообщение Gloomy »

Попробуй взять IDA - насколько мне помнится он умеет декомпилировать объектники.
Pointer это указатель. Вообще известно что делает эта функция? Судя по названию второго агрумента она принимает указатель на функцию.
Если есть возможность выложи куда-нибудь объектник, я утром грузанусь в Винду и посмотрю в IDA.
Спасибо сказали:
Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Про объектный файл.

Сообщение Shura »

в принципе, если перед определением функции указать stdcall, то параметры в нее будут передаваться в прямом порядке, т.е. как раз так как на паскале. А с возвратом никаких проблем быть не должно, т.к. больше одного параметра все равно не вернешь
Rock'n'roll мертв © БГ
Спасибо сказали:
Ananas
Сообщения: 64

Re: Про объектный файл.

Сообщение Ananas »

а чем этот obj был создан?
Спасибо сказали:
Аватара пользователя
Alagert
Сообщения: 167
Контактная информация:

Re: Про объектный файл.

Сообщение Alagert »

Появились сомнения по поводу того на чем он написан. Теперь рассматриваю 2 варианта:либо он написан на Pascal либо на Fortran.
в принципе, если перед определением функции указать stdcall, то параметры в нее будут передаваться в прямом порядке, т.е. как раз так как на паскале. А с возвратом никаких проблем быть не должно, т.к. больше одного параметра все равно не вернешь

А можно по подробнее об этом.
Born to be ROOT
Спасибо сказали:
Аватара пользователя
Shura
Сообщения: 1537
Статус: Оказывается и без KDE есть жизнь
ОС: FreeBSD 8.0-RC2

Re: Про объектный файл.

Сообщение Shura »

ну если есть функция на С

Код: Выделить всё

void MyFunc(int a, int B);

то после компиляции при работе программы в стэк сперва засылается b а потом a. Так принято у С. В паскале же - прямой порядок, т.е. сперва в стэк будет загоняться a, а потом b.
Директива stdcall (или может быть __stdcall) - меняет порядок засылки аргументов для функции на прямой.

Пользоваться так:

Код: Выделить всё

void __stdcall MyFunc(int a, int B);


Еще подробней смотри на www.rsdn.ru
Rock'n'roll мертв © БГ
Спасибо сказали:
Аватара пользователя
Alagert
Сообщения: 167
Контактная информация:

Re: Про объектный файл.

Сообщение Alagert »

Вообщем вопрос снят. Нашел исходники этого объектника на Фортране.
Всем спасибо за участие.
Born to be ROOT
Спасибо сказали:
Ответить