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

 

 ·如何调用系统存储过程    »显示摘要«
    摘要: 我知道在sqlserver上用“exec sp_databases”可以获取当前服务器上所有的数据库名称,但不知道在c++builder中如何调用,请各位高人指点! ......
 ·自动绘线啦    »显示摘要«
    摘要: 请教各位高手: 如何实现如下功能: 输入网络节点数目以及接点之间的关联信息之后自动绘出网络拓扑图?? 如何动态着色标识网段的通断状态?? 这个功能实现起来麻烦吗? 我毫无头绪阿,请尽量详细回复~~也请所有浏览此帖者给一点想法和思路,谢谢!! 非常感谢你的帮助!!!给分100:) ......


求教DLL内TDataModule的问题

我编写的程序:  
  ----Resouse.dll-----  
  #include   <vcl.h>  
  #include   <windows.h>  
  #pragma   hdrstop  
   
  #include   "ResouseDml.h"  
  #include   "ResouseFrm.h"  
  #include   "../Include/Module.h"  
   
  int   WINAPI   DllEntryPoint(HINSTANCE   hinst,   unsigned   long   reason,   void*   lpReserved)  
  {  
      switch(reason)  
      {  
      case   DLL_PROCESS_ATTACH:  
              CoInitialize(NULL);  
              Dml_Resouse   =   new   TDml_Resouse(Application);  
              break;  
      case   DLL_PROCESS_DETACH:  
              delete   Dml_Resouse;  
              CoUninitialize();  
              break;  
      case   DLL_THREAD_ATTACH:  
              break;  
      case   DLL_THREAD_DETACH:  
              break;  
      }  
      return   1;  
  }  
  //------------------------------------------------------------------------  
  void   __stdcall   ShowResouse(TADOConnection   *Conn)//申明文件我  
  {  
      Dml_Resouse->Qry_Resouse->Connection   =   Conn;  
   
      Frm_Resouse   =   new   TFrm_Resouse(Application);  
      Frm_Resouse->ShowModal();  
      delete   Frm_Resouse;  
      Dml_Resouse->Qry_Resouse->Connection   =   NULL;  
  }  
  //------------------------------------------------------------------------  
   
  ---------Module.h---------  
  extern   "C"   __declspec(dllexport)   void   __stdcall   ShowResouse(TADOConnection   *Conn);  
   
  主程序将ADOConnection传递到DLL内,进行数据库的查询,当我关闭主程序的时候,总是报错,An   exception(C0000005)   occurred   during   DllEntryPoint   or   DllMain   in   module:Resouse.dll  
  当我把delete   Dml_Resouse;注释掉以后问题解决。  
   
  请问,我在没有注释掉delete   Dml_Resouse;之前哪里出错了?如果不将Dml_Resouse删除,我该怎么解决这个问题?  
   
  谢谢!

NO.1   作者: ksrsoft

我的DLL  
  case   DLL_PROCESS_DETACH:  
  delete   dmdb_drth;  
  dmdb_drth=NULL;  
  CoUninitialize();  
  break;  
  没有问题,是不是你的那个Dml_Resouse指针的值改变了  
  你在DLL里delete   Dml_Resouse;这句设断点,连exe调试一下,看看为什么出错

NO.2   作者: keendom

Dml_Resouse   =   new   TDml_Resouse(Application);  
   
  在BC中,使用new操作符要特别注意参数  
  你用Application作为参数,就是说明由工程管理Dml_Resouse实例;就是说在系统退出时Dml_Resouse会由系统自动析够  
  解决方法有两个:一是不要析够;另一个创建实例时不要带参数:  
  Dml_Resouse   =   new   TDml_Resouse(NULL);

NO.3   作者: kanhongsh

Dml_Resouse   =   new   TDml_Resouse(Application);  
   这句话有问题,在DLL中没有Application这个变量。  
     
   在DLL中一般:Dml_Resouse   =   new   TDml_Resouse(NULL);  
 


    摘要: 已知serversocket发送信息后clientsocket会 产生clientsocketread事件,开个buf(char *temp, int num)收下来, 问题是如何知道在收包前就知道所收到的字节总数count? 另外当num比count小时如何组包? ......
» 本期热门文章:

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