안녕하세요...
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)
이거에요...
혹시 아시는분 계시면 메일 주시거나 답변 주세요...
이 에러 때문에 요즘 잠을 못자요...
고수님들 해결좀 해주세요...
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;