Сейчас на форуме: zds (+6 невидимых)

 eXeL@B —› Программирование —› Подключение чужой DLL к моей программе.
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 мая 2014 20:51 · Поправил: Oxigenion
· Личное сообщение · #1

Здравствуйте!
Имеется .dll известной программы , в целях конфиденциальности не буду оглашать её название, а просто обойдусь тем, что "ну есть такая вот .dll" .
Нужно вытащить от-туда несколько функций и подключить к моей программе (работаю в Delphi).

И так , описываю : Чтобы вытащить экспортируемые функции , пользуюсь спец.утилитой входящей в состав дельфи , либо CFF Exolorer . Ну вытащил, а как подключить? Там вот такое чудо


Во-первый возникает вопрос , что такое QObject,вопросы,собаки и т.д. ?
Что это всё значит и как вообще правильно подключать это всё дело?

Во - вторых:
Вот функции например:

Пытался так (хотя параметров не знаю. угу чтобы их вытащить надо дизассемблить, чего я не умею):


var
dll : THandle;
see : procedure ();stdcall;
begin
@see:=nil;
dll:=LoadLibrary('xName.dll');
if dll<>0 then
begin
@see:=GetProcAddress(dll,'Полное имя функции , как в прошлой картинке');
if @see<>nil then
begin
see();
end else
begin
ShowMessage('NotSearchFunc');
exit;
end;
end else
begin
ShowMessage('Nothing');
exit;
end;
end;


Думаю и это не правильно. И вот что получается :




Помогайте ребят. Надеюсь всё более менее понятно.




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 03 мая 2014 21:06
· Личное сообщение · #2

> Чтобы вытащить экспортируемые функции , пользуюсь спец.утилитой входящей в состав дельфи

Чтобы ребидить процедуры нужен ARCE инструмент, типо иды, да и в общем он не поможет. Мотора не существует, это делается вручную. Есно если вы русский язык знаете лучше чем асм, то никто вам не поможет ничем.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 03 мая 2014 21:46 · Поправил: F_a_u_s_t
· Личное сообщение · #3

Oxigenion пишет: Помогайте ребят. Надеюсь всё более менее понятно.
В чем помогать?
QObject является классом, собственно гугл об этом знает.
Код корректен, если речь о декорации функций, то да, так и записывать со всеми собаками, вопросами и закорючками, параметры функции никто за вас искать не будет.
Топик бредовый.
ADD:
За вас погуглил, читайте



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 мая 2014 23:54
· Личное сообщение · #4

Нет , нет. Ни в коем случае , я не хотел чтобы вы за меня искали параметры. Просто я уже битый второй месяц маюсь, как же вызвать эту функцию так чтобы она работала. У знакомого получилось, но он не делится со мной.
Ну вот подключил я .dll и вызвал функцию , как на скриншоте выше, а там чудо ошибка. Как же быть? Из-за чего она так? И да, если уж затронули тему с параметрами, нет, и еще раз нет, не ищете за меня, просто помогите мне , направьте на путь , как же искать (вытаскивать) эти самые параметры?
Уж очень нужно мне использовать эти функции.



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 04 мая 2014 00:03
· Личное сообщение · #5

Oxigenion пишет:
Нет , нет. Ни в коем случае , я не хотел чтобы вы за меня искали параметры. Просто я уже битый второй месяц маюсь, как же вызвать эту функцию так чтобы она работала

я могу только посоветовать ещё месяцев 15-18 наугад побиться, если лень в отладчике покопаться




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 04 мая 2014 01:04
· Личное сообщение · #6

--> Qt - sdk <--

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 04 мая 2014 01:47 · Поправил: F_a_u_s_t
· Личное сообщение · #7

Oxigenion пишет: Просто я уже битый второй месяц маюсь, как же вызвать эту функцию так чтобы она работала
Дружище пойми правильно, здесь не против помочь, но ты дал ровным счетом - ничего, если библиотека аналогична QT, то в delphi вызов будет аналогичен вызову любого другого метода ( члена класса ) из плюсов.
Смотри wrapper любой c++ библиотеки ( которая экспортирует методы ) для delphi и делай по образу и подобию.
Если бы привел прототипы, то перевел бы в delphi если конечно не сильно толсто.
Ну а так, еще одна ссылка
Вызов функции <> вызов метода класса.
Самый простой для вас вариант это сишная обертка, пишите что то типа этого:
type foo( param value )
{
class_example example;
bla bla bla
return result;
}
И уже это используйте в delphi.




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 04 мая 2014 01:53
· Личное сообщение · #8


Нужно вытащить от-туда несколько функций и подключить к моей программе (работаю в Delphi).


Функции принимают в качестве параметров стандартные классы QT: QByteArray,QTimeLine и QFile
Поэтому скорее всего на дельфи у Вас не получится ничего сделать.
Берите QT версии 5.1

-----
http://ntinfo.biz




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 04 мая 2014 01:57
· Личное сообщение · #9

hors пишет: Поэтому скорее всего на дельфи у Вас не получится ничего сделать.
Получится, но враппер будет толстый, знакомый вполне себе юзал QT в delphi, а мну юзал bpl в MS, но это не рационально.




Ранг: 136.0 (ветеран), 360thx
Активность: 0.270.14
Статус: Участник
Qt Developer

Создано: 04 мая 2014 02:37 · Поправил: Модератор
· Личное сообщение · #10

SetEncodedUrl и SetEncodedUserName похожи на соответствующие функции из QUrl

void QUrl::setEncodedUrl ( const QByteArray & encodedUrl, ParsingMode parsingMode )
Constructs a URL by parsing the contents of encodedUrl using the given parsingMode.

void QUrl::setEncodedUserName ( const QByteArray & userName )
Sets the URL's user name to the percent-encoded userName. The userName is part of the user info element in the authority of the URL, as described in setUserInfo().
Note: this function does not verify that userName is properly encoded. It is the caller's responsibility to ensure that the any delimiters (such as colons or slashes) are properly encoded.


-----
http://ntinfo.biz




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 мая 2014 04:29 · Поправил: Oxigenion
· Личное сообщение · #11

Нет, ребят, QT не во всех функциях, это же просто пример. Завтра сюда скину, то что мне конкретно нужно выдернуть,вроде бы там без QT ( сейчас хочу дико спать , 7.30 как-никак).... Спасибо



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 04 мая 2014 04:34
· Личное сообщение · #12

Oxigenion пишет: Нет, ребят, QT не во всех функциях

Это не имеет значения, если с++ методы то они в принципе одинаково враппятся, если же функция крашится, то значит что то не але с параметрами.



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 мая 2014 08:07 · Поправил: MNV
· Личное сообщение · #13

setEndFrame это метод класса QTimeLine, setUser это метод класса QAuthenticator.

http://qt-project.org/doc/qt-4.8/qauthenticator.html

Сильно подозреваю, что хрен оно заработает без наличия экземпляра QApplication, как и большинство классов в Qt. Решается написанием враппера на Qt, в котором делается экземпляр QApplication и плоский интерфейс к нужному объекту.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 07 мая 2014 02:19 · Поправил: F_a_u_s_t
· Личное сообщение · #14

MNV пишет: Сильно подозреваю, что хрен оно заработает без наличия экземпляра QApplication

В FPC этот класс уже запилили, тут была ссылка на враппер, но выпили...
Хотя по поводу враппера на QT с вами согласен, это рациональнее и проще, чем извращаться на delphi.


 eXeL@B —› Программирование —› Подключение чужой DLL к моей программе.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати