Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 6

Автор: Grande
Дата сообщения: 20.03.2012 10:05
Имеется в виду, что память следует выделять для каждого поля или сразу для всего типа Record?
P.S. Для всего типа выделил.
Автор: akaGM
Дата сообщения: 20.03.2012 10:14
Grande
для каждого из полей

Цитата:
type
TParams = record
Answer1, Answer2, Answer3, Answer4: PChar;
IniString1, IniString2, IniString3, IniString4: PChar;
Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
end;

var
Parameters: TParams;
при таком описании у тебя каждое поле -- это указатель на строку, т.е. всего 4 байта (для Вин32)
тебе надо делать что-то типа:

Parameters.Answer1 := StrNew('не хочу температуру в Антарктиде :) ');


я уже затрахался спрашивать:

как ты вызываешь getCode()?
Автор: Grande
Дата сообщения: 20.03.2012 10:20

Цитата:
как ты вызываешь getCode()?


Так я ж написал: Answer := GetCode(@Parameters);

Или я не понял вопроса?
Автор: akaGM
Дата сообщения: 20.03.2012 10:22
Grande
я тоже написал:

Цитата:
function GetCode(Parameters: TParams): PCodes;
...
var
Parameters: TParams;
...
Answer := GetCode(@Parameters);

опять ведь фигню написал :)

это неправильный вызов, попробуй скомпилируй...
Автор: Grande
Дата сообщения: 20.03.2012 10:26
Компилится...
Что-то у меня уже ум за разум заходит
Автор: akaGM
Дата сообщения: 20.03.2012 10:59
Grande
Код: function GetCode(Parameters: TParams): PCodes;
begin
...
end;

var
Parameters: TParams;
begin
...
Answer := GetCode(@Parameters);
...
Автор: Grande
Дата сообщения: 20.03.2012 11:11
Мда... Лохонулся. Вызываю-то так: Answer := GetCode(Parameters);
А написал по-другому. Прошу прощения.
P.S. А с написанным мной ранее вызовом, ессно, не компилится
Автор: akaGM
Дата сообщения: 20.03.2012 11:13
Grande
короче...
надо делать как-то так:
Код: type
TParams = record
Answer1, Answer2, Answer3, Answer4: PChar;
IniString1, IniString2, IniString3, IniString4: PChar;
Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
end;

function GetCode(Parameters: TParams): PCodes;
begin
ShowMessage(Parameters.Answer1);
ShowMessage(Parameters.Answer2);
ShowMessage(Parameters.Answer3);
ShowMessage(Parameters.Answer4);
end;

var
Parameters: TParams;
begin
Parameters.Answer1 := StrNew('abc');
Parameters.Answer2 := StrNew('123');
Parameters.Answer3 := StrNew('98765');
Parameters.Answer4 := StrAlloc(6);
StrPCopy(Parameters.Answer4, '12345');

GetCode(Parameters); // правильно
// GetCode(@Parameters); //неправильно

end.
Автор: alfa246
Дата сообщения: 20.03.2012 11:49
Добрый день. Сегодня получил первое домашнее задание по Делфям.
Задание таково: Написать программу, которая будет отправлять по интернету текст из TextBox любым способом. То есть, удаленно присылать мне текст. В голове 2 варианта либо снифер, либо php в текстовый файл на сервере.
Простите за плохое объяснение проблемы. Жду ваших советов.
Автор: Man_Without_Face
Дата сообщения: 20.03.2012 11:55
alfa246
Через веб-сервис можно быстро и просто сделать, почитай статейку:
delphiplus.org/articles/delphi/soap_it_is_easy/index.html
Автор: HiDsHoT
Дата сообщения: 20.03.2012 12:05
[more] 1 вопрос)
как сделать чтобы при заполнении едитов после нажатии кнопки у меня эта информация забивалась в БД аксес??

