Сейчас на форуме: hgdagon, asfa, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› Создание DLL
Посл.ответ Сообщение

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

Создано: 20 сентября 2006 06:50
· Личное сообщение · #1

Народ помогите пожалуйста сделать DLL, которая бы создавала диалог и по нажатию кнопки на нем, передавала бы строку введнную в TEdit (который тоже должен находится на диалоге длл)... Язык программирования ASM/Delphi.... На асме просто не знаю как сами DLL делать, а в дельфи пробывал так:
var
str:string;
begin
GetDlgItemText(Win,0,str,255);
Result:=str;
end;
//где win-идентификатор, 0-ид элемента
Выдавал ошибку на счет несовместимости типов str
тогда сделал
GetDlgItemText(Win,0,pchar(str),255);
но в этом случае строка почемуто приходила пустой.... Народ помогите очень надо...




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 20 сентября 2006 06:59
· Личное сообщение · #2

Кури мануалы, задача тривиальная...



Ранг: 103.1 (ветеран), 3thx
Активность: 0.070.01
Статус: Участник

Создано: 20 сентября 2006 07:38
· Личное сообщение · #3

Veliant
заведи массив из чаров

-----
Crack your mind, save the planet





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 сентября 2006 07:39
· Личное сообщение · #4

Veliant
А почему встроенные возможности Delphi не хочешь использовать, этот грёбаный GetDlgItemText, когда
можно тупо:

string_peremennay:=Edit1.Text;

И всё в ажуре, при большом желании можно такую процедуру и в чужие проги встроить, вешаешь эту фигню на кнопку - и всё

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 20 сентября 2006 07:46
· Личное сообщение · #5

ARCHANGEL пишет:
этот грёбаный GetDlgItemText


я вас попрошу нашу птичку не обижать (с) Матроскин



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

Создано: 20 сентября 2006 07:47 · Поправил: Veliant
· Личное сообщение · #6

ARCHANGEL пишет:
Veliant
А почему встроенные возможности Delphi не хочешь использовать, этот грёбаный GetDlgItemText, когда
можно тупо:

string_peremennay:=Edit1.Text;

И всё в ажуре, при большом желании можно такую процедуру и в чужие проги встроить, вешаешь эту фигню на кнопку - и всё

Этот вариант отпадает т.к. я сделал диалог из ресурсов =)

Asterix пишет:я вас попрошу нашу птичку не обижать (с) Матроскин
Это ты к чему




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 сентября 2006 07:52
· Личное сообщение · #7

Veliant
Этот вариант отпадает т.к. я сделал диалог из ресурсов =)
Дык...переделай, шутка, конечно, а вообще функция достаточно часто встречается, попробуй найти в какой-то проге, посмотри под отладчиком, как туда операторы грузятся, и продублируй на делфи ассемблерными вставками. Вот и вся наука - если сам не придумал, пусть кто-то думает

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 20 сентября 2006 08:18
· Личное сообщение · #8

ARCHANGEL пишет:
тот грёбаный GetDlgItemText, когда можно тупо:

Вот и пишут программисты потом тупо, не зная как оно работает на более низком уровне...

-----
Research is my purpose





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 20 сентября 2006 08:39
· Личное сообщение · #9

Error_Log
Ну и к чему тут был этот мега-комментарий:
Вот и пишут программисты потом тупо, не зная как оно работает на более низком уровне...

Чё там писать, просто в отладчике смотришь, что в каком виде загружается, что из памяти грузить можно, а что только оффсетом прямым и копируешь идею в свою прогу, а то, что программеры пишут тупо, так это вопрос спорный.

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 20 сентября 2006 08:50
· Личное сообщение · #10

Дык перепробывал все варианты и нифига не получается



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 20 сентября 2006 08:52 · Поправил: AlexZ
· Личное сообщение · #11

Тупые программеры пишут тупо, умные пишут умно, а разницы - никакой ;)
Veliant, id другой попробуй назначить вместо нуля.
или
asm
pushad
push 255
lea esi, str
push esi
push <id>
push Win
call GetDlgItemText
popad
end;
или как там его... GetDlgItemText(Win,0,ptr(str),255);

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 20 сентября 2006 09:02
· Личное сообщение · #12

Вопрос поставлен некорректно.
Неясно как ДЛЛ обязана создавать диалог, во время своей загрузки или содержать функцию создающую диалог, которую кто-то должен будет вызвать
Куда передавать строку, в рамках одного процесса или нет

думаю внести изменения чтоб нижеидущий код компилился в ДЛЛ не составит труда:
program KeyGen;
uses
Windows, Messages;
const
IDD_DIALOG_1 = 200;
IDC_EDIT1 = 103;
IDC_EDIT2 = 104;
MAINICON = 400;
var
buffer : array [1..$80] of byte;


