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

    摘要: 例如:e:\work\hxfoods\附件.styles 这个可能是文件,也可能是文件夹, 怎么判断出来? 不能用file.exists(fullpath),因为目录是filesystemwatcher监控出来的。 这个字符串是在删除文件(夹)时候捕获的。用file.exists(fullpath)判断会出现文件不存在的错误。 用的方法改怎么判断呢? ......
    摘要: 刚入行 先感谢各位前辈的帮助 mfc中什么能实现对各类型文件的拷贝呢 ......


请求帮助:调用dll函数之后,VB程序崩溃....up

VC   头文件的声明  
  #define     CCLIENT_API   extern"C"   __declspec(dllimport)  
  CCLIENT_API   void     __stdcall   ClientReadMessage(char   *m_sIP,char   *m_sCommand,WORD   *m_wLen);  
  CCLIENT_API   BOOL     __stdcall   ClientStartup(UINT   nMessage,HWND   hWnd);  
   
  函数MP4_ClientReadLastMessage是VC生成的client.dll里面的一个函数  
  第一个参数表示消息来自哪一个IP地址,  
  第二个参数表示消息的具体内容,  
  第三个参数表示消息的长度  
   
  函数ClientStartup是VC生成的client.dll里面的一个函数  
  第一个参数表示对应接收程序的消息,  
  第二个参数表示应用程序窗口句柄  
   
  VB   声明  
   
  Public   Declare   Function   ClientReadMessage   Lib   "client.dll"   (ByVal   m_sIP   As   String,   ByVal   m_scommand   As   String,   ByRef   m_wLen   As   Long)  
  Public   Declare   Function   ClientStartup   Lib   "client.dll"   (ByVal   nMessage   As   Long,   ByVal   hWnd   As   Long)   As   Boolean    
   
   
  代码实现部分  
  frmMain为主窗口  
   
  Const   WM_USER   =   &H400  
  Const   WM_MYCOMMAND   =   WM_USER   +   100  
   
  Private   Sub   Form_Load()  
     
        StartGetMsg  
        ClientStartup(WM_MYCOMMAND,   Me.hWnd)     第一个参数表示对应接收程序的消息,第二个参数表示应用程序窗口句柄  
   
  End   Sub  
   
   
  Public   Sub   StartGetMsg()  
          Load   frmMain  
          prevWndProc   =   GetWindowLong(frmMain.hWnd,   GWL_WNDPROC)  
          SetWindowLong   frmMain.hWnd,   GWL_WNDPROC,   AddressOf   WndProc  
  End   Sub  
   
  Public   Sub   EndGetMsg()  
        SetWindowLong   frmMain.hWnd,   GWL_WNDPROC,   prevWndProc  
          Unload   frmMain  
  End   Sub  
   
   
  Public   Function   WndProc(ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
          Dim   sMsg   As   String  
          Dim   ctemp   As   String  
          Dim   Length   As   Long  
          Dim   m_scommand   As   String  
       
          If   Msg   =   WM_MYCOMMAND   Then  
              If   wParam   =   10   Then   10对应于客户端接受到的是字符串,接下来调用函数ClientReadMessage来读取  
              Call   ClientReadMessage(ctemp,   m_scommand,   Length)   程序调用了这个函数之后就崩溃了  
              MsgBox   m_scommand  
              WndProc   =   1  
              Exit   Function  
              End   If  
          Else  
              WndProc   =   CallWindowProc(prevWndProc,   hWnd,   Msg,   wParam,   lParam)  
        End   If  
               
  End   Function  
   
  应用程序调用了函数ClientReadMessage之后,程序就崩溃了....  
   
  我曾经跟踪进入client.dll的函数ClientReadMessage,发现函数里面都是正常的,应该是VB这边的问题。  
   
  有谁可以帮助我一下吗,非常感谢!!

NO.1   作者: TechnoFantasywww.applevb.com)

Call   ClientReadMessage(ctemp,   m_scommand,   Length)   程序调用了这个函数之后就崩溃了  
   
  ctemp和m_scommand参数是用来传入值的还是传出的?如果是传出,你需要首先设定一下这两个字符串的长度,例如:  
   
  ctemp   =   String(256)

NO.2   作者: DooDu

又是vb凋vc的问题,我的也一样的问题,经常崩溃,帮up

NO.3   作者: wachel

是不是因为  
  MsgBox   m_scommand  
  的原因阿.这种回调函数里面加msgbox很容易就崩溃阿

NO.4   作者: supergreenbean

仔细看了一下,发现声明应该是这样:  
  Public   Declare   Sub   ClientReadMessage   Lib   "client.dll"   (ByVal   m_sIP   As   String,   ByVal   m_scommand   As   String,   ByRef   m_wLen   As   Integer)  
  Public   Declare   Function   ClientStartup   Lib   "client.dll"   (ByVal   nMessage   As   Long,   ByVal   hWnd   As   Long)   As   Long


    摘要: 我建立了一个时间用于超时控制, handle hevent = createevent(null,false,false,null); resetevent(hevent); waitforsingleobject( hevent, 2000 ); if( getlasterror() == wait_object_0 ) afxmessagebox("指定的同步对象处于有信......
» 本期热门文章:

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