Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-98910
DimaK
2003-08-06 13:26
2003.10.30
Перезагрузка


1-98626
Delph
2003-10-21 16:23
2003.10.30
PopupMenu


4-98920
SH
2003-08-26 17:34
2003.10.30
TMemo - цветные строки и слова


14-98796
Jek
2003-10-11 10:43
2003.10.30
Вспомним студенчество


3-98522
Nummer
2003-10-09 03:12
2003.10.30
допотопный SQL..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский