Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

получить данные из lib/dll [D7, WinXP]


yaJohn ©   (2006-01-27 17:18:00) 

Есть библиотека доступная в виде dll и lib (есть еще exp файл). Есть заголовочные файлы и даже *.c исходники.
В *.h файле декларированны константы, например:

extern SpeexMode speex_nb_mode;

SpeexMode - структура. Само собой в *.c есть speex_nb_mode, например:
SpeexMode speex_nb_mode = {
  &nb_mode,
  nb_mode_query,
.......
};  

Вопрос: можно ли получить запоненнуюструктуру из ДЛЛ?
Если нет - как "подцепить" lib файл? Нашел в инете, что его нужно "порезать" на obj с помощью COFF2OMF.EXE, но... Где взять COFF2OMF.EXE если нет bc++, и как получить доступ к данным в obj?

3.bI. Ссори, если вопросы дурацкие.


Eraser   (2006-01-28 12:48:00) [1]


> OldNaum ©   (28.01.06 07:06) [11]

неа!
ZLib :-)


OldNaum   (2006-01-28 07:06:00) [2]

<offtop>
Eraser ©   (28.01.06 00:03) [7]
жутко знакомый текст, случаем не pngimage? :)
</offtop>


Eraser   (2006-01-28 00:40:00) [3]


> palva ©   (28.01.06 00:32) [9]

и то верно.
В любом случае лучше родные технологии использовать.


palva   (2006-01-28 00:32:00) [4]

Eraser ©   (28.01.06 00:03) [7]
Ну да, это можно. Раздергать lib на объектники при помощи tlib, а потом присоединять. Но хорошо, если объектники не потянут за собой сишные библиотеки, а если потянут? В данном случае lib фактически не содержит кода. Единственное полезное, что там может быть это номер, если имя экспортируется по номеру. Но номера при экспорте - это устаревшая технология.


Eraser   (2006-01-28 00:05:00) [5]


> Eraser ©   (28.01.06 00:03) [7]

упс... не то... попутал с obj :-p


Eraser   (2006-01-28 00:03:00) [6]


> yaJohn   (27.01.06 18:06) [4]


> Ок. Если вернутся к вопросу о LIB...
> Как подцепить ее?

Пример:

implementation

{** link zlib code **********************************************************}

{$L zlib/deflate.obj}
{$L zlib/inflate.obj}
{$L zlib/inftrees.obj}
{$L zlib/infback.obj}
{$L zlib/inffast.obj}
{$L zlib/trees.obj}
{$L zlib/compress.obj}
{$L zlib/adler32.obj}
{$L zlib/crc32.obj}
...
{** deflate routines ********************************************************}

function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
 recsize: Integer): Integer;
 external;

function deflateInit2_(var strm: TZStreamRec; level, method, windowBits,
 memLevel, strategy: Integer; version: PChar; recsize: Integer): Integer;
 external;

function deflate(var strm: TZStreamRec; flush: Integer): Integer;
 external;

function deflateEnd(var strm: TZStreamRec): Integer;
 external;

и т.д.


palva   (2006-01-27 23:50:00) [7]

> Но GetProcAddress отвечает nill
А какое имя вы хотите экспортировать? Если speex_nb_mode, то скорее всего nil и получите. Обычно надо добавлять подчеркивание впереди, типа _speex_nb_mode, но экспортируемое имя может быть каким угодно

> Если вернутся к вопросу о LIB... Как подцепить ее?

lib не цепляется динамически, она используется при линковке программой ilink32 в языке C. А для паскаля lib бесполезен, тем более, что имеет место [5]


Игорь Шевченко   (2006-01-27 20:40:00) [8]

yaJohn   (27.01.06 18:06) [4]

Так если не экспортируются, какой смысл цеплять ? В LIB для DLL обычно только ссылки на экспортируемые функции.


yaJohn   (2006-01-27 18:06:00) [9]

Мда, и tdump говорит что такие имена dll_кой не экспотируются :(
Ок. Если вернутся к вопросу о LIB...
Как подцепить ее?


Игорь Шевченко   (2006-01-27 17:58:00) [10]

yaJohn   (27.01.06 17:53) [2]

Тогда никак :)


yaJohn   (2006-01-27 17:53:00) [11]

Гхм... интересная идея.
Но GetProcAddress отвечает nill


Игорь Шевченко   (2006-01-27 17:29:00) [12]

LoadLibrary+GetProcAddress + Move


Наверх

Титульная страница Поиск, карта сайта Написать письмо