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

Вниз

Передать данные в dll   Найти похожие ветки 

 
iwik   (2008-01-29 20:49) [0]

Мне нужно передать данные в dll в виде буфера что-ли, одинм словом из приложения отдать TMemoryStream в библиотеку. В самой dll я хочу обработать это, например зашифровать или сжать и вернуть в программу.

Как это наиболее грамотно сделать? Порекомендуйте. Спасибо.


 
DVM ©   (2008-01-29 20:59) [1]


> Как это наиболее грамотно сделать?

В dll определить функцию принимающую на вход указатель на буфер с данными и размер данных.


 
DVM ©   (2008-01-29 21:01) [2]

Если надо возвращать данные, то опять же туда же надо передавать указатель на буфер для приема данных и его размер. В самой dll наверное не стоит выделять память.


 
iwik   (2008-01-29 21:04) [3]

Что есть буфер? PChar? Как лучше-то? TMemoryStream - нельзя передавать и возвращать?


 
DVM ©   (2008-01-29 21:06) [4]


> Что есть буфер? PChar? Как лучше-то?

Можно и PChar. Я бы наверное PChar взял.


> Как лучше-то?

Так же как делается везде в WinAPI.


> TMemoryStream - нельзя передавать и возвращать?

Можно, но тогда dll невозможно будет использовать нигде кроме Delphi.


 
iwik   (2008-01-29 21:15) [5]

Т.е. я могу просто сделать в dll для экспорта, допустим:

function func1(data: TMemoryStream): TMemoryStream;
begin
 Result := CryptAndPack(data);
end;


И быть уверенным в том, что все данные корректно "дойдут" и "уйдут" нормально?


 
DVM ©   (2008-01-29 21:19) [6]


> iwik   (29.01.08 21:15) [5]

Нет.


 
DVM ©   (2008-01-29 21:30) [7]


> iwik   (29.01.08 21:15) [5]

Оно может в случае именно с TMemoryStream и заработает, но лучше так не делать.


 
iwik   (2008-01-29 22:04) [8]

Спасибо. Тогда получается, что наиболее хорошая схема - это действовать через PChar по такой схеме, приблизительно:

dll:

var
 mydata;

function PutDataToDll(data: PChar): Integer; export
begin
 mydata := CryptAndPack(data);
 Result := Length(MyData);
end;

function GetData(PChar)
begin
 PChar := mydata;
end;


exe:
 Size := PutDataToDll(indata);
 outdata := выделить_память(Size);
 GetData(outdata);


 
DVM ©   (2008-01-29 22:12) [9]


> это действовать через PChar по такой схеме, приблизительно:

В dll надо обязательно передавать размер выделенной под буфер памяти.

function PutDataToDll(Data: PChar; DataSize: integer): Integer;
begin
 ...
end;

И лучше вообще то не выделять память внутри DLL. Лучше входной и выходной буферы передавать в функцию или действовать в пределах одного буфера если это возможно.



Страницы: 1 вся ветка

Текущий архив: 2008.02.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
15-1200506129
TStas
2008-01-16 20:55
2008.02.24
Чем открывать файл электронной книги djvu?


3-1192089119
Quart
2007-10-11 11:51
2008.02.24
Подключение к БД


3-1192011059
Alex
2007-10-10 14:10
2008.02.24
проблема в передаче выборки из БД в Rave


8-1174297899
San ciz
2007-03-19 12:51
2008.02.24
"Невидимое окно"


2-1201684617
Washington
2008-01-30 12:16
2008.02.24
string <-> TColor