Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c