|
서비 님이 쓰신 글 :
: DLL에서 메인의 함수를 콜할 수 있나요..? ^^
:
: 이런경우는 될 수 없습니다.
:
: DllFunc에 들어가는 인자중 Form1이라는 클래스는 DLL 내부에 정의 되어있지 않기때문에
:
: Form1안에 있는 함수를 호출할 수 없죠..
:
: 방법은 DLL이 Form1에서 어떤 작업을 처리해줄것을 요구할 때 WM_USER + n(1,2,3,4 5...)
:
: 메세지를 통해 DLL에서 Form1으로 SendMessage를 통해 요구하고,
:
: Form1에서는 WM_USER + n 을 받아서 처리하면 되겠죠?
:
: 예를 들어 설명하자면 다음과 같습니다.
: Form1의 헤더
: --------------------------------------
: protected:
: void __fastcall OnTestFunc(TMessage &Msg);
:
: BEGIN_MESSAGE_MAP
: MESSAGE_HANDLER(WM_USER + 1, TMessage, OnTestFunc);
: END_MESSAGE_MAP(TForm)
:
: DLL에서는
: -------------------------------------
: extern "C" __declspec(dllexport) int __stdcall DllFunc(HWND hWnd)
: {
: SendMessage(hWnd, WM_USER + 1, 0, 0);
: form->MainTestFunc();
: }
:
: OnTestFunc에서 원하는 함수를 호출하면 되겠습니다 ^^;
:
: 설명이 잘됬나 모르겠네요... 다른 질문들도 검색해보세요.
:
: 김민식 님이 쓰신 글 :
: :
: : DLL 에서 메인프로그램쪽의 함수를 콜하려면 어떻게 해야 하나요.
: :
: : //*********** 메인 프로그램 *********************//
: :
: : void __fastcall TForm1::MainTestFunc(void)
: : {
: : Memo1->Lines->Add("Run MainTestFunc");
: : }
: :
: : int (__stdcall *DllCall)(TForm1 *);
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : HINSTANCE DllInstance;
: : DllInstance = LoadLibrary("Dll.dll");
: : DllCall = (int(__stdcall *)(TForm1 *))GetProcAddress(DllInstance, "DllFunc");
: :
: : DllCall(Form1);
: : }
: :
: :
: : //*********** DLL *********************//
: :
: : extern "C" __declspec(dllexport) int __stdcall DllFunc(TForm1 *form)
: : {
: : form->MainTestFunc();
: : }
: :
: : 위와 같이 하면 DLL 컴파일시 에러가 납니다.
: :
: : [Linker Error] Unresolved external .....
: :
: : 고수님의 도움 부탁드립니다.
: :
: :
|