with ADODataSet1 do
begin
ADODataSet1.Active:=False;
ADODataSet1.CommandType:=cmdText;
ADODataSet1.CommandText:='INSERT INTO qwerty(LOGIN,PASSWORD) values ('+Edit1.Text+','+Edit2.Text+')';
ADODataSet1.Parameters.ParamByName('LOGIN').Value:=Edit1.Text;
ADODataSet1.Parameters.ParamByName('PASSWORD').Value:=Edit2.Text;
ADODataSet1.Active:=True;

выводит неправильный синтаксис insert into

2 вопрос)

как сделать в делфи,чтобы сравнивал значения едитов??

if
Edit1.Text<>Edit2.Text
then begin
label1.Visible:=True;

end else begin
Form3.Visible:=True;
Form2.Show;
end;

работает только label1.visible:=true
а вторая часть не хочет.. [/more]
Автор: akaGM
Дата сообщения: 20.03.2012 12:54
HiDsHoT
вместо
if (Edit1.Text<>Edit2.Text)

if (CompareStr(Edit1.Text, Edit2.Text) <> 0)
Автор: Grande
Дата сообщения: 20.03.2012 12:56
akaGM


Цитата:
function GetCode(Parameters: TParams): PCodes;
begin
ShowMessage(Parameters.Answer1);
ShowMessage(Parameters.Answer2);
ShowMessage(Parameters.Answer3);
ShowMessage(Parameters.Answer4);
end;


Что-то не то:

ShowMessage(Parameters.Answer1); показывает фазу луны в Буркина Фасо
ShowMessage(Parameters.Answer2); Показывает Answer1
ShowMessage(Parameters.Answer3); Показывает Answer2
ShowMessage(Parameters.Answer4); Показывает Answer3

Answer4 пропал
Автор: Frodo_Torbins
Дата сообщения: 20.03.2012 13:10
alfa246
Если TextBox находится на форме самой программы, то способов милион, начиная с низкоуровневого использования сокетов. Весь вопрос в том, чего ждет принимающая сторона.

Grande
А в каких версиях делфей скомпилены длл и экзе?

HiDsHoTExecSQL
Значит во время выполнения этого кода значения эдитов всегда разные.
Автор: akaGM
Дата сообщения: 20.03.2012 13:10
Grande
а что ты делаешь с Ансверами _до_ вызова getcode()?

showmessage вообще-то принимает string, может тебе надо делать так:

showmessage(string(Params.Answer1));
или так
showmessage(StrPas(Params.Answer1));

и вообще...
давай весь код, я тоже хочу знать погоду в экзотических странах :)
Автор: Grande
Дата сообщения: 20.03.2012 13:26
akaGM
Вызывающая протграмма:

Код:
Parameters.Answer1 := StrNew(PChar('Первый'));
Parameters.Answer2 := StrNew(PChar('ВТОРОЙ'));
Parameters.Answer3 := StrNew(PChar('ТРЕТИЙ!!!'));
Parameters.Answer4 := StrNew(PChar('ЧЕТВЕРТЫЙ'));

GetCode(Parameters); // правильно
Автор: akaGM
Дата сообщения: 20.03.2012 13:36
Grande
я тоже...

ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + string(Parameters.Answer1));
или
ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + StrPas(Parameters.Answer1));

а так?

Добавлено:
кстати, это ничего не значит...
ты можешь косячить совершенно в другом месте, например c перменными ptr1, ptr2

var
ptr1: pointer;
Parameters: TParams;
ptr2: pointer;
Автор: Grande
Дата сообщения: 20.03.2012 13:57
akaGM
Та же песня.
Причем

