dll返回的char *的字符串 需要释放这个指针么,该怎么解决
dll返回的char *的字符串 需要释放这个指针么
dll
主程序
请教了谢谢
------解决方案--------------------
dll中提供一个函数void FreeMem(void* ptr)用来释放DLL自己分配的内存。
exe在myname = addname();之后,调用FreeMem(myname)来释放内存。
注意:不要在exe里面直接delete。因为exe和dll用的可能不是同一个heap.
------解决方案--------------------
两种都可以
最好是在EXE中分配、销毁,向DLL传入char* p ,
否则在多个EXE同时使用DLL时,如果释放不及时,DLL的堆消耗的非常快……
------解决方案--------------------
------解决方案--------------------
dll
- C/C++ code
extern "C" __declspec(dllexport) char* ShowTime(void);// 这个用于 extern "C" __declspec(dllexport) char* ShowTime(void) { char *p=new char[20]; strcpy_s(p,10,"morning"); return p; }
主程序
- C/C++ code
HINSTANCE hDll; //DLL句柄 lpgetname addname; //函数指针变量 hDll = LoadLibrary(_T("mydll.dll")); char *myname; if (hDll != NULL) { addname = (lpgetname)GetProcAddress(hDll, "ShowTime"); if (addname != NULL) { myname = addname(); TRACE(_T("%s\n"), myname); } FreeLibrary(hDll); // delete myname;//这里一释放指针就出错 }
请教了谢谢
------解决方案--------------------
dll中提供一个函数void FreeMem(void* ptr)用来释放DLL自己分配的内存。
exe在myname = addname();之后,调用FreeMem(myname)来释放内存。
注意:不要在exe里面直接delete。因为exe和dll用的可能不是同一个heap.
------解决方案--------------------
两种都可以
最好是在EXE中分配、销毁,向DLL传入char* p ,
否则在多个EXE同时使用DLL时,如果释放不及时,DLL的堆消耗的非常快……
------解决方案--------------------
------解决方案--------------------