problem with DLL
получаю error loading type library.
что бы это могло быть?:-?
заранее спасибо
Пытаюсь подключить к проекту на билдере чужую DLL.
получаю error loading type library.
что бы это могло быть?:-?
заранее спасибо
А как ты ее подключаешь - статически или динамически?
Пытаюсь подключить к проекту на билдере чужую DLL.
получаю error loading type library.
что бы это могло быть?:-?
заранее спасибо
ActiveX?
статически
Скроее всего она у тебя собрана под VC++, т.е. есть по крайне мере 2 стандарта DLL (не очень корректно выразился, но, полагаю, смысл ясен) Т.е. это coff и omf (последний точно не помню) В них различные правила задания имён. В комплекте с BCB есть утилтка, нечто вроде omf2coff.exe Почитай на неё документацию в справочнике Builder'а
Я столкнулся с такой же проблемой при работе с MySQL, причём DLL старой версии нормально конвертируется, а новой - нехочет :(
Скроее всего она у тебя собрана под VC++, т.е. есть по крайне мере 2 стандарта DLL (не очень корректно выразился, но, полагаю, смысл ясен) Т.е. это coff и omf (последний точно не помню) В них различные правила задания имён. В комплекте с BCB есть утилтка, нечто вроде omf2coff.exe Почитай на неё документацию в справочнике Builder'а
Я столкнулся с такой же проблемой при работе с MySQL, причём DLL старой версии нормально конвертируется, а новой - нехочет :(
вот что я получила
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporation
ERROR: COFF error: E:\IRA\a.dll
(coffread.cpp, 1502) : invalid machine type detected
вот что я получила
COFF to OMF Converter Version 1.0.0.74 Copyright (c) 1999, 2000 Inprise Corporation
ERROR: COFF error: E:\IRA\a.dll
(coffread.cpp, 1502) : invalid machine type detected
Попробуй, утилитку tdump (тоже есть в комплекте BCB) посмотри что за инфа будет в заголовках. Там может быть слишком много информации, я ключики не помню, тебя должны интересовать только заголовок, т.е. та "шапочка" (строчек 20-50) где будут указаны смещения в сегментах, имена, версии и т.д. Погляди, может найдешь там чё-нибудь путное. А вообще, думаю тут нужно искать другую версию этой DLL
А lib-файл подключен к проекту? (хотя это тоже из области Visual C).
Если omf2coff ругается, то lib файл здесь нипричём, до него ещё не дощли. Правда если DLL изначально не coff :)
Если omf2coff ругается, то lib файл здесь нипричём, до него ещё не дощли. Правда если DLL изначально не coff :)
получаю error loading type library.
что бы это могло быть?
IMHO type library это lib-файл. Как раз дело до dll не доходит.
IMHO type library это lib-файл. Как раз дело до dll не доходит.
Бья, точно :) iri_iri, ты сделай implib :) Т.е. создай LIB от DLL. А omf2coff можешь приминить для lib-файла, который шёл с DLL. Вобщем, вот тебе 2 способа
******************************************************************************
Section: Exports
Flags: 00000000
Time Stamp: 394F716B : Tue Jun 20 16:28:11 2000
Major Version: 0000
Minor Version: 0000
Exports from TLXEXPORTAPI.dll
19 exported name(s), 19 export addresse(s). Ordinal base is 1.
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
00001000 1 0000 DSE_Alloc
00001090 2 0001 DSE_Connect
000010A0 3 0002 DSE_Disconnect
000010B0 4 0003 DSE_Free
000011F0 5 0004 DSE_GetDataByName
00001360 6 0005 DSE_GetDataFirst
00001620 7 0006 DSE_GetDataMaxBufLen
000014A0 8 0007 DSE_GetDataNext
000015E0 9 0008 DSE_GetMsgTag
000011B0 10 0009 DSE_QueryCancel
00001190 11 000A DSE_QueryCurrent
000011D0 12 000B DSE_QueryIsPending
00001170 13 000C DSE_QueryNext
00001130 14 000D DSE_QueryRun
00001110 15 000E DSE_QueryRunSingle
000010E0 16 000F DSE_SendAck
00001070 17 0010 DSE_SetCallback
00001030 18 0011 DSE_SetParams
00001790 19 0012 DSE_WriteDealInfo
******************************************************************************
Section: Resources
Flags: 00000000
Time Stamp: 00000000
Major Version: 0000
Minor Version: 0000
если не трудно, пошагогво, что мне надо сделать чтобы dll подключить?
блин. я уже вообще ничего не понимаю. вот у меня лежит dll и lib.
если не трудно, пошагогво, что мне надо сделать чтобы dll подключить?
Вариант №1:
implib *.dll *.lib
Получаешь lib-файл для dll. (только сохрани предварительно где-нибудь копии dll и lib файлов)
Вариант №2:
omf2coff last.lib new.lib
Получишь lib-файл в нужном формате.
Только я не помню последовательность исходного/конечного файла в параметрах команд. В подсказке будет указан парядок следования параметров
блин. я уже вообще ничего не понимаю. вот у меня лежит dll и lib.
если не трудно, пошагогво, что мне надо сделать чтобы dll подключить?
1. Ctrl+Shift+F11. Появится окно Project Options.
2. На странице Directories/Conditionals есть ComboBox: Library path
3. Или в этот lib.path перекопировать Lib-файл, или добавить каталог, в которой лежит этот файл. (второй вариант лучше, но сложнее :))
Вариант №1:
implib *.dll *.lib
Получаешь lib-файл для dll. (только сохрани предварительно где-нибудь копии dll и lib файлов)
Borland Implib Version 3.0.22 Copyright (c) 1991, 2000 Inprise Corporation
Error E:\IRA\: unable to open file
Вариант №2:
omf2coff last.lib new.lib
Получишь lib-файл в нужном формате.
вроде получили новый x.lib размером 2К.
теперь что и как импортировать?:D
Borland Implib Version 3.0.22 Copyright (c) 1991, 2000 Inprise Corporation
Error E:\IRA\: unable to open file
вроде получили новый x.lib размером 2К.
теперь что и как импортировать?:D
попробуй:
implib filename.lib filename.dll
А как импортировать, Mоngооsе рассказал. Я обычно кидаю lib файлы в каталог с проектом и через Project Manager добавляю их. (Project manager->Add Files)
P.S.
Кстати, а как ты вообще паешься подключить dll к проекту (статически) - опиши
1. Ctrl+Shift+F11. Появится окно Project Options.
2. На странице Directories/Conditionals есть ComboBox: Library path
3. Или в этот lib.path перекопировать Lib-файл, или добавить каталог, в которой лежит этот файл. (второй вариант лучше, но сложнее :))
ок!!! все это я проделала.
он откомпилился!
а теперь как мне обратиться к ф-ию из DLL.
надо мне писать #include...?
сорри,я- чайник...:D первый раз с длл вообще столкнулась. :D :D :D
ок!!! все это я проделала.
он откомпилился!
а теперь как мне обратиться к ф-ию из DLL.
надо мне писать #include...?
сорри,я- чайник...:D первый раз с длл вообще столкнулась. :D :D :D
Ой, а ты ОНА :) Хе, похвально =)
Если ты подключила стастически, то можешь обращаться напрямую к функциям, как к любым другим. Если с dll шёл header-файл (*.h) то подключи и его (#include "filename.h") Это на тот случай, если там используются классы и т.д.
Ой, а ты ОНА :) Хе, похвально =)
Если ты подключила стастически, то можешь обращаться напрямую к функциям, как к любым другим. Если с dll шёл header-файл (*.h) то подключи и его (#include "filename.h") Это на тот случай, если там используются классы и т.д.
нужно ли мне писать
#include "a.lib"?
a.lib - это тот который получился с помощью coff2omf
или что-то другое мне надо инклудить, потосму что иначе получается:
[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'DSE_Alloc' - а функа эта там есть в длл...
нужно ли мне писать
#include "a.lib"?
a.lib - это тот который получился с помощью coff2omf
или что-то другое мне надо инклудить, потосму что иначе получается:
[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'DSE_Alloc' - а функа эта там есть в длл...
Ирочка не #include "a.lib" , а #include "a.h", если у Вас такой файл присутствует. Если нет. То сделайте его и занесите в него строку типа
//где type - тип возвращаемого функцией значения
// param1 - описание 1-го параметра
// ....
// paramn - описание n-го параметра
ЗЫ: А почему бы Вам не воспользоваться функцией LoadLibrary("a.dll"); в runtime?
IMHO type library это lib-файл.
Или кто-то тупит, или здесь уже зеленые человечки...
Type library - это TLB, а не DLL.
Или кто-то тупит, или здесь уже зеленые человечки...
Type library - это TLB, а не DLL.
И то и другое. Один зеленый человечик есть(BioUnit). На счет второго, где ты вычитал, что type library это dll???
И то и другое. Один зеленый человечик есть(BioUnit). На счет второго, где ты вычитал, что type library это dll???
Хы, точно зеленые человечки. Хотя...
На работе разрешение маленькое, вот и приходится пользовать масштабирование в сторону уменьшения. А в нем что dll, что lib - палки перед глазами. Или зеленые человечки...
Хы, точно зеленые человечки. Хотя...
На работе разрешение маленькое, вот и приходится пользовать масштабирование в сторону уменьшения. А в нем что dll, что lib - палки перед глазами. Или зеленые человечки...
Это цвет не совсем удачный. Контрастность маленькая.
Это цвет не совсем удачный. Контрастность маленькая.
Тема уже обсуждалась. Все путем.
Работать надо меньше, и за хорошим монитором сидеть, чтобы перед глазами зеленые человечки не прыгали.
Тема уже обсуждалась. Все путем.
Работать надо меньше, и за хорошим монитором сидеть, чтобы перед глазами зеленые человечки не прыгали.
SyncMaster 1200 NF (22"). Дисплею меньше года, но этот сайт показывает, как бы был выгоревшим. Ладно, по Web я не спец., так что пусть будет: цвета сайта подобраны, согласно советам офтальмологов.
SyncMaster 1200 NF (22").
Блин, так я про себя больше. Кто сглупил? Увидел, блин, чего не было!
Самое интересное, что цветовую гамму я нормально воспринимаю, а вот разрешения не хватает. Вот дома все нормально. Пойду-ка домой.
Ирочка не #include "a.lib" , а #include "a.h", если у Вас такой файл присутствует. Если нет. То сделайте его и занесите в него строку типа
//где type - тип возвращаемого функцией значения
// param1 - описание 1-го параметра
// ....
// paramn - описание n-го параметра
сделала такой файл, а билдер в ответ:
[Linker Error] Unresolved external 'DSE_Alloc(void * *)' referenced from E:\IRA\UNIT1.OBJ
ЗЫ: А почему бы Вам не воспользоваться функцией LoadLibrary("a.dll"); в runtime?
и еще:
а можно подробнее. на тему runtime:D
и еще:
а можно подробнее. на тему runtime:D
Как вижу ты уже падаешь от смеха...
Ф-ия DSE_Alloc неправильно описана, поэтому линкер его ненаходит. При runtime, тоже нужно описать прототип ф-ии. Кроме этого, с runtime намного больше морок.
Как вижу ты уже падаешь от смеха...
Ф-ия DSE_Alloc неправильно описана, поэтому линкер его ненаходит. При runtime, тоже нужно описать прототип ф-ии. Кроме этого, с runtime намного больше морок.
да уж... и смех этот истерический...
блин, а где же мнге взять все эти описания всех функций?
Ты где взяла эту DLL? Почему ты решила её использовать? Есть ли некое описание этой библиотеки? Был ли в поставке с DLL заголовочный файл (*.h)? Неужели ты решила использовать этот файл только потому что он тебе понравился по дампу :) Скорее всего именна этих ф-ий уже где-то прописаны, если нет, ещё раз подумай, какие ф-ии ты собираешься импользовать и пропиши их прототипы (т.е. описание), причём это необязательно делать в заголовочном файле (*.h). Вообщем проведи анализ и постарайся найти решение задачи на основе результатов.
блин, а где же мнге взять все эти описания всех функций?
Можно скачать утилиту http://www.gold-software.com/NeuronPEDisassembler-file7790.html
Запустить PEDisassembler.exe.
Открыть нужный DLL в виде View Detached (правая кнопка мыши-попуп меню).
В новом окне активизировать страницу Objects.
И на дереве выбрать Code->Function Statistics->Exports
На Exports щелкнуть правой мышкой. Из popup меню выбрать View as Text.
В новом окне снова щелчек с правой мышкой и выбрать Save as...
Ты где взяла эту DLL? Почему ты решила её использовать? Есть ли некое описание этой библиотеки? Был ли в поставке с DLL заголовочный файл (*.h)? Неужели ты решила использовать этот файл только потому что он тебе понравился по дампу :) Скорее всего именна этих ф-ий уже где-то прописаны, если нет, ещё раз подумай, какие ф-ии ты собираешься импользовать и пропиши их прототипы (т.е. описание), причём это необязательно делать в заголовочном файле (*.h). Вообщем проведи анализ и постарайся найти решение задачи на основе результатов.
Сорри! запутала я вас. Нашла таки я этот .h...
но теперь не компилится: пишет
[C++ Error] dse_api.h(142): E2238 Multiple declaration for 'EXPORT'
на
RETCODE FAR PASCAL EXPORT DSE_Alloc(HDSECLNT *phClient);
Сорри! запутала я вас. Нашла таки я этот .h...
но теперь не компилится: пишет
[C++ Error] dse_api.h(142): E2238 Multiple declaration for 'EXPORT'
на
RETCODE FAR PASCAL EXPORT DSE_Alloc(HDSECLNT *phClient);
Наверно вручную созданный h файл остался. Нужно убрать тот #include
Сорри! запутала я вас. Нашла таки я этот .h...
но теперь не компилится: пишет
[C++ Error] dse_api.h(142): E2238 Multiple declaration for 'EXPORT'
на
RETCODE FAR PASCAL EXPORT DSE_Alloc(HDSECLNT *phClient);
Надеюсь ты уже убрала все то, что писала до этого, т.е. type DSE_Alloc(param1,...,paramn)
Возможно нужно определить как-нибудь константу
У меня подобные траблы, когда я работаю с mysqllib.dll Там при подключении mysql.h нужно указать __LCC__
#include "mysql.h"
Вобщем погляди найденый тобой *.h может там чё-нибудь в коментариях сказано.
Пардон за флуд, но кажется эта тема, близка к рекорду по количеству ответов за 1 времению Я зашёл проверить почту и офигел, когда увидел 20 писем на эту тему (подписался при отправке поста). Вот таки дела :)
В ЭТОМ ТЫ АБСОЛЮТНО ПРАВ.
проблема только в том, что я до сих пор не знаю чего он ругается...
буду думать дальше
#define EXPORT __declspec(dllexport)
теперь компилится, но когда пытаюсь запустить на выполнение опять:
[Linker Error] Unresolved external 'DSE_Alloc' referenced from E:\IRA\UNIT1.OBJ
да что за ерунда такая????????