beginner: assertion error on class export from dll
Hi everybody...
im stuck and after crawling thru usenet for days and still beeing
unable to solve my problem, i post it.
what i want is: i want a dll export a class.
what i've read and tried to understand is...
http://www.codeproject.com/dll/dlltips.asp?df=100&forumid=855&exp=0&select=615608
what i did is listed below.
what i got is...
-------------------------------------------------
| Debug Assertion Failed! |
| |
| Program: (path to my prog) |
| File: dbgheap.c |
| Line: 1011 |
| |
| Expression: _CrtIsValidHeapPointer(pUserData) |
-------------------------------------------------
what i'd really apreciate is some enlightenment what im doing wrong.
currently im doing it wrong with microsoft vc++ 6; here's the code:
##########################################
# THE APPLICATION #
##########################################
__________________________________________
// ---------------------------------
// apl.h
// ---------------------------------
HINSTANCE hDLL;
__________________________________________
// ---------------------------------
// apl.cpp
// ---------------------------------
#include "apl.h"
#include "test.h"
// [...]
hDLL = LoadLibrary("test");
typedef CFoo* (*MYFUNC)(DWORD);
if (hDLL != NULL) {
MYFUNC pnMyfunc = (MYFUNC) GetProcAddress(hDLL, "CreateFoo");
CFoo* pFoo = pnMyfunc(0);
pFoo->Initialize(_T("check"));
delete pFoo;
FreeLibrary(hDLL);
}
// [...]
##########################################
# THE DLL #
##########################################
__________________________________________
// ---------------------------------
// test.def
// ---------------------------------
LIBRARY "test"
DESCRIPTION 'Test for Windows DLL'
EXPORTS
CreateFoo @1
__________________________________________
// ---------------------------------
// StdAfx.h
// ---------------------------------
#if !defined(AFX_STDAFX_H_9234592646__INCLUDED_)
#define AFX_STDAFX_H_9234592646__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif // AFX_STDAFX_H_9234592646__INCLUDED_
__________________________________________
// ---------------------------------
// test.h
// ---------------------------------
#include <string>
class CFoo {
public:
virtual void Initialize (std::string sName) = 0;
};
__________________________________________
// ---------------------------------
// test.cpp
// ---------------------------------
#include "StdAfx.h"
#include "test.h"
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID
lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
class CFooImp : public CFoo {
public:
CFooImp();
virtual ~CFooImp();
void Initialize (std::string sName) {
m_sName = sName;
}
protected:
std::string m_sName;
};
CFooImp::CFooImp() {}
CFooImp::~CFooImp() {}
__declspec(dllexport) CFoo* CreateFoo(DWORD dwVersion) {
if (dwVersion == 0) return new CFooImp;
return NULL;
}