Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-1079511122
Gero
2004-03-17 11:12
2004.04.11
В сиднейском аэропорту "обмяк" самолёт :)


1-1082456276
Th
2004-04-20 14:17
2004.04.11
Delphi-реализация unix-ф-ции Crypt() (алгоритм DES)


1-1082589588
Demi
2004-04-22 03:19
2004.04.11
Что такое SetWallpaper


1-1082655742
Seldon
2004-04-22 21:42
2004.04.11
Не получается TButton.Default :(


3-1081516661
Xim
2004-04-09 17:17
2004.04.11
Обновления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский