작성중인 프로그램의 일부입니다.
헌데 정말 이상한것이 있어서 질문드립니다...
algorithm1이라는 프로시져에서 'test.dat'(Dir은 현재 실행파일이 실행되는 디렉토리)라는 데이터파일을 작성한다음...
dll을 로드하면 결과가 메모창에 뿌려지게됩니다.
이 결과를 다시 파일로 작성할려고 합니다.
첨 실행하면 아무 문제가 없습니다...
첫 실행에서 파일 저장할때 이 프로그램이 있는 디렉토리와 같은 디렉토리가 아닌 다른 디렉토리에 저장을 하게되면 문제가 생기게된다는거죠...
다시 말하면, 실행파일은 C:temp 라는 디렉토리밑에 있고, 결과를 C:testtest1.out 라고 저장하면..
다음 실행할 때 'test.dat'라는 파일을 C:temp 에서 찾는게 아니라, C:test 에서 찾습니다...그리고는 파일을 찾을 수 없다는 에러를 내는군요...확인을 해보니까... 'test.dat'라는 데이터파일은 C:temp 디렉토리밑에 제대로 생성이 됩니다..
근데 dll호출에서 엉뚱하게 C:testtest.dat를 찾는군요...
어떻게 하면 좋을까요??
고수님들 고견 부탁드립니다.....
procedure TForm1.algorithm1(...)
type
TFunc = function:integer; stdcall;
var
Com:THandle;
ComFunc:TFunc;
.............
begin
.........
filename = Dir + 'test.dat';
assignfile(Ft,filename);
rewrite(Ft);
.........
Com:=LoadLibrary('AggLoad.dll'));
@ComFunc:=GetProcAddress(Com,'Agg_Load');
ComFunc();
FreeLibrary(Com);
.............
end;
procedure TForm1.savedata(...)
var
filename1:string;
s:TextFile;
begin
if savedialog3.execute then
begin
memo2.lines.saveToFile(filename1);
end;
end;
> 작성중인 프로그램의 일부입니다.
> 헌데 정말 이상한것이 있어서 질문드립니다...
> algorithm1이라는 프로시져에서 'test.dat'(Dir은 현재 실행파일이 실행되는 디렉토리)라는 데이터파일을 작성한다음...
> dll을 로드하면 결과가 메모창에 뿌려지게됩니다.
> 이 결과를 다시 파일로 작성할려고 합니다.
> 첨 실행하면 아무 문제가 없습니다...
> 첫 실행에서 파일 저장할때 이 프로그램이 있는 디렉토리와 같은 디렉토리가 아닌 다른 디렉토리에 저장을 하게되면 문제가 생기게된다는거죠...
> 다시 말하면, 실행파일은 C:temp 라는 디렉토리밑에 있고, 결과를 C:testtest1.out 라고 저장하면..
> 다음 실행할 때 'test.dat'라는 파일을 C:temp 에서 찾는게 아니라, C:test 에서 찾습니다...그리고는 파일을 찾을 수 없다는 에러를 내는군요...확인을 해보니까... 'test.dat'라는 데이터파일은 C:temp 디렉토리밑에 제대로 생성이 됩니다..
> 근데 dll호출에서 엉뚱하게 C:testtest.dat를 찾는군요...
> 어떻게 하면 좋을까요??
> 고수님들 고견 부탁드립니다.....
>
>
> procedure TForm1.algorithm1(...)
> type
> TFunc = function:integer; stdcall;
> var
> Com:THandle;
> ComFunc:TFunc;
> .............
> begin
> .........
>
> filename = Dir + 'test.dat';
> assignfile(Ft,filename);
> rewrite(Ft);
> .........
> Com:=LoadLibrary('AggLoad.dll'));
> @ComFunc:=GetProcAddress(Com,'Agg_Load');
> ComFunc();
> FreeLibrary(Com);
> .............
> end;
>
> procedure TForm1.savedata(...)
> var
> filename1:string;
> s:TextFile;
> begin
> if savedialog3.execute then
> begin
> memo2.lines.saveToFile(filename1);
> end;
> end;
>
그건 DLL상에 문제가 아닌것 같군요..
예를들면 윈도에서 어떤 화일을 연다고 가정해보면(저장이나...머 그런거) 시작되는 폴더는 항상 정해져 있지 않습니다.
쩝..글루 칠라니깐 힘드네...
암튼 이함수를 써서 현재 읽고 쓰는 폴더를 다시 쎄팅 해주면 됩니다...
ChDir('c:temp');