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

Вниз

Delphi+C   Найти похожие ветки 

 
Pat ©   (2004-03-19 00:56) [0]

Есть некий *.lib файл. Возможно ли его использовать в Делфи? Можно ли из него, допустим, сделать dll"ку (где-нить найду нужный компилятор)?


 
Suntechnic ©   (2004-03-19 05:14) [1]

Начнём с того, что lib файлы тоже бывают разные. Как правило это всего лишь файл содержащий информацию для разрешения ссылок на внешние библиотеки. Одинокий lib файл не то что в Delphi, с ним и в С делать нечего. К нему должна идти или dll или obj файл. Так что вопрос типа "Можно ли из него, допустим, сделать dll"ку " вообще не имеет никакого смысла.


 
тихий вовочка ©   (2004-03-19 06:56) [2]

Одинокий lib файл не то что в Delphi, с ним и в С делать нечего
Бред собачий. Если библиотека статическая, то в ней и содержится код функций. Тогда ты можешь ее дизассемблировать и использовать ассемблерные вставки в Delphi. Если повезет.


 
Anatoly Podgoretsky ©   (2004-03-19 08:53) [3]

Pat ©   (19.03.04 00:56)  
Из нее можно извлечь в OBJ, дальше дело техники.


 
Pat ©   (2004-03-19 10:18) [4]

Немного уточню. В "поставке" идут следующие файлы:
file.h
file.lib
newfile.c
newfile.exe

В документации говорится, что newfile.exe был получен из newfile.c. В newfile.c нашел такую строчку - #include "file.h"


 
ПИТОН   (2004-03-19 10:44) [5]


> #include "file.h"


Берешь словарь и переводишь: INCLUDE -> включить.

А при чем здесь LIB?


 
Pat ©   (2004-03-19 11:10) [6]

>ПИТОН   (19.03.04 10:44) [5]
include - типа нашего uses...кажется :-))

Дело в том, что file.h содержит функции, которые по документации экспортируются этот библиотекой. Вот поэтому я и решил, что из file.h+file.lib можно сделать file.dll


 
PVOzerski ©   (2004-03-19 11:32) [7]

Сделать Dll можно. Хотя не исключено, что придется написать кое-что на Си. Особенно - если речь идет не о Си, а о C++, а статическая библиотека содержит методы классов. Тогда придется писать враппер на C++, чтобы "разинкапсулировать" методы или вообще переделать всё на COM-интерфейсы. Впрочем, если речь идет не о классах, а об обычных функциях, есть шанс вообще обойтись паскалем.

1) Разберитесь, библиотека coff или omf (coff-библиотеки начинаются с сигнатуры !<arch> ).

Если coff, советую взять для написания Dll компилятор FreePascal
(1.1 или 1.9, относительно 1.0x - успех не гарантирую).
Разберитесь, как выглядят имена функций в mangled-виде (можно обойтись даже, например, вьюером FAR"a, а уж дизассемблеры - вообще роскошно). Из Си-шных хедеров выясните параметры функций и соглашения об их передаче. Потом переименовываем библиотеку следующим образом: ее название должно начинаться с lib, а расширение быть .a Например, pmylib.lib --> libpmylib.a .
Вот примерный текст библиотеки (имейте в виду, возможно, аналогично $linklib"ом придется приделывать системные библиотеки Си - вариант решения: позаимствовать их из mingw32):

{$linklib pmylib ,static}
{$apptype GUI}
library aaa;
procedure proc1(x1,x2:pChar);cdecl;
external name "_proc1";
exports
proc1;
begin
end.

Если omf:

2) Разберитесь, у Вас 32- или 16-разрядная библиотека (простейший вариант - по приложенному образцу экзешника). Если 16-разрядная, можете попытаться разобрать каким-нибудь lib"ом ее на obj-файлы. А дальше всё станет весело. Если соглашения о вызовах не pascal, о Борланде забудьте. Ищите Stony Brook Pascal+ и читайте readme к нему, как такое линковать. Если же pascal, а имена функций не противоречат синткасису TP, Вам очень повезло, можно использовать старый добрый TPW или BP7: объявляйте их как external и директивой {$L} прилинковывайте obj-файлы.
Если библиотека 32-разрядная, везение должно заключаться в соответствии mangled-имен синтаксису Delphi: в отличие от TP, о соглашениях по вызову с Delphi можно договориться. Тогда и Dll можно не делать, а прямо линковать к экзешнику obj-файлы. Единственное "но": скорее всего, си-шные obj-файлы захотят функций си-шной RTL. Но их обычно легко утешить, объявив эти функции как external "crtdll.dll" .
Есть в отношении 32-разрядной omf-библиотеки и другой вариант: каким-нибудь конвертером перевести ее в coff - и см. выше. Тогда можно справиться даже с "неудачными" mangled-именами.


 
Pat ©   (2004-03-20 11:33) [8]

>Из нее можно извлечь в OBJ, дальше дело техники.
дело техники это {$I...}?

>PVOzerski ©   (19.03.04 11:32) [7]
32 разрядная Coff :-)

Люди...может кто-нибудь поможет прикрепить ее к Делфи?
Весь архив 160 Кб http://www.voiceage.com/media/va_g729.zip

P.S. Это звуковой кодек G729А. Может кому интересно...:-)


 
Pat ©   (2004-03-21 18:05) [9]

Нашел в недрах инета - http://www.cygwin.com/ml/cygwin/1997-07/msg00133.html
Может кто-нибудь переделает lib в dll? Хелп...плиз..


 
Pat ©   (2004-03-21 19:20) [10]

>PVOzerski ©   (19.03.04 11:32) [7]
Пока качается FreePascal, хотелось бы уточнить пару вещей...
Вот содержание h-файла:

#define  L_FRAME_COMPRESSED 10
#define  L_FRAME            80

Вот эти четыре функции меня и интересуют
void va_g729a_init_encoder();
void va_g729a_encoder(short *speech, unsigned char *bitstream);
void va_g729a_init_decoder();
void va_g729a_decoder(unsigned char *bitstream, short *synth_short, int bfi);

Как тогда будет выглядеть библиотека в FreePascal?



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
1-1082363396
xman
2004-04-19 12:29
2004.04.11
MDIchild


6-1079600116
Артут
2004-03-18 11:55
2004.04.11
компонента для HTTP


4-1079425476
bg8
2004-03-16 11:24
2004.04.11
Установка приоритета приложения


3-1081423941
AlexPal
2004-04-08 15:32
2004.04.11
Проблемы с Русским шрифтом


1-1082570828
ЯЯЯ
2004-04-21 22:07
2004.04.11
Как узнать выбранную ячейку в StringGrid.