![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с DLL [D5, WinXP]
Al_jus © (2005-07-28 04:58:00)Здравствуйте.
Опять возникла проблема - пишу функцию в ДЛЛ которая должна разбивать строку на куски:
Код ДЛЛ:
uses
ShareMem,
SysUtils,
Classes;
{$R *.RES}
function getTokens(text:String; separator:String; sl:TStringList):integer;stdcall;
var
count : integer;
begin
count := 0;
repeat
if pos(separator,text)>0 then
begin
sl.Add(copy(text,1, pos(separator,text)-1));
text:=copy(text,pos(separator,text)+1, length(text));
count := count + 1;
end else
begin
sl.Add(text);
count := count + 1;
break;
end;
until false;
result := count;
end;
exports getTokens;
и вызываю из программы:
procedure TForm1.Button3Click(Sender: TObject);
var
sl:TStringList;
begin
sl := TStringList.create;
@getTokens := nil;
LibHandle := LoadLibrary('project2.DLL');
if LibHandle >= 32 then
begin
@getTokens := GetProcAddress(LibHandle,'getTokens');
if @getTokens <> nil then
getTokens(Edit1.Text, Edit2.Text, sl);
end;
FreeLibrary(LibHandle);
showMessage(sl[strToInt(Edit3.Text)]);
sl.free;
end;
Кусок строки-то я получаю правильно, но когда я закрываю окно, вылетает ошибка InvalidPointerOperation и Runtime Error 116
Помогите разобраться в чем ошибка
Заранее спасибо
Джо (2005-07-28 05:16:00) [1]
> [2] Al_jus (28.07.05 05:07)
> да
Надеюсь, первым в списке юнитов?
Проверь также как объявлен прототип функции в главной программе.
type
TGetTokensProc = function (text:String; separator:String; sl:TStringList):integer;stdcall;
Так?
Кстати, stdcall тут ни к селу ни к городу ни в длл, ни в программе.
Al_jus (2005-07-28 05:07:00) [2]да
Джо (2005-07-28 05:06:00) [3]А ShareMem включил в файл проекта главной программы?