RE: Question about DLL using MFC
Hi Tim,
Just wondering, did you ever do a 'new' on your char* in your DLL app?
Because if you didn't, delete would definitely throw an exception.
Also, always initialise your pointers to NULL before you do anything with
them if you haven't done so already :)
Hope this helps,
Isabella
"TimPlyr" wrote:
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