![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Гость_Frikazoid |
|
|||
Unregistered |
Доброго времени суток Господа!
Собственно сабж! есть http://www.scancode.ru/download/10/Downl/71/ Мне надо те ф-ии в Delphi использовать! Заранее спасибо за помощь! |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
ДЫк в чём проблема, все WINAPI на С написаны и импортируются без проблем...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
var-alex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.10.2003 Где: Коломна, MCK Репутация: 1 Всего: 1 |
Импотрируешь функции из него. Только описания надо верно перевести. И обязательно установить тип вызова stdcall для импортированных функций!
|
|||
|
||||
Dmitry V.Abramov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Если бы это было написано на C - подошел бы любой из предложенных тебе советов. Если бы это было писано на BCB - пришлось бы подумать, но, скорее всего, тоже удалось бы подключить. Но то, что у тебя там лежит, писано на VC++ с активным использованием MSVCRT.DLL и наружу торчат не функции, а классы и методы. В этом случае единственным вариантом видится написание на VC "посредника", преобразующего простые cdecl вызовы из Delphi в вызовы классов этой DLL. --------------------
/DVA |
|||
|
||||
Dmitry V.Abramov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Именно на С и потому без проблем. В вопросе же фигурирует DLL писанная на C++ и экспортирующая класс и его методы. --------------------
/DVA |
|||
|
||||
Гость_Frikazoid |
|
|||
Unregistered |
Не могли бы вы кинуть в меня чем ни будь откомпиленным или кусок кода? Я просто с С вааще никогда не работал!
|
|||
|
||||
var-alex |
|
||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 7.10.2003 Где: Коломна, MCK Репутация: 1 Всего: 1 |
Прошу извинения. Я не смотрел туда... У меня инет не резиновый, кончается иногда ![]() |
||||
|
|||||
Гость_Frikazoid |
|
|||
Unregistered |
Ну хоть что ни будь!
ПЛЗ! |
|||
|
||||
Гость_Frikazoid |
|
|||
Unregistered |
Ну, Господа, может скажите что я должен сделать?
Плиз! |
|||
|
||||
Dmitry V.Abramov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Разве не помогло? Что именно не получилось? --------------------
/DVA |
|||
|
||||
Гость_Frikazoid |
|
|||
Unregistered |
Вот это мешает! |
|||
|
||||
stab |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
сейчас я опишу свои соображения, которые, возможно, не совсем верны и не всегда будут работать
![]() Эксперименты будут проводиться с:
после того, как скомпиляли получили dll с такими функциями: ??0CDLLClass1@@QAE@HH@Z ??1CDLLClass1@@QAE@XZ ?GetF@CDLLClass1@@QAEHH@Z ?Inc@CDLLClass1@@QAEXHH@Z ??4CDLLClass1@@QAEAAV0@ABV0@@Z если это перевести в удобоваримую форму, то получим: CDLLClass1::CDLLClass1(int,int) CDLLClass1::~CDLLClass1(void) int CDLLClass1::GetF(int) void CDLLClass1::Inc(int,int) class CDLLClass1 & CDLLClass1::operator=(class CDLLClass1 const &) Последнюю процедуру мы не определяли, ее добавил компилер. Судя по всему она осуществляет копирование экземпляров класса байт к байту. Начнем с того, что попытаемся создать объект класса CDLLClass1. Объект в C++, так же как и в Delphi, просто область памяти, т.е. все что нам нужно это выделить нужное кол-во памяти и применить к ней конструктор. Если класс содержит виртуальные функции, то как-то надо еще помучиться с таблицой виртуальных функций, но мы обойдемся и без них. Размер объекта нашего класса 8 байт, т.к. два поля, каждое по 4 байта. Получаем:
Теперь надо вызвать конструктор. Все методы в C++, кроме методов с переменным числом параметров, используют thiscall соглашение о вызовах. thiscall -- это то же самое, что и stdcall только в ECX передается this (в Delphi-терминологии Self). Попытаемся это сделать:
Теперь вызовем методы Inc и GetF:
Я снова объявил obj как Pointer, для того, чтобы показать ненужность знаний о внутренней структуре объекта. И на конец вызовем деструктор и освободим память.
-------------------- 6, 6, 6 - the number of the beast. |
||||||||||
|
|||||||||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
теперь о вопросе этого топика
![]() список функций: ??0CCipher@@QAE@XZ ??4CCipher@@QAEAAV0@ABV0@@Z ?CheckComm@CCipher@@QAEHXZ ?ClearDatabase@CCipher@@QAEHH@Z ?CloseComm@CCipher@@QAEXXZ ?Finish@CCipher@@QAEHXZ ?GetCurrentState@CCipher@@QAEHPAD@Z ?GetDataCount@CCipher@@QAEJH@Z ?GetFreeMemory@CCipher@@QAEJXZ ?GetLastError@CCipher@@QAEHPAD@Z ?GetSerialNumber@CCipher@@QAEHPAD@Z ?GetTime@CCipher@@QAEHPAD@Z ?InitComm@CCipher@@AAEHXZ ?OpenComm@CCipher@@QAEHH@Z ?OpenComm@CCipher@@QAEHHH@Z ?OpenComm@CCipher@@QAEHHHH@Z ?OpenIrDA@CCipher@@AAEHXZ ?Ping@CCipher@@QAEHXZ ?PutRecord@CCipher@@QAEHHPBD@Z ?ReadRecord@CCipher@@QAEHHPAD@Z ?SendCommand@CCipher@@AAEHPBDPAD@Z ?SendData@CCipher@@AAEHPBD@Z ?TestIrDA@CCipher@@AAEHK@Z ?TimeDly@CCipher@@AAEXXZ ?UpdateTime@CCipher@@QAEHXZ CCipher::CCipher(void) class CCipher & CCipher::operator=(class CCipher const &) int CCipher::CheckComm(void) int CCipher::ClearDatabase(int) void CCipher::CloseComm(void) int CCipher::Finish(void) int CCipher::GetCurrentState(char *) long CCipher::GetDataCount(int) long CCipher::GetFreeMemory(void) int CCipher::GetLastError(char *) int CCipher::GetSerialNumber(char *) int CCipher::GetTime(char *) int CCipher::InitComm(void) int CCipher::OpenComm(int) int CCipher::OpenComm(int,int) int CCipher::OpenComm(int,int,int) int CCipher::OpenIrDA(void) int CCipher::Ping(void) int CCipher::PutRecord(int,char const *) int CCipher::ReadRecord(int,char *) int CCipher::SendCommand(char const *,char *) int CCipher::SendData(char const *) int CCipher::TestIrDA(unsigned long) void CCipher::TimeDly(void) int CCipher::UpdateTime(void) проблем быть, вроде, не должно ;) самое сложное определить размер объекта, тут два варианта: 1. В VC написать sizeof(CCipher) и посмотреть чему это равно. 2. Взять заведомо достаточный объем памяти. Вариант 1 конечно лучше. Frikazoid, если будут проблемы с конвертацией функций в delphi -- пиши, ну и вообще если будут проблемы -- пиши ![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
хм, sizeof(CCipher) = 1
![]()
приводит к "Unhandled exception at 0x10001100 (Cipher.dll) in app.exe: 0xC0000005: Access violation reading location 0x00000020." Обращение к любому методу приводит к эксепшенам. Похоже sizeof(CCipher) != 1 ![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Dmitry V.Abramov |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Хочется выказать уважение к проделанной работе, и оказать посильную помощь. Судя по коду оператора копирования
... величина этого Cipher'a равна $10*4=64 байта. --------------------
/DVA |
||||
|
|||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Dmitry V.Abramov, во! а я сидел думал, где бы это число нарыть
![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Простите за глупую встрячку. У меня вопросик по ходу. Можно ли в Дельфях использовать DLL'ки написанные на др. языках напрямую, не регистря их в виндах (т.е. не через OLE)?
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
Dmitry V.Abramov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
Можно. Если вызвать в начале работы DllRegisterServer из этой DLL, а в конце DllUnregisterServer.
--------------------
/DVA |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
Это что в самой DLL'ки прописано должно быть? Или оно вызывается перед использованием DLL
-------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
перед использованием.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: 2 Всего: 60 |
А примерчик использования можно? Я вот тут одну DLL'ку, фоксовскую, использовал, регистря ее с помощью REGSVR32.EXE, и все работало, а унинсталировал ее и попробовал зделать так
А он ругается и выдает except. Дельфийский хелп без примера, а методом проб и ошибок ковырятся не охота. Это сообщение отредактировал(а) Cashey - 15.10.2003, 10:30 -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
Cashey, поищи на форуме, был уже такой топик.
з.ы. и ваще это уже совсем другой вопрос ![]() ![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
Гость_Frikazoid |
|
|||
Unregistered |
А откомпиленный длл мона? просто ставить VC не охота! ПЛЗ!
|
|||
|
||||
Dmitry V.Abramov |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
--------------------
/DVA |
|||
|
||||
Гость_Frikazoid |
|
|||
Unregistered |
Так я за эту же тему! Мне нужен откомпиленный, промежуточный длл! Если можно плз! |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
выше описан способ как без промежуточных dll можно сделать...
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
cully, смутно верится, что можно так подключить...в этой либе нет проц. DLLRegisterServer
Frikazoid, тебе достаточно будет, что в библиотеке-заглушке используется жесткий экземпляр Ciphera? (т.е. при подключении заглушки будет создаваться один класс Cipher и др. создать будет низзя) Или тебе надо предусмотреть возможность создания нескольких классов (чуть сложнее)? Вот кстати заглушка с примером использования http://man2002ua.hotbox.ru/ciprar.exe.sfx Это сообщение отредактировал(а) man2002ua - 17.10.2003, 16:18 -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
man2002ua, а при чем тут DLLRegisterServer? ты повнимательней почитай топик
![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
cully, это ты про те куски асм. вставок? Способ, к-й предложил Dmitry V.Abramov вначале - IMHO самый простой и верный...
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
man2002ua, но мы же не ищем легких путей
![]() ![]() -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
Нифиговый эффективный путь
![]() ![]() Звините за оффтоп ![]() -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
Dmitry V.Abramov |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 30.9.2003 Где: Saint-Petersburg Репутация: 5 Всего: 4 |
man2002ua Так ведь у каждого своя эффективность. Например, у меня в радиусе 30 километров нет доступного VC++ -- зато есть дебаггер. У Гость_Frikazoid, похоже, вообще ничего нет кроме интернета...
А подтема DllRegisterServer была порождена вопросом:
И шуточным ответом:
в конце которого было позабыто ":)". --------------------
/DVA |
||||
|
|||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Вы себе представить не можите, что у меня под боком валяются: Pascal, Delphi, BC, VC, C++, Basik, VB, eVC, eVB (PHP, PERL
![]() -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
man2002ua Здоровенный санькс! Ща попробую!
-------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Протестил. Не работает!
![]() -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
А что говорит? У меня выдает сообщения типа "время ожидания истекло", но мне не на чем проверить...
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Говорит тоже самое! Я всякие позиции попробовал, никак!
Вообще, за всё время, что я работаю с RS-232 я не имел таких проблем. Готов уже разбить этот сканер! ![]() ЗЫ На Сканкоде есть ещё и длл писаная для 1С! Подозреваю, что это оле сервер! Может её мона отпользовать, а? Вот одним словом http://scancode.ru/catalog/153/ Всё что есть там! -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
"время истекло", значит функции работают правильно, иначе, как я понимаю - слетало бы что-либо...
А насчет оле-сервера - тут уже просто подключай его к делфи и пользуй. Если не получится - говори, попробую тоже ![]() -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Да я пробовал. Не получилось! Ерорами сыпался. Правда не слишком долго пытался.
-------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
А вот и нет! Он! на команды терминал отвечает какой-то пургой! То же самое происходило, когда я пытался сам всё сделать! -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
надо бы попробовать исп. эту библиотеку в программе написаной на VC++ и проверить, может ошибка в библиотеке...
Ты напиши последовательность функций, к-е надо вызывать - я сделаю пример на Си - запустишь и проверишь, если выдает тоже самое - ошибка в библиотеке или терминале ![]() -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
1) Инициализация ком порта
2) Ping ![]() Усё! Это сообщение отредактировал(а) Frikazoid - 27.10.2003, 19:17 -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Вот и . dll не работает! Скажу директору, пусть звонит к ним на контору и разбирается.
-------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
Frikazoid |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 29.3.2002 Репутация: 1 Всего: 2 |
Где есть хорошие доки по ком портам? А то у меня есть полный список параметров подключения стандартной проги к этому терминалу сканированной с помощью LGCOMSPY! А вот как это в код перевести не знаю!
Киньте в меня плз полным описанием по криейтфайлу со всеми пораметрами на ком порт, какие тока можгут быть! плиз! Санькс! -------------------- RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле! А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |