Q&A

  • dll 폼이 불러도 대답없으서...
안녕하셔요.

대답없는...

오늘도 아무도 없는 파견지에서 혼자서 뺑이 돌다돌다 어지러버 여쭙니다.



customer라는 dll프로젝트에 폼1 unit을 uses시켜두었습니다.

폼1의 unit에는 그 폼을 여는 아래의 코딩이 있습니다.



****************************************************************************

procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication); strcall;



중간생략



procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication);

begin

App.CreateForm(T폼1, 폼1);



폼1.ADOTable1.Connection := ADOConnection;

폼1.ADOTable1.Active := True;

폼1.Show;

end;

****************************************************************************



이 프로시저를 사용하기 위한 메인폼은

****************************************************************************

....생략



public

{ Public declarations }

procedure OpenForm(DllName : string);



end;

type

TOpenFormProc = procedure(ADOConnection : TADOConnection; App : TApplication) ; Stdcall;



var

메인폼1: T메인폼1;



implementation



uses 데이타모듈;



{$R *.DFM}

procedure T메인폼1.OpenForm(DllName : string);

var

H : THandle;

OpenFormProc : TOpenFormProc;

begin

H := LoadLibrary(PChar(DllName));

.

dll을 못찾을때 에러문장..

.

@OpenFormProc := GetProcAddress(H, '폼1_OpenForm');

.

프로시저를 못찾을때 에러문장발생..

.

OpenFormProc(dfmkdt.ADOConnection, Application);

FreeLibrary(H);

end;



procedure Tfmkdt001.Button4Click(Sender: TObject);

begin

OpenForm('customer.dll');

end;



라고 했습니다.

1. 실행시키면 프로시저를 못찾는다고 에러를 냅니다.



2. 글구 dll의 위치가 C:ab이고, 실행파일 위치가 C:a일때

dll파일 위치를 '..customer.dll'이라고 하면 dll파일을 못찾습니다.

그래서 아예 dll을 a로 옮겼더니 그부분을 넘어 가더라구요...경로지정도 알고싶습니다.