function DlgProc(hDlg, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 1;
CASE uMsg OF
WM_INITDIALOG :
begin
SendMessage(hDlg, WM_SETICON, ICON_BIG,
LoadIcon(hInstance, PChar(MAINICON)));
SendMessage(hDlg, WM_SETICON, ICON_SMALL,
LoadImage(hInstance, PChar(MAINICON), IMAGE_ICON, 16, 16, 0));
end;
WM_COMMAND :
begin
if (LOWORD(wParam) = IDC_EDIT1) and (HIWORD(wParam) = EN_CHANGE) then
begin
GetDlgItemText(hDlg, IDC_EDIT1, ADDR(buffer), SizeOf(buffer));
SetDlgItemText(hDlg, IDC_EDIT2, ADDR(buffer));
end
else
Result := 0;
end;
WM_CLOSE : EndDialog(hDlg, 0);
ELSE
Result := 0;
end; {CASE}
end;

{$R KeyGen.res}
begin
DialogBoxParam(hInstance, PChar(IDD_DIALOG_1), 0, @DlgProc, 0);
end.




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 20 сентября 2006 09:03 · Поправил: Asterix
· Личное сообщение · #13

// KeyGen.RC
////////////////////////
#define IDD_DIALOG_1 200
#define IDC_EDIT1 103
#define IDC_EDIT2 104
#define IDC_GROUPBOX2 102
#define IDC_GROUPBOX1 101
#define MAINICON 400

IDD_DIALOG_1 DIALOGEX 0, 0, 113, 58
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "KeyGen"
FONT 8, "Tahoma", 400, 0
{
CONTROL "Serial Number", IDC_GROUPBOX1, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 3, 106, 23
CONTROL "Reg Number", IDC_GROUPBOX2, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 3, 31, 106, 23
CONTROL "Enter your serial number", IDC_EDIT1, "edit", ES_LEFT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 11, 96, 10, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE
CONTROL "", IDC_EDIT2, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 8, 39, 96, 10, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE
}

MAINICON ICON "KeyGen.ico"



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

Создано: 20 сентября 2006 09:07 · Поправил: mrJ
· Личное сообщение · #14

1. иногда еще глюки возникают из-за ptr(str) т.е. введи массив buf:array[0..max_path] of char (или pchar) непомню и используй его а не string; (но это иногда)
2. на счет id - уже сказали
3. почему ты 255 символов считываешь.... эт конечно не ошибка но можно и длинну текста посчитать GetWindowTextLength , ну это конечно необязательно...

добавлено:
упс)) немного опоздал



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

Создано: 20 сентября 2006 09:18
· Личное сообщение · #15

Всем ОГРОМЕННОЕ спасибо =) Тему можно закрыть)) Действительно используя массив все начало норма работать....Еще раз ГРАНД МЕРСИ




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 20 сентября 2006 12:57
· Личное сообщение · #16

mrJ пишет:
3. почему ты 255 символов считываешь.... эт конечно не ошибка но можно и длинну текста посчитать GetWindowTextLength , ну это конечно необязательно...

Это не чтение 255 символов, это переменная для получения строки длиной 255 байт, чтобы не было переполнения буфера. Функция прочитает НЕ БОЛЬШЕ, чем это число, даже если длина строки в едите больше

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
www.uinc.ru

Создано: 21 сентября 2006 07:39 · Поправил: DrGolova
· Личное сообщение · #17

> Действительно используя массив все начало норма работать.

Естесно А чтобы работало с типом string, надо наверно выделить память под строку с помошью Str.SetSize(или как там?) и только потом конвертить в PChar
А то поводились читать мато лого что в классы, так еще и не выделяя их, еще удивляются что не работате (хорошо что не падает с разрушением кучи




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 21 сентября 2006 11:41
· Личное сообщение · #18

Это ещё что. У меня одногруппы умудрялись delete [] Tmp; где Tmp - локальная переменная

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 21 сентября 2006 20:15
· Личное сообщение · #19

DrGolova один хер работать не будет, в делфе первый байт строки = длинне, а GetDlgItemText этого не знает!

-----
Yann Tiersen best and do not fuck





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 22 сентября 2006 00:39
· Личное сообщение · #20

PE_Kill
Да функции пофиг, ей важен только указатель на память правильный. Дальше проблемы будут у дельфей, когда вместо по-моему всё же 4 байт длины будут коды букв.

-----
Недостаточно только получить знания:надо найти им приложение



 eXeL@B —› Программирование —› Создание DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати