我写了一个COM,其中
m_hInstance=AfxGetApp()->m_hInstance;
这句在VC的应用程序中调用没有问题(基于CDialog的).
但是在VB中却会报 out of memory 代码是 7并且VB的窗口好象和VC创建的窗口不太一样,
我向VB创建的窗口发送
PostMessage(m_hWnd,WM_NCLBUTTONDOWN,HTCAPTION,NULL);
消息时一点反应也没有.

解决方案 »

  1.   

    那怎样解决我的问题,使此COM能够既能用于VC程序也能用于VB及其它程序?
      

  2.   

    m_hInstance=AfxGetApp()->m_hInstance;
    这个是什么?
    你的COM中有这个语句?
      

  3.   

    是啊,当我的COM中有这句的时候
    m_hInstance=AfxGetApp()->m_hInstance;
    在VB下调用时会报out of memory 代码是 7
      

  4.   

    使用SetWindowLong将执行代码移到你要加的消息循环代码处,在此处处理你的消息响应,同时对不处理的消息返回给主程序。
    这些都放在你的VB程序里做。如果不太清楚的话,用google搜索一下窗口子类化,肯定有非常清楚的解释:)
      

  5.   

    To fupf88(从此萧郎是路人):
    我不是不知道这个,而是说我的组件应该能对VC或VB或其它的windows应用程序
    起到相同的作用,而不用在其它的程序里面去添加额外的代码另外请问大家,为什么有下面这句时在VB中调用就会报out of memory?
    m_hInstance=AfxGetApp()->m_hInstance;
      

  6.   

    http://expert.csdn.net/Expert/topic/831/831137.xml?temp=6.461734E-02
      

  7.   

    AfxGetApp()->m_hInstance;
    我觉得这个由问题,你的容器是vb程序的时候,这个获得的dd不对,因为没有CWinApp类存在了(这个是MFC类,VB内没有)
      

  8.   

    To firmbird(firmbird) :
    谢谢可是怎样向VB窗体发送它也能够响应的消息呢?
      

  9.   

    VB消息机制和VC完全不同,就象你用CDMA手机却要用移动的卡一样,又如对一个中国人说阿拉伯语,只能让这个中国人先学会才行啊。
      

  10.   

    To fupf88(从此萧郎是路人) :
    可是用spy++确实可以看到VB的窗本收到的消息
      

  11.   

    我的说法有问题,VB消息机制和VC虽然不同,但只是封装的不同,当然也可以响应消息了,不是不能响应消息,但是封装的并不保证和VC完全一样,我机器没有装VB不能实验,但我想象WM_CLOSE之类的应该可以响应,有些就不一定了。这就需要你自己在VB中处理了。
      

  12.   

    To fupf88(从此萧郎是路人):
    可我发送的是标准的windows消息呀.
      

  13.   

    装了VB测了一下,WM_NCLBUTTONDOWN发给VC程序会获得焦点,呵呵,同时出现两个程序有焦点,难得一见。发给vb没有反应,WM_NCLBUTTONDBLCLK则都会有反应。按道理呢ms应该使它的所有程序对公共消息作出同样的反映,但是封装的不好也是正常现象,你用自定义消息作起来很简单的。