Q&A

  • MFC로 만든 DLL에서 AfxRegisterWndClass 호출시 에러...
안녕하세요...

VC++로 만든 DLL을 Delphi로 붙이려고 하니 자꾸 에러가 나오네요

밑에 소스를 보시고 아시는 분의 도움을 바랍니다...



버젼

델파이 = 5.0 엔터프라이즈

VC++ = 6.0 엔터프라이즈



VC++ 소스



TestDll.cpp

-----------

BOOL WinTest(CWnd* pWnd)

{

BOOL m_bOpened = FALSE;

CString ClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);



// 이 부분은 컴파일 에러가 나서 일단 주석으로 막았슴

//m_bOpened = CreateEx(0, NULL, "Tm Link", WS_VISIBLE | WS_CHILD, 0, 0, 0,

// 0, pWnd->m_hWnd, NULL);

return m_bOpened;

}



BOOL WINAPI HandleTest(HWND hw)

{

return WinTest(CWnd::FromHandle(hw));

}





Delphi 소스



interface

THandleTest =function(hw :THandle): LongInt; stdcall;

var

HandleTest :THandleTest;



..........



procedure TForm1.Button1Click(Sender: TObject);

var

hMod :HMODULE;

Ret :LongInt;

begin

hMod :=LoadLibrary('C:DemoTestDllDebugTestDll');

if hMod > 32 then begin

try

HandleTest :=GetProcAddress(hMod, 'HandleTest');

Ret :=HandleTest(Handle);

Memo1.Lines.Add(IntToStr(Ret));

except

ShowMessage(SysErrorMessage(GetLastError));

FreeLibrary(hMod);

Exit;

end;

end

else

ShowMessage(SysErrorMessage(GetLastError));

end;





위 코드는 소스에서 필요한 부분만 발췌한것 입니다...

그렇지만 샘플 프로그램이기 때문에 빠진 부분은 거의 없습니다



에러가 나는 부분은..

CString ClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);

여기에요



에러 메시지는...

Debug Assertion Failed!



Program: C:DemosampleProject1.exe

File: afxwin1.in1

Line: 19



For information on how your program can cause an assertion

failue, see the Visual C++ documentation on asserts.



(Press Retry to debug the application)

이거에요...



혹시 아시는분 계시면 메일 주시거나 답변 주세요...

이 에러 때문에 요즘 잠을 못자요...

고수님들 해결좀 해주세요...

1  COMMENTS
  • Profile
    이중철 2000.09.30 06:11
    여러창에 제가만든 차트를 컴퍼넌트처럼 사용하기위하여 만든 것입니다.



    VC++



    extern "C" CChartDmTa* FAR PASCAL EXPORT DmTaCreate(HWND pParentWnd, UINT nID)

    {

    CChartDmTa* m_chartdmta;

    m_chartdmta = new CChartDmTa;

    m_chartdmta->Create(WS_VISIBLE | WS_CHILD , CRect(0,0,0,0), pParentWnd, nID);

    SetParent(m_chartdmta->GetSafeHwnd(), pParentWnd);

    return m_chartdmta;



    }



    CChartDmTa::CChartDmTa()

    {

    중략...

    }



    BOOL CChartDmTa::Create(DWORD dwStyle, const RECT& rect,

    HWND pParentWnd, UINT nID)

    {

    BOOL result ;

    static CString className = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW) ;



    result = CWnd::CreateEx(WS_EX_TRANSPARENT ,

    className, NULL, dwStyle,

    rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,

    pParentWnd , (HMENU)nID) ;



    return result ;



    }



    delphi



    생성부분.

    m_chartdmta := DmTaCreate(pan_back.handle, 0);



    선언부분

    Chartdll = 'DmChart.dll';



    function DmTaCreate(pParentWnd : longword; UID : longword) : pointer; stdcall; external Chartdll;