Вообщем проблема заключается в том что, при закрытии программы, использующая DLL, появляется ошибка "Runtime error 217 at...".Помогите пожалуйста убрать это нехорошее собщение... До этого была ошибка Invalid pointer operation. Но после подключения модуля ShareMem в форму проекта , в сам исходник проектаи в DLL, она исчезла. Форма :
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ShareMem;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; Memo1: TMemo; procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; sl:TStringList;
implementation
function WDS_WForm_EExtract(Source:TStringList;sStart:string;sEnd:string):string;stdcall;External 'WDS.dll'; {$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject); begin sl:=TStringList.Create; sl.Assign(memo1.Lines); showmessage(WDS_WForm_EExtract(sl,'<option value="101">','</option>'));
end;
end.
|
Сорс проекта :
| Код | program Project1;
uses Forms,ShareMem, Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
|
DLL'ка
| Код | library WDS;
uses SysUtils, Classes,ShareMem;
{$R *.res} function WDS_WForm_EExtract(Source:TStringList;sStart:string;sEnd:string):string;stdcall; var i:integer; posStart,posEnd,posRelative:integer; EExtract:string; begin for i:=1 to source.Count do begin posStart:=AnsiPos(sstart,source.Strings[i]); if posStart>1 then begin posEnd:=AnsiPos(sEnd,source.Strings[i]); posRelative:=posEnd-(posStart+length(sStart)); EExtract:=copy(source.Strings[i],posStart+length(sStart),posRelative); Result:=EExtract; exit; end; end; end;
Exports WDS_WForm_EExtract; begin end.
|
|