1,新建一个VC开发的一个ActiveX,将Invisible at runtime勾选上
2,添加一个接口函数Test1(),其中内容为void test ()

   SetTimer(1,1234,NULL);
}此外没有做任何修改。在VC中调用此函数木有问题,
在VC#2005下调用此函数报错,这是什么原因捏?

解决方案 »

  1.   

    debug assertion failed!
    program:...\
    ...
      

  2.   


    就是 怎么调用的啊? 控件怎么添加到工程里面去的 怎么生成的? 用Creat么?如果连窗口都没有建立 调用控件的方法肯定会报错。
      

  3.   

    一定时断言窗口无效,SetTimer依赖于窗口,除非你用API::SetTimer(NULL, ...),指定窗口为空,即使用和窗口无关的定时器调用。
      

  4.   

    这个最直接的原因是,如果你的控件是invisible in runtime,那么在C#(或许VB、DELPHI也如此)生成它时,它会把你的控件当作一个windowless,不会为COleControl生产那个m_hWnd句柄,即此时m_hWnd=NULL。此时,你如果调用任何窗口相关的函数,都会崩溃,包括SetTimer.如何让C#能像VC调用该控件一样,我不知道。
    一般,让这个控件还是运行时可见。只不过让使用者把它设置成Visible=false。这是最简单的解决方法。