Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Внизпроблема с DLL Найти похожие ветки
← →
Al_jus (2005-07-28 04:58) [0]Здравствуйте.
Опять возникла проблема - пишу функцию в ДЛЛ которая должна разбивать строку на куски:
Код ДЛЛ: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:06) [1]А ShareMem включил в файл проекта главной программы?
← →
Al_jus (2005-07-28 05:07) [2]да
← →
Джо © (2005-07-28 05:16) [3]
> [2] Al_jus (28.07.05 05:07)
> да
Надеюсь, первым в списке юнитов?
Проверь также как объявлен прототип функции в главной программе.type
TGetTokensProc = function (text:String; separator:String; sl:TStringList):integer;stdcall;
Так?
Кстати, stdcall тут ни к селу ни к городу ни в длл, ни в программе.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c