|
안녕하세요
음 dll안에 폼을 작성할 때에는
---------------------------------
class __declspec(dllexport)
myclass
{
};
---------------------------------
불러서 쓸때는
----------------------------------
class __declspec(dllimport)
myclass
{
};
myclass *mc = new myclass();
-----------------------------------
이런식으로 쓰는거롤 알고 있는데요.
오늘은 제가 폼을 하나 dll에 작성하고
그걸 호출하는 함수를 작성했습니다
extern "C" __declspec(dllexport) TForm* GetMyForm(TComponent *Owner)
{
return new TForm(Owner);
}
이런식으로 작성하고 포인터만 받아서 사용하다가
delete로 지우려고 했는데요.
이런식으로 작성하니 클라이언트에서
HINSTANCE lib = LoadLibraryEX("libname",NULL,~~);
(TForm*)(*Func)(TComponent *);
Func = (TForm*(*)(TComponent*))GetProcAddress(lib,"GetMyForm");
TForm *form = Func(this);
이런식으로 작성했더니 Func(this)함수를 호출하는 부분에서
EExternalException 이 던져지고 엑세스 바이올레이션 뜨는데
이유를 잘 모르겠습니다 ㅠ.ㅠ
그리고 LoadLibrary , GetProcAddress에서는 NULL이 리턴되지 않았습니다.
dll로 프로그래밍을 잘 안해보다 해보려니 이런 난감한 상황에 빠지네요 ㅠ.ㅠ
혹시 저런식으로 메모리 할당을 dll쪽에서 하면 안되는건가요?
검색으로는 위와같은 상황을 못찾아서 이렇게 글을 올렸습니다 ^^
그럼 답변 부탁드려요 ^^
|