我写了一个dll程序,引用时报错:无法定位程序输入点check于动态链接库check.dll上。其中check为输出函数。
解决方案 »
- 500分求如何实现在任务栏上显示倒计时代码?
- 请问如何隐藏richedit滚动条?
- DevExpres 少cxExportGrid4Link.dcu怎么办?
- http secure socket is not supported???
- 高手,请进
- 控件啊控件啊~~~~~~~~
- 关于Windows XP (大客户授权上海政府版)在线更新的问题?
- 特急:locate('SNo,dfg',vararrayof([spinedit1.text,edit1.text]),[loPartialKey])提示没有定义vararrayof标识符,怎么办?
- 两个string类型的比较用什么呀? 我觉得用"="怎么不准确?是什么原因?
- 如何屏蔽注册表?
- hook程序来获取击键,出现乱码
- 问一个图像管理系统,是使用数据库,还是使用文件系统管理图像为好?
exports
add name 'add';//add index 1 name 'add'在程序中引用
动态:
loadlibrary();
GetProcAddress()
FreeLibrary();
静态:
function add():integer;external 'DllPath' index 1;
exports
check;app:
procedure check; external 'check.dll';把check.dll放到应用程序目录
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.