_ _'''

3  COMMENTS
  • Profile
    ... 2000.10.11 22:31
    투덜이 wrote:

    > 안녕하셔요.

    > 대답없는...

    > 오늘도 아무도 없는 파견지에서 혼자서 뺑이 돌다돌다 어지러버 여쭙니다.

    >

    > customer라는 dll프로젝트에 폼1 unit을 uses시켜두었습니다.

    > 폼1의 unit에는 그 폼을 여는 아래의 코딩이 있습니다.

    >

    > ****************************************************************************

    > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication); strcall;

    >

    > 중간생략

    >

    > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication);

    > begin

    > App.CreateForm(T폼1, 폼1);

    >

    > 폼1.ADOTable1.Connection := ADOConnection;

    > 폼1.ADOTable1.Active := True;

    > 폼1.Show;

    > end;

    > ****************************************************************************

    >

    > 이 프로시저를 사용하기 위한 메인폼은

    > ****************************************************************************

    > ....생략

    >

    > public

    > { Public declarations }

    > procedure OpenForm(DllName : string);

    >

    > end;

    > type

    > TOpenFormProc = procedure(ADOConnection : TADOConnection; App : TApplication) ; Stdcall;

    >

    > var

    > 메인폼1: T메인폼1;

    >

    > implementation

    >

    > uses 데이타모듈;

    >

    > {$R *.DFM}

    > procedure T메인폼1.OpenForm(DllName : string);

    > var

    > H : THandle;

    > OpenFormProc : TOpenFormProc;

    > begin

    > H := LoadLibrary(PChar(DllName));

    > .

    > dll을 못찾을때 에러문장..

    > .

    > @OpenFormProc := GetProcAddress(H, '폼1_OpenForm');

    > .

    > 프로시저를 못찾을때 에러문장발생..

    > .

    > OpenFormProc(dfmkdt.ADOConnection, Application);

    > FreeLibrary(H);

    > end;

    >

    > procedure Tfmkdt001.Button4Click(Sender: TObject);

    > begin

    > OpenForm('customer.dll');

    > end;

    >

    > 라고 했습니다.

    > 1. 실행시키면 프로시저를 못찾는다고 에러를 냅니다.

    >

    > 2. 글구 dll의 위치가 C:ab이고, 실행파일 위치가 C:a일때

    > dll파일 위치를 '..customer.dll'이라고 하면 dll파일을 못찾습니다.

    > 그래서 아예 dll을 a로 옮겼더니 그부분을 넘어 가더라구요...경로지정도 알고싶습니다.

    > _ _'''





    1.폼1_OpenForm();을 export 시키셨나요? dpr에서요..



    2.

    dll은 실행화일이 있는곳,시스템,C: 중 어딘가에 있어야 한다구 알구있는데요...

    맞나 ^^?





  • Profile
    투덜이 2000.10.12 00:39
    ... wrote:



    우째했는지 모르게 한줄은 넘어갔는데...

    Error가 납니다.

    Project kdt.exe raised exception class ELnvalidoperation with message 'Cannot create form.

    No MDI forms are currently active'. Process stopped. Use Step or run to continue.





    Application Error



    Exception ElnvalidOperation in module CUSTOMER.DLL at 0002E9ED.

    뭘 잘못했는지...



    > 투덜이 wrote:

    > > 안녕하셔요.

    > > 대답없는...

    > > 오늘도 아무도 없는 파견지에서 혼자서 뺑이 돌다돌다 어지러버 여쭙니다.

    > >

    > > customer라는 dll프로젝트에 폼1 unit을 uses시켜두었습니다.

    > > 폼1의 unit에는 그 폼을 여는 아래의 코딩이 있습니다.

    > >

    > > ****************************************************************************

    > > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication); strcall;

    > >

    > > 중간생략

    > >

    > > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication);

    > > begin

    > > App.CreateForm(T폼1, 폼1);

    > >

    > > 폼1.ADOTable1.Connection := ADOConnection;

    > > 폼1.ADOTable1.Active := True;

    > > 폼1.Show;

    > > end;

    > > ****************************************************************************

    > >

    > > 이 프로시저를 사용하기 위한 메인폼은

    > > ****************************************************************************

    > > ....생략

    > >

    > > public

    > > { Public declarations }

    > > procedure OpenForm(DllName : string);

    > >

    > > end;

    > > type

    > > TOpenFormProc = procedure(ADOConnection : TADOConnection; App : TApplication) ; Stdcall;

    > >

    > > var

    > > 메인폼1: T메인폼1;

    > >

    > > implementation

    > >

    > > uses 데이타모듈;

    > >

    > > {$R *.DFM}

    > > procedure T메인폼1.OpenForm(DllName : string);

    > > var

    > > H : THandle;

    > > OpenFormProc : TOpenFormProc;

    > > begin

    > > H := LoadLibrary(PChar(DllName));

    > > .

    > > dll을 못찾을때 에러문장..

    > > .

    > > @OpenFormProc := GetProcAddress(H, '폼1_OpenForm');

    > > .

    > > 프로시저를 못찾을때 에러문장발생..

    > > .

    > > OpenFormProc(dfmkdt.ADOConnection, Application);

    > > FreeLibrary(H);

    > > end;

    > >

    > > procedure Tfmkdt001.Button4Click(Sender: TObject);

    > > begin

    > > OpenForm('customer.dll');

    > > end;

    > >

    > > 라고 했습니다.

    > > 1. 실행시키면 프로시저를 못찾는다고 에러를 냅니다.

    > >

    > > 2. 글구 dll의 위치가 C:ab이고, 실행파일 위치가 C:a일때

    > > dll파일 위치를 '..customer.dll'이라고 하면 dll파일을 못찾습니다.

    > > 그래서 아예 dll을 a로 옮겼더니 그부분을 넘어 가더라구요...경로지정도 알고싶습니다.

    > > _ _'''

    >

    >

    > 1.폼1_OpenForm();을 export 시키셨나요? dpr에서요..

    >

    > 2.

    > dll은 실행화일이 있는곳,시스템,C: 중 어딘가에 있어야 한다구 알구있는데요...

    > 맞나 ^^?

    >

    >

  • Profile
    ... 2000.10.12 01:51
    투덜이 wrote:

    > ... wrote:

    >

    > 우째했는지 모르게 한줄은 넘어갔는데...

    > Error가 납니다.

    > Project kdt.exe raised exception class ELnvalidoperation with message 'Cannot create form.

    > No MDI forms are currently active'. Process stopped. Use Step or run to continue.

    >

    >

    > Application Error

    >

    > Exception ElnvalidOperation in module CUSTOMER.DLL at 0002E9ED.

    > 뭘 잘못했는지...

    >

    > > 투덜이 wrote:

    > > > 안녕하셔요.

    > > > 대답없는...

    > > > 오늘도 아무도 없는 파견지에서 혼자서 뺑이 돌다돌다 어지러버 여쭙니다.

    > > >

    > > > customer라는 dll프로젝트에 폼1 unit을 uses시켜두었습니다.

    > > > 폼1의 unit에는 그 폼을 여는 아래의 코딩이 있습니다.

    > > >

    > > > ****************************************************************************

    > > > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication); strcall;

    > > >

    > > > 중간생략

    > > >

    > > > procedure 폼1_OpenForm(ADOConnection : TADOConnection; App : TApplication);

    > > > begin

    > > > App.CreateForm(T폼1, 폼1);

    > > >

    > > > 폼1.ADOTable1.Connection := ADOConnection;

    > > > 폼1.ADOTable1.Active := True;

    > > > 폼1.Show;

    > > > end;

    > > > ****************************************************************************

    > > >

    > > > 이 프로시저를 사용하기 위한 메인폼은

    > > > ****************************************************************************

    > > > ....생략

    > > >

    > > > public

    > > > { Public declarations }

    > > > procedure OpenForm(DllName : string);

    > > >

    > > > end;

    > > > type

    > > > TOpenFormProc = procedure(ADOConnection : TADOConnection; App : TApplication) ; Stdcall;

    > > >

    > > > var

    > > > 메인폼1: T메인폼1;

    > > >

    > > > implementation

    > > >

    > > > uses 데이타모듈;

    > > >

    > > > {$R *.DFM}

    > > > procedure T메인폼1.OpenForm(DllName : string);

    > > > var

    > > > H : THandle;

    > > > OpenFormProc : TOpenFormProc;

    > > > begin

    > > > H := LoadLibrary(PChar(DllName));

    > > > .

    > > > dll을 못찾을때 에러문장..

    > > > .

    > > > @OpenFormProc := GetProcAddress(H, '폼1_OpenForm');

    > > > .

    > > > 프로시저를 못찾을때 에러문장발생..

    > > > .

    > > > OpenFormProc(dfmkdt.ADOConnection, Application);

    > > > FreeLibrary(H);

    > > > end;

    > > >

    > > > procedure Tfmkdt001.Button4Click(Sender: TObject);

    > > > begin

    > > > OpenForm('customer.dll');

    > > > end;

    > > >

    > > > 라고 했습니다.

    > > > 1. 실행시키면 프로시저를 못찾는다고 에러를 냅니다.

    > > >

    > > > 2. 글구 dll의 위치가 C:ab이고, 실행파일 위치가 C:a일때

    > > > dll파일 위치를 '..customer.dll'이라고 하면 dll파일을 못찾습니다.

    > > > 그래서 아예 dll을 a로 옮겼더니 그부분을 넘어 가더라구요...경로지정도 알고싶습니다.

    > > > _ _'''

    > >

    > >

    > > 1.폼1_OpenForm();을 export 시키셨나요? dpr에서요..

    > >

    > > 2.

    > > dll은 실행화일이 있는곳,시스템,C: 중 어딘가에 있어야 한다구 알구있는데요...

    > > 맞나 ^^?





    1.일단 확인하실건 exe의 폼이 MDI여야 한다는거겠구요...



    2.dll은 MDIChild 여야 합니다......



    1번이 잘못된거 아닌지....