我写一个ActiveX,定义一下一个事件RecordMsg有一个参数LPCTSTR cardid,然后我用一个函数来引发这个事件,doitmsg(LPCTSTR pBuffer){FireRecordMsg(pBuffer);}编译没有问题,在执行时,只要用这个函数引发事件,就会弹出一个错误,好像是系统错误,请高手指点一下,我的目的是触发一个事件,这个事件返回一下字符串参数出去,我刚接触VC,以前用的是VB,高手多指点,感激不尽

解决方案 »

  1.   

    VC6? 你可以用wizard,会自动生成FireRecordMsg供你调用。
      

  2.   

    是用那个向导生成的,可是在调用FireRecordMsg时,一执行就出错
      

  3.   

    但是我用AfxMessageBox(pBuffer)又能正常地弹出一个对话框,并且内容正常
    你举一个例子,怎样让控件触发一个事件,传出一个字符串出去,谢谢
      

  4.   

    你先直接FireRecordMsg("hello,world")试试。下一步再看。
      

  5.   

    还是出错,报告一个内存只读,一个内存地址
    我用向导生成的,名字为RecordMsg,在下面的参数列表选择LPCTSTR类型,参数名称为CardID
    然后我在我的函数里面就用FireRecordMsg("hello world")但是就是报错
      

  6.   

    那么你的client端是如何处理这个事件的?
      

  7.   

    有一个线程函数,这个控件类有一个函数doitmsg(LPCTSTR pBuffer){FireRecordMsg(pBuffer);}
    在线程函数里面调用了doitmsg(buff);
    在用控件的那个程序上(VB)
    private sub a_RecordMsg(byval cardid as string)//VB自动生成的代码
       msgbox cardid
    end sub
      

  8.   

    faint!不早说。跨线程调用如果是apartment模式COM接口需要调度。有个API叫COM Marshaling 什么的。麻烦!干脆,你Send一个消息给主线程,然后让主线程调用doitmsg吧。
      

  9.   

    上面不已经说了吗。你调用SendMessage给你的控件窗口一个自定义的消息,然后在控件窗口中写代码调用doitmsg函数。例如 #define FIRE_EVENT_MSG (WM_USER + 0x112)在线程函数中
    SendMessage(your_control_hwnd, FIRE_EVENT_MSG, pBuffer, 0);
      

  10.   

    这位大侠: 我是个初学者,我遇到了控件发送事件的问题.
    我是做一个控件,这个控件启动了一个线程去都串口的数据,如果读到数据我就用postmessage去发送以一个消息通知控件的控制类对象,然后在控件的控制类窗口的消息处理函数中用FIRE来触发事件, 但是现在是在VC做的容器中可以收到事件,但是IE确收不到,
    究竟该怎么办啊???
    帮帮我把
      

  11.   

    Q157437: Fireev.exe Fires Events from a Second Thread"
    http://support.microsoft.com/support/kb/articles/q157/4/37.asp
    Q196026: PRB: Firing Event in Second Thread Causes IPF or GPF
    http://support.microsoft.com/support/kb/articles/q196/0/26.asp
    Firing events from worker threads 
    http://www.codeguru.com/atl/ThreadEvents.shtml
    Q280512: SAMPLE: ATLCPImplMT Encapsulates ATL Event Firing Across COM Apartments
    http://support.microsoft.com/support/kb/articles/q280/5/12.asp