Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизПередача Variant из DLL Найти похожие ветки
← →
AndrewK (2004-10-27 16:57) [0]Доброго времени суток, господа!
Надо написать функцию в DLL в которую передается некоторый набор параметров, которые в дальнейшем используются в ее работе. В результате функция должна возвратить другой набор параметров, которые она сформировала.
Вот используемые типы и сама функция в DLL
const
VarListSize = 49;
type
tVariable = record
Name : PChar;
Value : Variant;
end;
tVarListArr = array [0..VarListSize] of tVariable;
function Execute (aMainAppParam : tMainAppParam; aSrcVarList : tVarListArr; var qParam : tVarListArr) : Boolean; stdcall;
begin
...
end;
Вызов произвожу так:
...
DLLInstance := 0;
try
DLLInstance := LoadLibrary(PChar(vDLL));
if DLLInstance > HINSTANCE_ERROR then begin
@DlgExecute := GetProcAddress(DLLInstance, PChar(vPName));
if Assigned(@DlgExecute) then begin
vDone := DlgExecute(aMainAppParam, aSrcVarList, qParam);
ShowMessage(qParam[0].Value);
Inc(I);
end;
end else MessageDlg(cError2, mtError, [mbOK], 0);
end else MessageDlg(cError1, mtError, [mbOK], 0);
finally
if DLLInstance > HINSTANCE_ERROR then FreeLibrary(DLLInstance);
end;
...
Функция вызывается, но после ее вызова процедура просто перестает работать, т.е. на ShowMessage уже не вызывается.
Если в tVariable поле Value делаю PChar, то все работает.
Как можно сделать обмен данными с DLL с программой с данными условиями? По возможности без использования ShareMem.
Пояснение:
В функцию dll передается лист исходных данных, параметр aSrcVarList, после ее работы создается модернизированный список параметров, который используется в основной программе. Параметры - массивы из пар Name:Value. Лучше массива ничего не придумал, так как с классами на основе TList получается та же ситуация.
← →
panov © (2004-10-27 17:00) [1]для первого чтения:
{ Important note about DLL memory management: ShareMem must be the
first unit in your library"s USES clause AND your project"s (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
← →
AndrewK (2004-10-27 17:05) [2]Я это читал...
> Как можно сделать обмен данными с DLL с программой с данными
> условиями? По возможности без использования ShareMem.
← →
Reindeer Moss Eater © (2004-10-27 17:06) [3]Указатель + Длина
Все что тебе нужно
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c