Код:
Parameters.Answer1 := StrNew(PChar('Первый'));
Parameters.Answer2 := StrNew(PChar('ВТОРОЙ'));
Parameters.Answer3 := StrNew(PChar('ТРЕТИЙ!!!'));
Parameters.Answer4 := StrNew(PChar('ЧЕТВЕРТЫЙ'));

ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer1);
ShowMessage('ЭТО ВТОРОЙ ПАРАМЕТР' + #13#10 + Parameters.Answer2);
ShowMessage('ЭТО ТРЕТИЙ ПАРАМЕТР' + #13#10 + Parameters.Answer3);
ShowMessage('ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer4);
Автор: akaGM
Дата сообщения: 20.03.2012 14:01
Grande
в смысле, без ДЛЛ? тогда давай код ДЛЛ...

а на фиг тебе вообще PChar?
ты интенсивно АПИ в ДЛЛ-ке используешь что ли? почему бы не обойтись рабоче-крестьянскими строками?

Добавлено:
ещё пропиши везде для порядка

TParams = packed record
Answer1, Answer2, Answer3, Answer4: PChar;
IniString1, IniString2, IniString3, IniString4: PChar;
Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
end;
Автор: Grande
Дата сообщения: 20.03.2012 14:09
akaGM

Код:
library GetFaultCode;

uses
FastMM4, Classes, Messages, winsock2, Dialogs, SysUtils, Windows, Forms;

type
TParams = record
Answer1, Answer2, Answer3, Answer4: PChar;
IniString1, IniString2, IniString3, IniString4: PChar;
Frame, IP_Address, BSCPort, MO, FaultNo: PChar;
end;

type
TCodes = record
Codes, Units: PChar;
end;

{$R *.res}

function GetCode(Parameters: TParams): PCodes; stdcall;
begin
ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + StrPas(Parameters.Answer1));
ShowMessage('ЭТО ПЕРВЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer1);
ShowMessage('ЭТО ВТОРОЙ ПАРАМЕТР' + #13#10 + Parameters.Answer2);
ShowMessage('ЭТО ТРЕТИЙ ПАРАМЕТР' + #13#10 + Parameters.Answer3);
ShowMessage('ЭТО ЧЕТВЕРТЫЙ ПАРАМЕТР' + #13#10 + Parameters.Answer4);

Exit;
end;

exports GetCode;

begin

end.
Автор: akaGM
Дата сообщения: 20.03.2012 14:16
Grande
:)
а собирается она той же версией (какой?), что и вызывающая (ты не ответил Frodo_Torbins)

Добавлено:
О! у меня тоже сломалась как и у тебя...

я забыл stdcall в ведущей программе написать...
function GetCode(Parameters: TParams): PCodes; stdcall; external 'GetFaultCode.dll';
Автор: Grande
Дата сообщения: 20.03.2012 14:52
Frodo_Torbins
В D7 оба.

В вызывающей проге:

Код:
type
TGetCode = function(Parameters: TParams): PCodes; stdcall;
Автор: akaGM
Дата сообщения: 20.03.2012 15:29
ни хрена не понятно, но если работает, то ну и ладно...
Автор: delover
Дата сообщения: 20.03.2012 20:07
akaGM
Не бурчи старый пень.

Добавлено:
Иаче взыщем сумму
Автор: Sergey1970
Дата сообщения: 21.03.2012 21:29
Подскажите возможно ли автоматизировать процедуру "Update Localized Projects" в Delphi XE (XE2)?
Автор: akaGM
Дата сообщения: 22.03.2012 17:32
delover
не 3.14зди...
Автор: delover
Дата сообщения: 22.03.2012 20:04
akaGM
Это по смете а то текучке 0 рублей плюс уважуха.
Автор: Aleksandr N
Дата сообщения: 22.03.2012 20:20
Подскажите, сам что-то не соображу.
Есть некая функция, входным параметром которой является array of Byte, а я хочу ей скормить либо Char, либо string.
Как перевести Char или string в array of Byte?

Спасибо.
Автор: akaGM
Дата сообщения: 22.03.2012 20:45
Aleksandr N
Код:
b: array of byte;
s: string;
c: array of char;

for i := 1 to lenght(s) do
b[i-1] := byte(s[i]);

for i := 0 to lenght(c)-1 do
b[i] := byte(c[i]);
Автор: Aleksandr N
Дата сообщения: 22.03.2012 20:47
akaGM
Точно, я сегодня перегрелся...
Спасибо.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.