![]() |
Модераторы: 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 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "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. |