当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

 ·关于memo或richtext    »显示摘要«
    摘要: 如果现在我想在memo第某行某个位置插入字符,像这样 你好 开会别迟到。 当我想光标停在"会"字后机,然后点击按钮,系统就会在我想在“会”字后加个请字,像每二行变成“开会请别迟到”.我要如何得到光标前的字符,还有光标后的字符,然后再把修改后的字符串重新覆盖掉原来的第二行的数据。 最好用什么控件来实现,要怎么做 ......
 ·dll文件注册问题    »显示摘要«
    摘要: 我想用regsvr32命令去注册一个dll文件,结果出现了下面的问题,请问如何解决? 命令如下: regsvr32.exe p2ssql.dll 错误提示如下: p2ssql.dll was loaded,but the dllregisterserver entry point was not found. dllregisterserver may not be exported, o......


做一个dll,在这个dll中我用new给变量分配了内存。然后显示调用这个dll,当freeLibrary时,也同时把new分配的内存释放掉了,这正常吗

做一个dll,在这个dll中我用new给变量分配了内存。然后显示调用这个dll,当freeLibrary时,也同时把new分配的内存释放掉了,这正常吗?如果正常,该怎么分配内存,分配好的内存在freeLibrary时释放不掉。

NO.1   作者: SmartHeart

我认为是正常的.  
   
  你这个要求恐怕不能实现吧?

NO.2   作者: o_racle

我认为是正常的.

NO.3   作者: force_eagle

非常正常  
   
  看这个我以前写的一个串口通讯DLL!!!  
  可以很好的在进程和线程间使用!!!!  
   
  DWORD   dwTlsIndexComm   =   0xFFFFFFFF;  
  BOOL   APIENTRY   DllMain(HINSTANCE   hinstDLL,       DWORD   fdwReason,                            
      LPVOID   lpvReserved)                        
  {    
          LPVOID   lpvData;    
          BOOL   fIgnore;    
   
          switch   (fdwReason)  
  {  
  case   DLL_PROCESS_ATTACH:     //被进程载入  
  if   (0xFFFFFFFF   ==   (dwTlsIndexComm   =   TlsAlloc()))  
  {  
  return   FALSE;  
  }  
  case   DLL_THREAD_ATTACH:     //被线程载入  
  lpvData   =   (LPVOID)   LocalAlloc(LPTR,   sizeof(PHANDLE));    
  if   (lpvData   !=   NULL)    
  {  
  fIgnore   =   TlsSetValue(dwTlsIndexComm,   lpvData);    
  }  
  break;    
   
  case   DLL_THREAD_DETACH:   //线程退出  
  lpvData   =   TlsGetValue(dwTlsIndexComm);    
  if   (lpvData   !=   NULL)    
  {  
  LocalFree((HLOCAL)   lpvData);    
  }  
   
  break;    
   
  case   DLL_PROCESS_DETACH:   //进程退出  
  lpvData   =   TlsGetValue(dwTlsIndexComm);    
  if   (lpvData   !=   NULL)    
  {  
  LocalFree((HLOCAL)   lpvData);    
  }  
   
  TlsFree(dwTlsIndexComm);    
   
  break;    
  default:  
  break;  
          }  
          return   TRUE;  
          UNREFERENCED_PARAMETER(hinstDLL);    
          UNREFERENCED_PARAMETER(lpvReserved);    
  }  
   
  第一次进程载入时也要调用线程载入,因为一个进程是就是一个线程!

NO.4   作者: SmartHeart

我认为,dll中用的是虚拟内存,一旦dll退出,整个虚拟内存的架构都不在了,在其中分配的内存还能存在吗?  
 

NO.5   作者: z1l3

在DLL中分配的内存必须在该函数结束的时候释放,否则会造成内存泄漏

NO.6   作者: Analyst

每个DLL都有自己的堆栈,在DLL里分配内存是从DLL自己的堆里分配,所以DLL被卸载的时候分配的内存也一起被卸载掉了。另外从DLL里分配的内存也不可以在DLL之外的地方释放,否则会破坏堆栈导致程序崩溃。


    摘要: 打开资源管理器后,焦点在指定的文件上。 谁作出来了,请到另外2篇帖子取分 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE