Главная страница
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.013 c
2-1201679334
trubin
2008-01-30 10:48
2008.02.24
Как отличить CD от DVD. Как приводы делают это?


15-1200740613
Dmitry S
2008-01-19 14:03
2008.02.24
Pixel Art


9-1165141128
DRUGOI ilya
2006-12-03 13:18
2008.02.24
человек и ODE


2-1201278587
Максим
2008-01-25 19:29
2008.02.24
форму трясет при движении


2-1201507003
sergeii
2008-01-28 10:56
2008.02.24
Подсчёт разницы дат