Q&A

  • 자동업데이트질문입니다.
일단 소스가 길지 않으니 전체소스를 올립니다.

--------------------------------------------------------

unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, FileCtrl, ShellAPI;



type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.FormCreate(Sender: TObject);

var

copyfiles : TSHFileOpStruct;

str1, str2 : pchar;

begin

if not DirectoryExists('e:test2') then

if not CreateDir('e:test2') then

raise Exception.Create('Cannot create e:test2');

with copyfiles do

begin

wnd := 0;

wfunc := fo_copy;

pfrom := ('e:test1111.txt');

pto := ('e:test2111.txt');

fflags := fof_simpleprogress;

end;

if fileexists('e:test2111.txt') then

begin

if fileage('e:test2111.txt') <> fileage('e:test1111.txt') then

shfileoperation(copyfiles)

end

else

shfileoperation(copyfiles);



str1 := ('e:test1111.txt');

str2 := ('e:test2111.txt');

winexec(strpcopy(str1, str2), sw_show);

Close;

end;



end.

------------------------------------------------------------------------------

실행이 된 다음에 디렉토리도 만들고 파일도 복사 / 갱신도 됩니다.

그런데 작업을 수행한 다음과 같은 에러 메세지가 나오는데 무엇이 문제인지 모르겠습니다.

디버깅을 해보니까 다음 부분에서 에러가 걸리더라구요..

winexec(strpcopy(str1, str2), sw_show);



<에러 메세지>

access violation at address 00407DE9 in module 'update.exe', Write or address 0043E6E0.



고수님들 도와 주십시요..







1  COMMENTS
  • Profile
    손상수 2001.04.07 19:35
    변수 선언 부분에서 선언을 달리하니까 되네요..

    -------------------------------------------------------

    var

    copyfiles : TSHFileOpStruct;

    str1, str2 : array[0..MAX_PATH] of char; // MAX_PATH = 260

    ---------------------------------------------------------------



    손상수 wrote:

    > 일단 소스가 길지 않으니 전체소스를 올립니다.

    > --------------------------------------------------------

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls, Buttons, FileCtrl, ShellAPI;

    >

    > type

    > TForm1 = class(TForm)

    > procedure FormCreate(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > copyfiles : TSHFileOpStruct;

    > str1, str2 : pchar;

    > begin

    > if not DirectoryExists('e:test2') then

    > if not CreateDir('e:test2') then

    > raise Exception.Create('Cannot create e:test2');

    > with copyfiles do

    > begin

    > wnd := 0;

    > wfunc := fo_copy;

    > pfrom := ('e:test1111.txt');

    > pto := ('e:test2111.txt');

    > fflags := fof_simpleprogress;

    > end;

    > if fileexists('e:test2111.txt') then

    > begin

    > if fileage('e:test2111.txt') <> fileage('e:test1111.txt') then

    > shfileoperation(copyfiles)

    > end

    > else

    > shfileoperation(copyfiles);

    >

    > str1 := ('e:test1111.txt');

    > str2 := ('e:test2111.txt');

    > winexec(strpcopy(str1, str2), sw_show);

    > Close;

    > end;

    >

    > end.

    > ------------------------------------------------------------------------------

    > 실행이 된 다음에 디렉토리도 만들고 파일도 복사 / 갱신도 됩니다.

    > 그런데 작업을 수행한 다음과 같은 에러 메세지가 나오는데 무엇이 문제인지 모르겠습니다.

    > 디버깅을 해보니까 다음 부분에서 에러가 걸리더라구요..

    > winexec(strpcopy(str1, str2), sw_show);

    >

    > <에러 메세지>

    > access violation at address 00407DE9 in module 'update.exe', Write or address 0043E6E0.

    >

    > 고수님들 도와 주십시요..

    >

    >

    >