我写了一个dll程序,引用时报错:无法定位程序输入点check于动态链接库check.dll上。其中check为输出函数。

解决方案 »

  1.   

    你怎样导出的?
    exports
      add name 'add';//add index 1 name 'add'在程序中引用
    动态:
      loadlibrary();
      GetProcAddress()
      FreeLibrary();
    静态:
      function add():integer;external 'DllPath' index 1;
      

  2.   

    dll:
    exports
        check;app:
    procedure check; external 'check.dll';把check.dll放到应用程序目录
      

  3.   

    是不是找不到DLL文件!!!!
      

  4.   

    附上源码请在看看,有什么问题
    library mail;
    uses
        SysUtils,
        Classes, winsock,
        pop3 in 'pop3.pas';
    exports
        POP3CheckMail;
    {$R *.res}
    var
        wsaData: TWSAData;begin
        if WSAStartup($002, wsadata)<> 0 then Halt;
    end.
    unit pop3;interfaceuses
        WinSock,Windows,Messages,Classes,SysUtils;function POP3CheckMail(Email,Password,Domain:String;var MailList:TStringList;
                              var ErrorMsg:String):Bool;stdcall;export;
    function Connect_Server(host:string;port:integer):integer;
    function Write_Socket(sockfd:Integer; const s:string):Integer;
    function Socket_ReadLine(sockfd:Integer):string;
    function Pop3Response(sockfd:Integer):Bool;implementation//读 取POP3 服 务 器 的 一 行返 回 信 息, 如 果 是“ +OK”
    //则 函 数 返 回TURE,如 果 是“ -ERR” 则 返 回FALSE
    function Pop3Response(Sockfd:Integer):Bool;
    var
         S: string;
    begin
         S:=socket_readline(sockfd);
         if copy(s,1,3)='+OK' then
             Result:=True
         else
         {if copy(s,1,4)=‘ -ERR' then }
             Result:=False;
    end;
    function Socket_Readline(sockfd:Integer):String;
    //Read until #10
    var
         S:String;
         buf:array[0..1]of Char;
         n:Cardinal;       //32位无符号整型
    begin
         buf[0]:= #0;buf[1]:= #0; S:='';
         n:=recv(sockfd,Buf,1,0);
         while (n>0) and (n< 2) do
         begin
              buf[1]:= #0;
              S:=S +buf;
              if (buf[0]= #10) then
              Break;
              n:=recv(sockfd, buf, 1, 0);
         end;
         Result:=Trim(S);
    end;function Write_Socket(sockfd:Integer; const s:string):Integer;
    begin
         result:=Winsock.Send(sockfd,pointer(s)^,Length(s),0)
    end;Function Connect_Server(host:string;port:integer):integer;
    var
        i:integer;
        p:^longint;
        phe:pHostEnt;
        sin:sockaddr_in;  
    Begin
        //该字段必须为AF_INET
         sin.sin_family:=AF_INET;
         sin.sin_port:=htons(Port);  //指定端口号
         phe:=gethostbyname(pchar(host));
         if phe<>nil  then
         begin
              p:=Pointer(phe^.h_addr_list^);
              sin.sin_addr.s_addr:=p^;
         end
         else
         begin
              //将字串方式的 IP 位址转换成 in_addr 格式
              i:=inet_addr(PChar(Host));
              if i<> -1 then sin.sin_addr.S_addr:=i
         end;
         Result:=socket(PF_INET,SOCK_STREAM,0);
         if (Result=INVALID_SOCKET) then Exit;
         //connect to server
         if Connect(Result,sin,sizeof(sin))=SOCKET_ERROR then
         begin
         {Error handling}
         end;
    End;function POP3CheckMail(Email,Password,Domain:String;var MailList:
    TStringList;var ErrorMsg:String):Bool;stdcall;export;
    var
         sockfd,i:integer;
         S,Host, User:String;
    begin
         Result:=False;
         ErrorMsg:='';
         if MailList=nil then Exit;
         Host:=Domain;
         User:=Email;
         MailList.Clear;
         if (user='')or(Host='') then
         begin
              ErrorMsg:='Invalid email address.';
              exit;
         end;
         if (Host[1]='[')and (Host[Length(Host)]=']')then
         begin
              Host[1]:=' ';
              Host[Length(host)]:= #0;
         end;
         Host:=Trim(host);
         sockfd:=Connect_Server(Host,110);
         if not Pop3Response(sockfd)then
         begin
              ErrorMsg:='Cannot connect to server';
              exit;
         end;
         Write_Socket(sockfd,'USER '+User+#13#10);
         IF NOT POP3Response(sockfd) then
         begin
              ErrorMsg:='USER failed';
              Exit;
         end;
         Write_Socket(sockfd,'PASS '+Password+#13#10);
         IF NOT POP3Response(sockfd) then
         begin
              ErrorMsg:='PASS failed';
              Exit;
         end;
         Write_Socket(sockfd,'LIST'#13#10);
         POP3Response(sockfd);
         while true do
         begin
              s:=Socket_readline(sockfd);
              if s='.' then break;
              MailList.Add(S);
         end;
         Write_Socket(sockfd,'QUIT'#13#10);
         Closesocket(sockfd);
         Result:=True;
    end;
    end.