Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

как из 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
8-98746
maksyaha
2003-06-25 00:14
2003.10.30
Как можно сделать форму полупрозрачной и возможно ли это вообще?


14-98792
Dimka Maslov
2003-10-13 13:07
2003.10.30
Политика


1-98653
Virus
2003-10-17 08:23
2003.10.30
Как обоити все компоненты


14-98791
Zn
2003-10-13 15:50
2003.10.30
Как подключить quikview в Office 2000?


1-98685
Term
2003-10-21 12:04
2003.10.30
Как определить имя компьютера?