我在Dll里定义如下:
const
   WM_IMPORTRECORDCOUNT = WM_USER+$100;然后在Dll里的一个函数里发消息:
SendMessage (MainHandle, WM_IMPORTRECORDCOUNT, 0, i+1);请问:我在应用程序里怎么才能接收上面这个消息呢?能取到WM_IMPORTRECORDCOUNT这个值吗?

解决方案 »

  1.   

    是呀,问题还没有解决呀,原贴在这里:http://community.csdn.net/Expert/topic/5178/5178837.xml?temp=.3283502
      

  2.   

    我在Dll里定义如下:
    const
       WM_IMPORTRECORDCOUNT = WM_USER+$100;然后在Dll里的一个函数里发消息:
    SendMessage (MainHandle, WM_IMPORTRECORDCOUNT, 0, i+1);请问:我在应用程序里怎么才能接收上面这个消息呢?能取到WM_IMPORTRECORDCOUNT这个值吗?你要在句柄MainHandle(主窗体吧)中也定义一个相同的消息值,然后写一个消息响应事件过程。
    类似这样的:
    unit untmainconst 
      WM_IMPORTRECORDCOUNT = WM_USER+$100;type 
      TFrmMain=class(tForm)
       ....
        privatie
          procedure WMIMPORTRECORDCOUNT(var msg:Tmessage);message WM_IMPORTRECORDCOUNT;
        public
         ...
        end;procedure Tfrmmain.WMIMPORTRECORDCOUNT(var msg:Tmessage);
     begin
       showmessage('get the message from dll...'); end;
      

  3.   

    类似这样的:
    unit untmaininterface
     uses forms....;const 
      WM_IMPORTRECORDCOUNT = WM_USER+$100;type 
      TFrmMain=class(tForm)
       ....
        privatie
          procedure WMIMPORTRECORDCOUNT(var msg:Tmessage);message WM_IMPORTRECORDCOUNT;
        public
         ...
        end;imple.....procedure Tfrmmain.WMIMPORTRECORDCOUNT(var msg:Tmessage);
     begin
       showmessage('get the message from dll...'); end;
      

  4.   

    是不是DLL里的消息没有传过来呀
      

  5.   

    你没有将主窗体的HANDLE传递过去吧.检查传递过去的HANDLE和窗体的HANDLE是不是一样的.
      

  6.   

    请问一下:
    procedure Tfrmmain.WMIMPORTRECORDCOUNT(var msg:Tmessage);
     begin
       showmessage('get the message from dll...'); end;
    上面这个函数是在什么情况下执行的?是不是在Dll里如果有SendMessage就会自动捕获消息,然后执行上面这个函数的?
      

  7.   

    library ***dll...
    const WM_IMPORTRECORDCOUNT=WM_USER+500;var
      MainHandle:Thandle=0;
      DllHandle:Thandle;
     
    procedure INIT_DLL(AMainHandle:THandle;applicationHandle:Thandle);stdcall;
    begin
      mainHandle:=AMainHandle;//---保存主窗体句柄,用作其他用途
      dllHandle:=application.handle;
      application.handle:=applicationHandle;
      sendmessage(AMainHandle,WM_IMPORTRECORDCOUNT,0,0);
    end;类似这样的调用了
      

  8.   

    为什么主窗体的HANDLE老是0呢?
      

  9.   

    谢谢各位,搞定了,就是因为Handle错了。。