Question about DLL using MFC
Hi! I am new to the DLL world. I have created a simple class declared as
following:
class __declspec(dllexport) myapi
{
public:
// status
bool error; // last status
char *errmsg; // if error is true, this is the reason
// default constructor and destructor
myapi();
virtual ~myapi();
private:
void setErrmsg(const char *str);
};
and the setErrmsg() is implemented as:
void myapi::setErrmsg(const char *str)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
int len;
len = strlen(str);
if(len != 0) {
if(errmsg != NULL) {
delete [] errmsg;
errmsg = NULL;
}
errmsg = new char[len];
strcpy(errmsg, str);
} else {
if(errmsg != NULL) {
delete [] errmsg;
errmsg = NULL;
}
}
}
in the destructor, I just wrote:
if(errmsg != NULL) {
delete [] errmsg;
errmsg = NULL;
}
to free up the memory.
Then I tried this DLL in VS2005, by:
mydll *obj;
obj = new mydll();
and I can get the errmsg by
String ^str = gcnew String(obj->errmsg);
I also tried:
String ^str = String::Empty;
int len;
len = (int) strlen(obj->errmsg);
if(len > 0) {
int i;
for(i = 0; i < len; ++i) {
str = str->PadRight(i+1, obj->errmsg[i]);
}
}
to copy all the bytes from DLL to my application.
The problem occurs when I tried:
delete obj;
VS2005will issue a memory check error when the destructor of myapl executed
to the delete [] errmsg; statement.
Can anyone tell me how to avoid this problem? Any hint is welcome!
Thank you and best regards,
Tim