Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизDll и TStringList Найти похожие ветки
← →
AndrewK (2003-06-19 13:41) [0]Доброго времени суток, господа!
Вопрос такой. Надо написать DLL, которая бы обрабатывала текстовый список TStringList и передавала обработанный список в другом TStringList.
Вот мой код:
library Telrad;
uses
SysUtils,
Classes;
procedure TransformLog (aLog : TStringList; aTransformedLog : TStringList);
var I : Integer;
begin
if not Assigned (aLog) then Exit;
if not Assigned (aTransformedLog) then Exit;
aTransformedLog.Clear;
for I := 0 to aLog.Count-1 do begin
aTransformedLog.Add("Обработано: "+aLog.Strings[I]);
end;
end;
exports
TransformLog index 1 name "TransformLog";
begin
end.
В программе делаю так, (все проверки опущены)
...
Type
tTransformLog = procedure (aLog : TStringList; TransformedLog : TStringList); StdCall;
...
procedure TForm1.Button1Click(Sender: TObject);
var aL1, aL2 : TStringList;
LibHandle : THandle;
TL : tTransformLog;
begin
aL1 := TStringList.Create;
aL1.Add("1");
aL1.Add("2");
aL1.Add("3");
aL1.Add("4");
aL2 := TStringList.Create;
LibHandle := LoadLibrary("Telrad.dll");
try
@TL := GetProcAddress(LibHandle, "TransformLog");
TL(aL1, aL2);
Memo1.Text := aL2.Text;
finally
FreeLibrary(LibHandle);
aL1.Free;
aL2.Free;
end;
end;
На выполнение данного кода вываливается Access violation ...
Подскажите, пожалуйста, как можно написать такую DLL.
← →
Palladin (2003-06-19 13:45) [1]ну а почему у тебя в программе stdcall а в библотеке не sdtcall?
естественно будешь ошибка...
← →
Anatoly Podgoretsky (2003-06-19 13:47) [2]А комментарий из программы, который тебе заботливо представила Дельфи стер, верни взад и внимательно прочитай про sharemem.
← →
AndrewK (2003-06-19 15:37) [3]Спасибо. :)
Вот уж действительно срабатывает правило:
- Если уже совсем ничего не помогает, значит пора читать хелп.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c