![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DLL [D7]
ElectriC © (2007-03-20 02:02:00)Имеется Dll и, собственно, программа, к которой Dll подключается.
//----------------------------------------------
Код Dll:
...
function Res(i : byte) : PChar; stdcall;
begin
case i of
1 : Result := PChar(12345678901234567890);
2 : Result := PChar(123456789012345678);
end;
end;
...
exports
Res;
begin
end.
//-----------------------------------------------
Программа имеет компонент Edit : TEdit.
Код программы:
...
public
Res : function(i : byte) : PChar; stdcall;
...
Загрузка Dll и вызов функции;
...
Если Edit.Text := Res(1), то Edit.Text будет иметь вид: 12345678901234567890.
Если же Edit.Text := Res(2), то Edit.Text будет имет вид: 1234567890123456
+ добавляет пробел.
//-----------------------------------------------
Вопрос: Объяcните, пожалуйста, почему пропадает цифра 7 и 8, когда Edit.Text := Res(2)?
ElectriC (2007-03-20 17:58:00) [1]
> Проверь (только без искажений). Должно работать.
Ща проверим!
Loginov Dmitry (2007-03-20 17:38:00) [2][D7]: Все работает так, как и должно.
Код DLL
library ProjDll;
function Res(i : byte) : PChar; stdcall;
begin
case i of
1 : Result := PChar('12345678901234567890');
2 : Result := PChar('123456789012345678');
else
Result := nil;
end;
end;
exports
Res;
begin
end.
Код ЕХЕ
unit Unit_Exe;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function Res(i : byte) : PChar; stdcall; external 'ProjDll.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := Res(TButton(Sender).Tag); // У кнопок тэги равны 1 и 2 соответственно
end;
end.
Проверь (только без искажений). Должно работать.
ElectriC (2007-03-20 17:16:00) [3]
> Result := PChar('12345678901234567890');
Дак так я и возвращаю строку, просто в описании ошибки я не поставил '12345....'. Моя ошибка, признаю!
Всё равно, если так возвращаешь строку то
> что строки содержащие от 1 до 16 символом в Edit.Text отображаются
> нормально, но когда строка содержит от 1 до 17, 18, 19
> символов, то эти же символы удаляются и вместо них пишется
> строка, равная 16 символам, а 17, 18, 19 удаляются. Но
> строка от 1 до 20, 21... символов отображается нормально!
> Так в чём же дело? Почему именно 17, 18, 19 символы удаляются?
Сергей М. (2007-03-20 14:18:00) [4]
> ElectriC © (20.03.07 14:15) [50]
> Dll у меня возвращает строку, а не ЧИСЛО!
Врешь, причем нагло)
Result := PChar(12345678901234567890); //так ты возвращаешь именно число
Result := PChar( '12345678901234567890 '); //а вот такты возвратил бы именно строку
Ну детский сад прямо ! "Найди отличия" ..)..
ElectriC (2007-03-20 14:15:00) [5]
> Так вот DLL у тебя возвращает число
Dll у меня возвращает строку, а не ЧИСЛО!
P.S.
По себе не судят!
Сергей М. (2007-03-20 14:13:00) [6]
> ElectriC © (20.03.07 14:05) [48]
Нет ну ты, ей-богу, придурок) ..
> происходит та же причина
Галиматьища несусветная)
Причина неможет "происходить", происходит что-топо такой-то причине ! Т.е., то что произошло является следствием, имеющим некую причину, а не причиной !)
> возвращаю строку в своей программе
У тебя ДВЕ программы !
Одна - ЕХЕ, другая -DLL.
DLL возвращает что-то, а EXE принимает возвращаемое.
Так вот DLL у тебя возвращает число, а EXE с какого-то перепугу интерпретирует то, что она приняла из DLL, как строку.
Дурь ведь !
ElectriC (2007-03-20 14:05:00) [7]
> Ну так и какого же хрена ты возвращаешь число, а не строку,
> коль речь ведешь именно о строках ?
Так я и возвращаю строку в своей программе, но происходит та же причина,
описанная выше!!!!
Сергей М. (2007-03-20 14:02:00) [8]
> ElectriC © (20.03.07 13:58) [46]
Ну так и какого же хрена ты возвращаешь число, а не строку, коль речь ведешь именно о строках?
ElectriC (2007-03-20 13:58:00) [9]
> Тебе был задан вопрос - ЧЕМ, по-твоему, отличается
PChar(123456789012345678) - число
от
PChar('123456789012345678') - строка
Ты сам на него ответил))(см. Выше):)))
Сергей М. (2007-03-20 13:44:00) [10]
> ElectriC © (20.03.07 13:40) [44]
Ты русский язык вообще понимаешь ?)
Тебе был задан вопрос - ЧЕМ, по-твоему, отличается
PChar(123456789012345678)
от
PChar( '123456789012345678 ')
Соблаговоли уж ответить на него, прежде чем рассуждать о превратностях судьбы)
ElectriC (2007-03-20 13:40:00) [11]
> Ты на вопрос не ответил) ..
> Никаких "строк с числом" ты не приводил, ты привел число, а не строку с чем-то там)
Да причём тут это?
Объясни, почему возникает данная причина(уже какой раз пишу)
> что строки содержащие от 1 до 16 символом в Edit.Textотображаются
> нормально, но когда строка содержит от 1 до 17, 18, 19 символов,
> то эти же символы удаляются и вместо них пишется строка,
> равная 16 символам, а 17, 18, 19 удаляются. Но строка от
> 1 до 20, 21... символов отображается нормально! Так в чём
> же дело? Почему именно 17, 18, 19 символы удаляются?
А ты пишешь, что я "на вопрос не ответил"! Причём тут это!
Сергей М. (2007-03-20 13:25:00) [12]
> ElectriC © (20.03.07 13:04) [42]
> Так, всё равно, с любой строкой происходит такая причина
Ты на вопрос не ответил) ..
> строку с числом я привёл ради наглядного примера
Никаких "строк с числом" ты не приводил, ты привел число, а не строку с чем-то там)
ElectriC (2007-03-20 13:04:00) [13]
> Разницу осюсяешь ?
Так, всё равно, с любой строкой происходит такая причина
> что строки содержащие от 1 до 16 символом
> в Edit.Textотображаются нормально, но когда строка содержит
> от 1 до 17, 18, 19 символов, то эти же символы удаляются
> и вместо них пишется строка, равная 16 символам, а 17, 18,
> 19 удаляются. Но строка от 1 до 20, 21... символов отображается
> нормально! Так в чём же дело? Почему именно 17, 18, 19 символы
> удаляются?
А строку с числом я привёл ради наглядного примера, чтоли!
Сергей М. (2007-03-20 12:54:00) [14]
> ElectriC © (20.03.07 12:45) [40]
123456789012345678 - это не строка, это число.
Строка - это '123456789012345678 '
Разницу осюсяешь ?
ElectriC (2007-03-20 12:45:00) [15]Так причина в том, что строки содержащие от 1 до 16 символом в Edit.Text
отображаются нормально, но когда строка содержит от 1 до 17, 18, 19 символов, то эти же символы удаляются и вместо них пишется строка, равная 16 символам, а 17, 18, 19 удаляются. Но строка от 1 до 20, 21... символов отображается нормально! Так в чём же дело? Почему именно 17, 18, 19 символы удаляются?
SlymRO (2007-03-20 10:27:00) [16]Вот-вот... конвертация тебя и сгубила... еслиб сразу ей стринг подсунул, может ошибку бы и не увидел...
Kedge (2007-03-20 09:02:00) [17]> [37] Сергей М. © (20.03.07 08:58)
Спасибо.
Сергей М. (2007-03-20 08:58:00) [18]
> Kedge © (20.03.07 08:51) [36]
Очевидно, BDS поддерживает объявление/использование 64-разрядных ц/ч констант.
Kedge (2007-03-20 08:51:00) [19]> [35] Сергей М. © (20.03.07 08:48)
>Вот и ищи отличия Д7 от BDS 2006)
Поясни, в чем могут быть отличия ? Не в "размере" же integer.
Сергей М. (2007-03-20 08:48:00) [20]
> BDS 2006 - компилится.
Вот и ищи отличия Д7 от BDS 2006)