Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Внизкак из dll передать строку в приложение ? Найти похожие ветки
← →
dream (2003-10-17 08:19) [0]работа с переменной integer не вызывает проблем делаю так :
Exe :
procedure redaktor(var itog:integer;); stdcall; external "proga.dll";
redaktor(itog);
if itog = 1 then
...
----------------------
dll :
procedure redaktor_pas(var itog:integer); stdcall; export;
var form: TForm_redaktor;
begin
form := TForm_redaktor.Create(nil);
form.ShowModal;
if form.itogs.Caption = "1" then begin
itog:=1;
end;
form.Free;
end;
Работает нормально , но если сделать переменую не integer а string чтобы передавать строки то программа работает с ошибками , то есть не передаёт строки или передаёт но не то что посылает dll а чёрти что . Кто работал с этим подскажите простой и работающий пример , всё что нужно это только передать из dll в приложение 2-3 строки
← →
HolACost! (2003-10-17 08:21) [1]uses Sharemem;
← →
dream (2003-10-17 08:25) [2]> HolACost!
Да у меня нет в uses Sharemem , но я не уверен что при её подключении всё бедет работать как надо так как я уже пробывал подключать этот модуль то толку от этого вышло мало :( может я не правельно испотльзовал функции Sharemem ? если не трудно привидите пример получения строк из dll
← →
Hogo (2003-10-17 08:32) [3]А если передавать строки с указанной максимальной длинной?
var s: string[255];
← →
dream (2003-10-17 08:38) [4]> Hogo
Не пойдёт всё равно в конце строки дописываються сами собой какието кубики или что то типа такого ©їЇ
:(
← →
Hogo (2003-10-17 08:45) [5]а если создать
type mystr: string[50];
...
var s: mystr;
и в dll
type mystr: string[50];
...
var s: mystr;
← →
KSergey (2003-10-17 08:56) [6]Когда вы создаете пустой проект DLL, то среда автоматически вставляет огромный комментарий.
К стати, именно вашей проблеме посвященный. И про Sharemem, и про передачу строк.
А вообще-то, лучше передавать с DLL PChar на выделенный буфер нужного размера и размер этого буфера. Тогда этой DLL можно будет пользоваться не только из программ на delphi. Впрочем, лучше - только в свете означенного выше. Но это уже не плохо, согласитеть ;) Да, еще dll-ку какую-то носить не придется. Какую - см. в том же комментарии.
А еще где-то рядом точно такая же ветка есть. Правда про массивы динамические - но это один фиг.
← →
dream (2003-10-17 09:02) [7]спасибо всем ! разобрался , подключил Sharemem + pchar работает !!!
← →
KSergey (2003-10-17 09:22) [8]Вообще-то имеет смысл что-то одно: либо Sharemem - и тогда спокойно работаем со строками, либо pchar - и тогда вообще все здорово ;)
А все вместе - зачем? Т.е. можно, конечно, но смысл?
← →
Verg (2003-10-17 09:31) [9]
> dream (17.10.03 08:38) [4]
> > Hogo
>
> Не пойдёт всё равно в конце строки дописываються сами собой
> какието кубики или что то типа такого ©їЇ
>
> :(
Не верю.
С ShortString (String[]) все работает нормально.
Pchar - если 255 символов мало.
Но! Насчет ShareMem:
Таскать за собой BOLANDMM.dll - это как перспективка?
← →
Verg (2003-10-17 09:33) [10]Можно, кстати, врубить Build with runtime Packages во всех компонентах, включая dll-ки, но тогда за собой надо будет таскать bpl-ки, что ничуть не приятнее, чем BOLANDMM.
← →
mbob (2003-10-17 10:08) [11]> Verg
Приведи пример как получать данные из dll я что то не допру :(
← →
Verg (2003-10-17 10:13) [12]
> Приведи пример как получать данные из dll я что то не допру
> :(
А я чего-то не допру до чего ты не допираешь.
procedure getstring(var S : ShortString);stdcall; external "mylib.dll";
var S : shortsring;
getstring(S);
showmessage(S);
в DLL-ке mylib
procedure getstring(var S : ShortString);stdcall;
begin
S:="Это я - строка из DLL-ки";
end;
← →
mbob (2003-10-17 10:26) [13]> Verg
Всё теперь допёр :) Спасибо огромное
← →
dream (2003-10-17 10:34) [14]> Verg
Подскажи мне почему у меня не работает такой метод ?
EXE ----------
procedure redaktor_pas(var itog:integer;itog_pas,itog_login:ShortString); stdcall; external "proga.dll";
var
itog_pas,itog_login : ShortString;
begin
redaktor_pas(itog,itog_pas,itog_login);
if itog = 1 then begin
label22.Caption:=itog_login;
label23.Caption:=itog_pas;
...
DLL --------------
procedure redaktor_pas(var itog:integer; itog_pas,itog_login:ShortString); stdcall; export;
var form: TForm_redaktor_pas;
begin
form := TForm_redaktor_pas.Create(nil);
form.ShowModal;
if form.itogs.Caption = "1" then begin
itog_pas:=form.Edit2.text;
itog_login:=form.Edit1.text;
itog:=1;
end;
form.Free;
end;
???????????????????
vexf.cm уже 2 день с этой dll , на integer всё ништяк а на string .... :(
← →
dream (2003-10-17 10:38) [15]Выдаёт постоянно одно и то же значение хотя form.Edit2.text и form.Edit1.text изменяються !
← →
Verg (2003-10-17 10:57) [16]
> procedure redaktor_pas(var itog:integer;itog_pas,itog_login:ShortString);
> stdcall; external "proga.dll";
Вот подумай зачем ты написал var itog:integer?
Сможешь ответить внятно (лучше вслух скажи), тогда тебе и с остальным будет все понятно.
← →
Verg (2003-10-17 12:01) [17]
> mbob (17.10.03 10:26) [13]
> > Verg
>
> Всё теперь допёр :) Спасибо огромное
Ну вот, если допер, то не поленись, объясни dream его проблему,
← →
dream (2003-10-17 12:05) [18]> Verg
А если мне нежно чтобы в вызове dll были переменные integer и ShortString ? тогда как написать ?
И если не трудно подскажи почему вот как раз в этой функции появляеться форма из dll , в ней есть edit , и если попытаться поменять раскладку в этом edit"e то происходит исключение ... ?
← →
panov (2003-10-17 12:06) [19]>Verg
Таскать за собой BOLANDMM.dll - это как перспективка?
А что, 22к сильно напряжно с собой таскать?
← →
panov (2003-10-17 12:07) [20]Как уже было сказано, ShortString можно использовать совершенно спокойно без ShareMem.
255 байт (а такая длина ShortString) помещается в стек при передаче параметров без проблем.
← →
dream (2003-10-17 12:15) [21]я понял как работать с ShortString ,
я не понял как сделать чтобы в вызове dll были переменные integer и ShortString
и подскажите как быть с исключение м которое происходит когда переключаешь раскладку клавиатуры
← →
dream (2003-10-17 12:43) [22]Люди ау
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.04 c