Форум: "Начинающим";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
ВнизПередать данные в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c