为什么我在DLL里写的:
unit Unit1;//DLL里的一个单元
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, winsock,
  StdCtrls;
 const
  WM_SOCK = WM_USER + 1;     //自定义windows消息
  UDPPORT = 6767;
 var  s:TSocket;
    addr: TSockAddr;
    FSockAddrIn : TSockAddrIn;
    var
   TempWSAData: TWSAData;
        //利用消息实时获知UDP消息
 procedure ReadData(var Message: TMessage);message WM_SOCK;implementation略
提示我不能识别“message ”这个关键字,请问为什么啊?该这么办?谢谢

解决方案 »

  1.   

    那有你这样使用 message 的,message 是在一个类(包括句柄)的方法里面声明的,你这样就声明也?
      

  2.   

    你要把它放在一个类里面才行,不然谁来接收这个消息啊
    比如这样写
    type
      aa=class
      private
        procedure ReadData(var Message: TMessage);message WM_SOCK;
      end;
    implementationprocedure  aa.ReadData(var Message: TMessage);
    begin
    end;
      

  3.   

    各位大哥。在问最后一个问题!然后就给分
    接上面的:WSAAsyncSelect(s, XX.Handle , WM_SOCK, FD_READ);如果这个函数在DLL里,那XX.Handle 应该是什么?就是说想在DLL中,等有消息到来后,就送通知给DLL里的READDATA函数,经他处理发来的消息!请问里的handle应该是谁的值啊?我试过了,AA。HANDLE不行!谢谢!
      

  4.   

    你在DLL中建立一个隐藏的窗口,再建立一个消息循环用来接收消息就可以了。
      

  5.   

    citytramper(阿琪) 请问怎么继承啊?给个例子吧/
      

  6.   

    type
      TMySock = class(TWinControl)
      public
        procedure ReadData(var Message: TMessage);message WM_SOCK;
      end;var
      ms:TMySock;WSAAsyncSelect(s, ms.Handle , WM_SOCK, FD_READ);
      

  7.   

    PROJECT1 在 0167:bff9e463 的模块
     KERNEL32.DLL 中导致无效页错误。
    Registers:
    EAX=00000000 CS=0167 EIP=bff9e463 EFLGS=00000a83
    EBX=819cd944 SS=016f ESP=0070fc3c EBP=00000000
    ECX=0000016f DS=016f ESI=0070f700 FS=5457
    EDX=0070fddc ES=016f EDI=0070f700 GS=0000
    Bytes at CS:EIP:
    cc a1 e0 ad fc bf 8b 00 66 64 f7 05 1c 00 00 00 
    Stack dump:
    提示这个错误1