Izwikwane na File
18 отговора
493 прегледа
Izwikwane na File
Nqkoy ako mi pomogne po wuprosa shte sum mnogo dowolen!!!!!
Imam edna mnogo spletena situacia.
Izpolzwam ShellExecute za da izwikam edin *.Rtf file i raboti ako q napisha w samata mi programa!!!
No kogato q sloja w DLL i ot tam se startirwa dushternata mi programa gurmi na poraziq!! Grashka w cheteneto na nqkoy si adress.
Zashto ???
Ili ako moje da mi kajete druga funkciq za izwikwane na *.Rtf
blagodarq predwaritelno!!!
Imam edna mnogo spletena situacia.
Izpolzwam ShellExecute za da izwikam edin *.Rtf file i raboti ako q napisha w samata mi programa!!!
No kogato q sloja w DLL i ot tam se startirwa dushternata mi programa gurmi na poraziq!! Grashka w cheteneto na nqkoy si adress.
Zashto ???
Ili ako moje da mi kajete druga funkciq za izwikwane na *.Rtf
blagodarq predwaritelno!!!
Re: Izwikwane na File
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window TUK ti e problema
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
HWND hwnd, // handle to parent window TUK ti e problema
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
);
Re: Izwikwane na File
Znachi kato cqlo funkciqta mi predstawlqwa Taka koqto si se namira w otdelen DLL i i se podawat posle parametri :
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle;
var
zFileName, zParams, zDir: array[0..79] of Char;
Text : String;
begin
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
case Result of
0: Text :='The operating system is out of memory or resources.';
else
Text := '';
end;
if Text <> '' then
Showmessage(Text);
end;
Mislq Handleto si go wzimam normalno A spored was ????
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle;
var
zFileName, zParams, zDir: array[0..79] of Char;
Text : String;
begin
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
case Result of
0: Text :='The operating system is out of memory or resources.';
else
Text := '';
end;
if Text <> '' then
Showmessage(Text);
end;
Mislq Handleto si go wzimam normalno A spored was ????
Re: Izwikwane na File
За грешката не знам, ама стила на писане е ужасно разточен - без да искам да те обиждам.
Например можеш да пишеш така:
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
pchar(FileName), pchar(Params), pchar(DefaultDir), ShowCmd);
if Result<>0 then
ShowMessage ('The operating system is out of memory or resources.');
За да провериш дали проблема е в манипулатора на главния прозорец (Application.MainForm.Handle) можеш да опиташ две неща:
1) да го предадеш като параметър на функцията
2) да ползваш вместо него 0
Да не говорим, че от чисто практична гледна точка директното извикване на ShellExecute не е по трудно от извикването на функцията от DLL, т.е. за мен е непонятно защо въобще се пише въпросната функция.
чети и дишай по-леко
Например можеш да пишеш така:
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
pchar(FileName), pchar(Params), pchar(DefaultDir), ShowCmd);
if Result<>0 then
ShowMessage ('The operating system is out of memory or resources.');
За да провериш дали проблема е в манипулатора на главния прозорец (Application.MainForm.Handle) можеш да опиташ две неща:
1) да го предадеш като параметър на функцията
2) да ползваш вместо него 0
Да не говорим, че от чисто практична гледна точка директното извикване на ShellExecute не е по трудно от извикването на функцията от DLL, т.е. за мен е непонятно защо въобще се пише въпросната функция.
чети и дишай по-леко
Re: Izwikwane na File
Ami izwikawaneto na funciqta sluji za da startira edin *.rtf file na koito se predawat stoynostti ot Zaywki( TQuery ) i sled towa se izwejdat na ekrana!!
Blagodarq shte probwam s twoq suwet puk dano da stane to interestnoto e che pri otdelna programa ne dawa greshka samo kogato se wika ot Dll'a ??!!!@##$#
Blagodarq shte probwam s twoq suwet puk dano da stane to interestnoto e che pri otdelna programa ne dawa greshka samo kogato se wika ot Dll'a ??!!!@##$#
Re: Izwikwane na File
i s createprocess bi trqbvalo da stane, prosto za window davash nil. Ne sum siguren...
by Waz Gaa
[email protected]
by Waz Gaa
[email protected]
Re: Izwikwane na File
Wij za CreateProcec ne bqh se setil shte wzema da go probram i negio dano da stane!!!!
Re: Izwikwane na File
Nqma kakvo da go probvash, az se oburkah. Imah previd ShellExecute, no vmesto handle na prozorec da zadavash nil
by Waz Gaa
[email protected]
by Waz Gaa
[email protected]
Re: Izwikwane na File
Написал ли си
uses ShareMem;
{ 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 ShareMem;
{ 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. }
Re: Izwikwane na File
Da izpolzwam ShareMem to towa e zadyljitelno uslowie!!!
A s CreateProces nishto ne stawa a kato probwah da dam na Handleto - nil weche ni izkarwa Acces Voalition w drug adres ne w predishniq!!!
Blagodarq wse pak za usiliqta koito pokazahte shte wzema da se otkaja ot DLL mislq che toy mi zabranqwa po nqkakuw nachin izpolzwaneto na ShellExecute i drugi funcii ot tazi biblioteka!!!!
:(
A s CreateProces nishto ne stawa a kato probwah da dam na Handleto - nil weche ni izkarwa Acces Voalition w drug adres ne w predishniq!!!
Blagodarq wse pak za usiliqta koito pokazahte shte wzema da se otkaja ot DLL mislq che toy mi zabranqwa po nqkakuw nachin izpolzwaneto na ShellExecute i drugi funcii ot tazi biblioteka!!!!
:(
Re: Izwikwane na File
А проверил ли си:
{ 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...
...щото аз си paste-нах твоята процедура и при мен тръгна.
{ 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...
...щото аз си paste-нах твоята процедура и при мен тръгна.
Re: Izwikwane na File
Ama tq funciqta si wurvi w normalno *.exe no kogato q wikam prez Dll gurmi!!!
DA ShareMem mi e pirwata deklarirana biblioteka w Uses clausata!!!!!
Towa purwoto neshto koeto prowerih!!!!
DA ShareMem mi e pirwata deklarirana biblioteka w Uses clausata!!!!!
Towa purwoto neshto koeto prowerih!!!!
Re: Izwikwane na File
А при мене върви и през .dll. Ей тва тръгна:
Под 98SE/Delphi5
library lib;
{ 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
ShareMem,
Windows,
Forms,
SysUtils,
ShellApi,
Dialogs;
{$R *.RES}
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle;
var
zFileName, zParams, zDir: array[0..79] of Char;
Text : String;
begin
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
StrPCopy(zDir, DefaultDir), ShowCmd);
case Result of
0: Text :='The operating system is out of memory or resources.';
else
Text := '';
end;
if Text <> '' then
Showmessage(Text);
end;
exports ExecuteFile name 'ExecuteFile';
begin
end.
А тва е извикването:
unit app;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function ExecuteFile(const FileName, Params, DefaultDir: string;
ShowCmd: Integer): THandle; external 'lib.dll';
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
ExecuteFile('c:\temp\file.rtf', 'explore', '', SW_SHOW);
end;
end.
Под 98SE/Delphi5
Re: Izwikwane na File
Абсолютно същото нещо, само че на събитие Button1Click:
-
-- Access violation @ address 00267D93 in module lib.dll. Read of address 00000180
Windows 2000 server, D6
PS: Ако го оставя на OnFormShow не се случва нищо.
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
procedure TForm1.Button1Click(Sender: TObject);
begin
ExecuteFile('c:\temp\file.rtf', 'explore', '', SW_SHOW);
end;
-
-- Access violation @ address 00267D93 in module lib.dll. Read of address 00000180
Windows 2000 server, D6
PS: Ако го оставя на OnFormShow не се случва нищо.
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Re: Izwikwane na File
А ако не използваме StrPCopy, както предложи Pechenia ... ако ти се занимава де, че при мене няма 2k...
Re: Izwikwane na File
Ако говориш за:
-
- едва ли проблема да е в StrPCopy (пробвах го все пак - рейзва същия ексепшън). Това, което забелязах е, че независимо дали го пишеш по разточителния начин, или не, размера на DLL-ла си остава същия (382976 bytes) и вероятно структурата му е същата. Сега обаче не мога да го гледам задълбочено това нещо.....
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Result := ShellExecute(Application.MainForm.Handle,nil {'explore'},
pchar(FileName), pchar(Params), pchar(DefaultDir), ShowCmd);
if Result<>0 then
ShowMessage ('The operating system is out of memory or resources.');
-
- едва ли проблема да е в StrPCopy (пробвах го все пак - рейзва същия ексепшън). Това, което забелязах е, че независимо дали го пишеш по разточителния начин, или не, размера на DLL-ла си остава същия (382976 bytes) и вероятно структурата му е същата. Сега обаче не мога да го гледам задълбочено това нещо.....
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Редактирано от z_free на
Re: Izwikwane na File
Ami da probwah go i s PChar no reshkata si ostawa wse sushtata Nqma znachka az weche gledam za drug nachin ako stane shte go publikuwam w foruma!!!
10x na wsichki
10x na wsichki
Re: Izwikwane na File
Neznam kakvo tochno si napravil - prosto syvet - proveri si settingite na kompilatora i debugera - neznam - prosto pogledni .....