Вроде нету. Но 50% что есть либо аналог, либо самописная функция. Последнее можно либо найти на просторах интернета, либо самому написать.Кто знает есть такая функция CallBackAddr в delphi?
Вроде нету. Но 50% что есть либо аналог, либо самописная функция. Последнее можно либо найти на просторах интернета, либо самому написать.Кто знает есть такая функция CallBackAddr в delphi?
она там не нужна. для вызыва функции ставь stdcall и все.Кто знает есть такая функция CallBackAddr в delphi?
function EnumWindowsProc (Wd: HWnd; Param: LongInt): Boolean; stdcall;
begin
...
end;
..
EnumChildWindows(handle, @EnumWindowsProc, 0);
procedure TForm2.N5Click(Sender: TObject);
var
S : TStringList;
i: integer;
begin
if SaveDialog1.Execute then
S := TStringList.Create;
for i := 0 to ListView1.Items.Count-1 do
S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
S.SaveToFile(SaveDialog1.FileName);
S.Free;
end;
procedure TForm2.N3Click(Sender: TObject);
var
S: TStringList;
I: integer;
begin
if OpenDialog1.Execute then
S := TStringList.Create;
for i := 0 to ListView1.Items.Count-1 do
S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
S.LoadFromFile(OpenDialog1.FileName);
S.Free;
end;
А почему он должен работать? Ведь ты не заполняешь свой ListView1.и код загрузки, который не работает:
procedure TForm2.N3Click(Sender: TObject);
var
S: TStringList;
I, k: integer;
li: TListItem;
tmp, cmtext: string;
begin
if OpenDialog1.Execute then begin
S := TStringList.Create;
S.LoadFromFile(OpenDialog1.FileName);
for i := 0 to ListView1.Items.Count-1 do begin
tmp:= S.Strings[i];
k:= Pos(',', tmp);
cmtext:= RemoveQuotes(Trim(Copy(tmp, 1, k-1)));
Delete(tmp, 1, k);
li:= ListView1.Items.Add;
li.Caption:= cmtext;
li.SubItems.CommaText:= Trim(tmp);
end;
S.Free;
end;
end;
procedure TForm2.N3Click(Sender: TObject);
var
S: TStringList;
I, k: integer;
li: TListItem;
tmp, cmtext: string;
begin
try
if OpenDialog1.Execute then begin
S := TStringList.Create;
S.LoadFromFile(OpenDialog1.FileName);
for i:= 0 to S.Count do begin
tmp:= S.Strings[i];
k:= Pos(',', tmp);
cmtext:= Trim(Copy(tmp, 1, k - 1));
cmtext:= StringReplace(cmtext, '"', '', [rfReplaceAll, rfIgnoreCase]);
Delete(tmp, 1, k);
li:= ListView1.Items.Add;
li.Caption:= cmtext;
li.SubItems.CommaText:= Trim(tmp);
end;
S.Free;
end;
except end;
end;
procedure TForm2.N5Click(Sender: TObject);
var
S : TStringList;
i: integer;
begin
if (SaveDialog1.Execute) and (Length(SaveDialog1.FileName) > 0) then begin
S := TStringList.Create;
for i := 0 to ListView1.Items.Count-1 do
S.Add('"'+ ListView1.Items[i].Caption +'",'+ ListView1.Items[i].SubItems.CommaText);
S.SaveToFile(SaveDialog1.FileName);
S.Free;
end;
end;
function GetSourceHtml(URL: AnsiString): AnsiString;
var
idHttp1: TIdHttp;
begin
idHttp1:= TIdHttp.Create(Form1);
if Pos('http://', URL) = 0 then URL:= 'http://' + URL;
Result:= idHttp1.Get(URL);
end;
procedure Parse(URL: AnsiString);
begin
Form1.Memo1.Clear;
Source:= GetSourceHtml(URL);
Form1.Memo1.Lines.Add(Source);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Parse(Edit1.Text);
end;
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function CreateWord:boolean;stdcall;
external 'Project1.dll' name 'CreateWord';
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateWord;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CreateWord;
end;
end.
library Project1;
{ 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. }
uses
System.SysUtils,
System.Classes,
comObj,Windows;
{$R *.res}
var W:variant;
CreatedWord:boolean;
Function CreateWord:boolean;stdcall;
begin
CreateWord:=true;
CreatedWord:=true;
try
W:=CreateOleObject('Word.Application');
except
CreateWord:=false;
CreatedWord:=false;
end;
end;
exports CreateWord;
begin
end.
Ты создаешь Объект и нигде его не разрушаешь. а исходя из того, что он подключается к твоему приложению, а твое приложение подключается к третьему приложению... в общем при выходе начинаются попытки закрыть объекты, которые уже не существуют... если грубо - напиши в дллку процедуру такого содержания :W:=CreateOleObject('Word.Application');
W:= nil;