说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

DELPHI与INTERNET(二)

HTML文档下载 WORD文档下载 PDF文档下载
DELPHI与INTERNET(二)

FTP 使用 WININET

现在您阅读的是本文的第二部分,它包含了WININET的内容。正如前文提及的那样, 这个部分与第一部分完全无关。

让我们先来对您在FTP部分使用WININET DLL时需要编写的代码作一个做一个概括的了解。这并不是一个详尽的学习,但却能够让您进门。为了知晓这项技术,您要做的第一件 事情是明白 WININET.PAS 中的一些函数返回的是一个叫做 HINTERNET 类的指针变量:

var

HINTERNET: Pointer;

这个指针扮演一个您正在使用的不同的因特网服务的句柄的角色。获得了这个句柄之后,你应当把它作为第一个参数传递给在这个进程周期[注:指FTP的整个存在时间(译者)]中调用的其他WININET函数。

您要记住的适当您在使用它的时间内要把句柄返回给系统,通常是通过调用 WININET 函数 InternetCloseHandle 来实现:

function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;

为了让一个WININET进程开始,您调用 InternetOpen :

function InternetOpen(lpszCallerName: PChar; dwAccessType: DWORD;

lpszServerName: PChar; nServerPort: INTERNET_PORT;

dwFlags: DWORD): HINTERNET; stdcall;

第一个参数时打开这个进程的应用程序的名字。您可以在这个参数中传递任何您所要 的任意符串。微软公司的文献声称"这个名字作为HTTP协议中的用户代理器的名字而被使用"。这个保留的参数可以设为0或空。

var

MyHandle: HINTERNET;

begin

MyHandle := InternetOpen('MyApp'

0

nil

0

0);

end;

如果您想要关于这个函数的更多信息,从 www.microsoft.com 那里下载

WININET.HLP 。

打开了这这个进程之后,下一步是通过 InternetConnect 函数来连接到服务器上。

function InternetConnect(

hInet: HINTERNET; // Handle from InternetOpen

lpszServerName: PChar; // Server: i.e.

www.borland.com

nServerPort: INTERNET_PORT; // Usually 0

lpszUsername: PChar; // usually anonymous

lpszPassword: PChar; // usually your email address

dwService: DWORD; // FTP

HTTP

or Gopher?

dwFlags: DWORD; // Usually 0

dwContext: DWORD): // User defined number for callback

HINTERNET; stdcall;

这里有三个可能的可以通过 dwService 参数传递的自说明旗标,它们是互斥的:

INTERNET_SERVICE_FTP

INTERNET_SERVICE_GOPHER

INTERNET_SERVICE_HTTP

下面是 dwFlags 参数的选择:

INTERNET_CONNECT_FLAG_PASSIVE

这个选项仅当您在前一个参数中传递了 INTERNET_SERVER_FTP 才有效。这时候这个 参数没有其他有效的选项。

如果这个进程成功的话会返回一个有效的指针,否则它返回空。

连接上之后

当您连接上之后,您可以调用来 GetCurrentDirectory 获得当前的路径的名字:

function TMyFtp.GetCurrentDirectory: string;

var

Len: Integer;

S: string;

begin

Len := 0;

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

SetLength(S

Len);

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

Result := S;

end;

这个函数声明如下:

function FtpGetCurrentDirectory(

hFtpSession: HINTERNET; // handle from InternetConnect

lpszCurrentDirectory: PChar; // directory returned here

var lpdwCurrentDirectory: DWORD): // buf size of 2nd parameter

BOOL; stdcall; // True on success

如果您把最后一个参数设为0,那么WININET会使用这个参数来返回路径字符串的长度 。接着您可以为您的字符串分配内存,也可以在调用一次这个函数来获得路径的名字。这 个过程在上面的方法中已经演示过了。(注意到*设定长度*的那个调用,Delphi要求您在类似这样的情况下为新的长字符串分配内存!这是因为这个字符串必须在操作系 统中指定值,而不是在 Delphi 应用程序中指定。结果就是 Delphi 不能在类似的情况下(像它通常那样悄悄地为字符串分配内存)

下面是返回在特定路径下当前可用的文件的一系列函数:

function GetFindDataStr(FindData: TWin32FindData): string;

var

S: string;

Temp: string;

begin

case FindData.dwFileAttributes of

FILE_ATTRIBUTE_ARCHIVE: S := 'A';

// FILE_ATTRIBUTE_COMPRESSED: S := 'C';

FILE_ATTRIBUTE_DIRECTORY: S := 'D';

FILE_ATTRIBUTE_HIDDEN: S := 'H';

FILE_ATTRIBUTE_NORMAL: S := 'N';

FILE_ATTRIBUTE_READONLY: S := 'R';

FILE_ATTRIBUTE_SYSTEM: S := 'S';

FILE_ATTRIBUTE_TEMPORARY: S := 'T';

else

S := IntToStr(FindData.dwFileAttributes);

end;

S := S + GetDots(75);

Move(FindData.CFilename[0]

S[6]

StrLen(FindData.CFileName));

Temp := IntToStr(FindData.nFileSizeLow);

Move(Temp[1]

S[25]

Length(Temp));

Result := S;

end;

function TMyFtp.FindFiles: TStringList;

var

FindData: TWin32FindData;

FindHandle: HInternet;

begin

FindHandle := FtpFindFirstFile(FFtphandle

'*.*'

FindData

0

0);

if FindHandle = nil then begin

Result := nil;

Exit;

end;

FCurFiles.Clear;

FCurFiles.Add(GetFindDataStr(FindData));

while InternetFindnextFile(FindHandle

@FindData) do

FCurFiles.Add(GetFindDataStr(FindData));

InternetCloseHandle(Findhandle);

GetCurrentDirectory;

Result := FCurFiles;

end;

这里需要注意的关键函数是 ftpFindFirstFile

InternetFindNextFile & InternetCloseHandle 。您可以像调用 Delphi 函数 FindFirst、FindNext & FinClose 一样调用这些函数。特别的是,您使用函数 tpFindFirstFile 来取得这个路径下的第一 个函数。您可以不断地调用 InternetFindNextFile ,直到函数返回"False"为止。当这个进程结束时,调用 InternetCloseHandle 来通知操作系统回收与这个进程相关的内存。

我不准备在这里进一步解析这个进程。如果您想要更多的信息,您可以在 Delphi 帮助中查找 FindFirst 。最后提醒一句:并不向前文提及的函数,TWin32FindData 并不 是在 WININET.PAS 中定义的, 但可以在随 Delphi 分发的 WIN32 帮助文件中找到它。 它在随 Delphi 分发的 WINDOWS.PAS 文件中被定义。

FTP 使用 WININET

现在您阅读的是本文的第二部分,它包含了WININET的内容。正如前文提及的那样, 这个部分与第一部分完全无关。

让我们先来对您在FTP部分使用WININET DLL时需要编写的代码作一个做一个概括的了 解。这并不是一个详尽的学习,但却能够让您进门。为了知晓这项技术,您要做的第一件 事情是明白 WININET.PAS 中的一些函数返回的是一个叫做 HINTERNET 类的指针变量:

var

HINTERNET: Pointer;

这个指针扮演一个您正在使用的不同的因特网服务的句柄的角色。获得了这个句柄之 后,你应当把它作为第一个参数传递给在这个进程周期[注:指FTP的整个存在时间(译者 )]中调用的其他WININET函数。

您要记住的适当您在使用它的时间内要把句柄返回给系统,通常是通过调用 WININET 函数InternetCloseHandle 来实现:

function InternetCloseHandle(hInet: HINTERNET): BOOL; stdcall;

为了让一个WININET进程开始,您调用 InternetOpen :

function InternetOpen(lpszCallerName: PChar; dwAccessType: DWORD;

lpszServerName: PChar; nServerPort: INTERNET_PORT;

dwFlags: DWORD): HINTERNET; stdcall;

第一个参数时打开这个进程的应用程序的名字。您可以在这个参数中传递任何您所要 的任意符串。微软公司的文献声称"这个名字作为HTTP协议中的用户代理器的名字而被使 用"。这个保留的参数可以设为0或空。

var

MyHandle: HINTERNET;

begin

MyHandle := InternetOpen('MyApp'

0

nil

0

0);

end;

如果您想要关于这个函数的更多信息,从 www.microsoft.com 那里下载 WININET.HLP 。

打开了这这个进程之后,下一步是通过 InternetConnect 函数来连接到服务器上。

function InternetConnect(

hInet: HINTERNET; // Handle from InternetOpen

lpszServerName: PChar; // Server: i.e.

www.borland.com

nServerPort: INTERNET_PORT; // Usually 0

lpszUsername: PChar; // usually anonymous

lpszPassword: PChar; // usually your email address

dwService: DWORD; // FTP

HTTP

or Gopher?

dwFlags: DWORD; // Usually 0

dwContext: DWORD): // User defined number for callback

HINTERNET; stdcall;

这里有三个可能的可以通过 dwService 参数传递的自说明旗标,它们是互斥的:

INTERNET_SERVICE_FTP

INTERNET_SERVICE_GOPHER

INTERNET_SERVICE_HTTP

下面是 dwFlags 参数的选择:

INTERNET_CONNECT_FLAG_PASSIVE

这个选项仅当您在前一个参数中传递了 INTERNET_SERVER_FTP 才有效。这时候这个 参数没有其他有效的选项。

如果这个进程成功的话会返回一个有效的指针,否则它返回空。

连接上之后

当您连接上之后,您可以调用来 GetCurrentDirectory 获得当前的路径的名字:

function TMyFtp.GetCurrentDirectory: string;

var

Len: Integer;

S: string;

begin

Len := 0;

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

SetLength(S

Len);

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

Result := S;

end;

这个函数声明如下:

function FtpGetCurrentDirectory(

hFtpSession: HINTERNET; // handle from InternetConnect

lpszCurrentDirectory: PChar; // directory returned here

var lpdwCurrentDirectory: DWORD): // buf size of 2nd parameter

BOOL; stdcall; // True on success

如果您把最后一个参数设为0,那么WININET会使用这个参数来返回路径字符串的长度 。接着您可以为您的字符串分配内存,也可以在调用一次这个函数来获得路径的名字。这 个过程在上面的方法中已经演示过了。(注意到*设定长度*的那个调用,Delphi 要求您在类似这样的情况下为新的长字符串分配内存!这是因为这个字符串必须在操作系 统中指定值,而不是在 Delphi 应用程序中指定。结果就是Delphi 不能在类似的情况下 像它通常那样悄悄地为字符串分配内存)

下面是返回在特定路径下当前可用的文件的一系列函数:

function GetFindDataStr(FindData: TWin32FindData): string;

var

S: string;

Temp: string;

begin

case FindData.dwFileAttributes of

FILE_ATTRIBUTE_ARCHIVE: S := 'A';

// FILE_ATTRIBUTE_COMPRESSED: S := 'C';

FILE_ATTRIBUTE_DIRECTORY: S := 'D';

FILE_ATTRIBUTE_HIDDEN: S := 'H';

FILE_ATTRIBUTE_NORMAL: S := 'N';

FILE_ATTRIBUTE_READONLY: S := 'R';

FILE_ATTRIBUTE_SYSTEM: S := 'S';

FILE_ATTRIBUTE_TEMPORARY: S := 'T';

else

S := IntToStr(FindData.dwFileAttributes);

end;

S := S + GetDots(75);

Move(FindData.CFilename[0]

S[6]

StrLen(FindData.CFileName));

Temp := IntToStr(FindData.nFileSizeLow);

Move(Temp[1]

S[25]

Length(Temp));

Result := S;

end;

function TMyFtp.FindFiles: TStringList;

var

FindData: TWin32FindData;

FindHandle: HInternet;

begin

FindHandle := FtpFindFirstFile(FFtphandle

'*.*'

FindData

0

0);

if FindHandle = nil then begin

Result := nil;

Exit;

end;

FCurFiles.Clear;

FCurFiles.Add(GetFindDataStr(FindData));

while InternetFindnextFile(FindHandle

@FindData) do

FCurFiles.Add(GetFindDataStr(FindData));

InternetCloseHandle(Findhandle);

GetCurrentDirectory;

Result := FCurFiles;

end;

这里需要注意的关键函数是 ftpFindFirstFile

InternetFindNextFile & InternetCloseHandle 。您可以像调用 Delphi 函数 FindFirst、FindNext & FinClose 一样调用这些函数。特别的是,您使用函数ftpFindFirstFile 来取得这个路径下的第一 个函数。您可以不断地调用 InternetFindNextFile ,直到函数返回"False"为止。当这个进程结束时,调用 InternetCloseHandle 来通知操作系统回收与这个进程相关的内存。

I'm not going to explain this process further in this newsletter.

If you want more information

you might look up FindFirst

in the Delphi help. One final note: Unlike the functions

mentioned in the previous paragraph

TWin32FindData is

not defined in WININET.PAS

but instead can be found

in the WIN32 help file that ships with Delphi. It is declared

in the WINDOWS.PAS file that ships with Delphi.

我不准备在这里进一步解析这个进程。如果您想要更多的信息,您可以在 Delphi 帮助中查找 FindFirst 。最后提醒一句:并不向前文提及的函数,TWin32FindData 并不 是在 WININET.PAS 中定义的, 但可以在随 Delphi 分发的 WIN32 帮助文件中找到它。 它在随 Delphi 分发的 WINDOWS.PAS 文件中被定义。

接受一个文件

您可以使用 WININET.PAS 文件中的 ftpGetFile 函数来从FTP取回一个文件:

function FtpGetFile(

hFtpSession: HINTERNET; // Returned by InternetConnect

lpszRemoteFile: PChar; // File to get

lpszNewFile: PChar; // Where to put it on your PC

fFailIfExists: BOOL; // Overwrite existing files?

dwFlagsAndAttributes: DWORD; // File attribute-See CreateFile.

dwFlags: DWORD; // Binary or ASCII transfer

dwContext: DWORD): // Usually zero

BOOL stdcall; // True on success

下面是一个如何使用该函数的例子:

function TMyFtp.GetFile(FTPFile

NewFile: string): Boolean;

begin

Result := FtpGetFile(FFTPHandle

PChar(FTPFile)

PChar(NewFile)

False

File_Attribute_Normal

Ftp_Transfer_Type_Binary

0);

end;

如果要知道 dwFlagsAndAttributes 参数中的变量是怎样传递的,请查阅随 Delphi 附送的 WIN32 帮助文件。

典型控制

下面的 Delphi 控制给了你一个通过 WININET FTP 部分建立可视工具的起点。只是因 为,这个控制可以让您是用 Object Inspector 来定义远程服务器(RemoteServer)、用户 身份(UserID)和密码(Password)。

unit Ftp1;

{ FTP example using WININET.PAS rather than

an ACTIVEX control. Requires WININET.PAS and

WININET.DLL. WININET.DLL you can get from

Microsoft

WININET.PAS is available from

www.borland.com

or with some versions of

Delphi 2.0.

You might Respond to OnNewDir events as follows:

procedure TForm1.FTP1NewDir(Sender: TObject);

begin

ListBox1.Items := MyFtp1.FindFiles; // Get the directory list

end;

}

interface

uses

Windows

Classes

WinINet

SysUtils;

type

TMyFtp = class(TComponent)

private

FContext: Integer;

FINet: HInternet;

FFtpHandle: HInternet;

FCurFiles: TStringList;

FServer: string;

FOnNewDir: TNotifyEvent;

FCurDir: string;

FUserID: string;

FPassword: string;

function GetCurrentDirectory: string;

procedure SetUpNewDir;

protected

destructor Destroy; override;

public

constructor Create(AOwner: TComponent); override;

function Connect: Boolean;

function FindFiles: TStringList;

function ChangeDirExact(S: string): Boolean;

function ChangeDirCustom(S: string): Boolean;

function BackOneDir: Boolean;

function GetFile(FTPFile

NewFile: string): Boolean;

function SendFile1(FTPFile

NewFile: string): Boolean;

function SendFile2(FTPFile

NewFile: string): Boolean;

function CustomToFileName(S: string): string;

published

property CurFiles: TStringList read FCurFiles;

property CurDir: string read FCurDir;

property UserID: string read FUserID write FUserID;

property Password: string read FPassword write FPassword;

property Server: string read FServer write FServer;

property OnNewDir: TNotifyEvent read FOnNewDir

write FOnNewDir;

end;

procedure Register;

implementation

uses

Dialogs;

// A few utility functions

function GetFirstToken(S: string; Token: Char): string;

var

Temp: string;

Index: INteger;

begin

Index := Pos(Token

S);

if Index < 1 then begin

GetFirstToken := '';

Exit;

end;

Dec(Index);

SetLength(Temp

Index);

Move(S[1]

Temp[1]

Index);

GetFirstToken := Temp;

end;

function StripFirstToken(S: string; Ch: Char): string;

var

i

Size: Integer;

begin

i := Pos(Ch

S);

if i = 0 then begin

StripFirstToken := S;

Exit;

end;

Size := (Length(S) - i);

Move(S[i + 1]

S[1]

Size);

SetLength(S

Size);

StripFirstToken := S;

end;

function ReverseStr(S: string): string;

var

Len: Integer;

Temp: String;

i

j: Integer;

begin

Len := Length(S);

SetLength(Temp

Len);

j := Len;

for i := 1 to Len do begin

Temp[i] := S[j];

dec(j);

end;

ReverseStr := Temp;

end;

function StripLastToken(S: string; Token: Char): string;

var

Temp: string;

Index: INteger;

begin

SetLength(Temp

Length(S));

S := ReverseStr(S);

Index := Pos(Token

S);

Inc(Index);

Move(S[Index]

Temp[1]

Length(S) - (Index - 1));

SetLength(Temp

Length(S) - (Index - 1));

StripLastToken := ReverseStr(Temp);

end;

procedure Register;

begin

RegisterComponents('Unleash'

[TMyFtp]);

end;

constructor TMyFtp.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

FCurFiles := TStringList.Create;

FINet := InternetOpen('WinINet1'

0

nil

0

0);

end;

destructor TMyFtp.Destroy;

begin

if FINet <> nil then

InternetCloseHandle(FINet);

if FFtpHandle <> nil then

InternetCloseHandle(FFtpHandle);

inherited Destroy;

end;

function TMyFtp.Connect: Boolean;

begin

FContext := 255;

FftpHandle := InternetConnect(FINet

PChar(FServer)

0

PChar(FUserID)

PChar(FPassWord)

Internet_Service_Ftp

0

FContext);

if FFtpHandle = nil then

Result := False

else begin

SetUpNewDir;

Result := True;

end;

end;

function TMyFtp.GetCurrentDirectory: string;

var

Len: Integer;

S: string;

begin

Len := 0;

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

SetLength(S

Len);

ftpGetCurrentDirectory(FFTPHandle

PChar(S)

Len);

Result := S;

end;

procedure TMyFtp.SetUpNewDir;

begin

FCurDir := GetCurrentDirectory;

if Assigned(FOnNewDir) then

FOnNewDir(Self);

end;

function GetDots(NumDots: Integer): string;

var

S: string;

i: Integer;

begin

S := '';

for i := 1 to NumDots do

S := S + ' ';

Result := S;

end;

function GetFindDataStr(FindData: TWin32FindData): string;

var

S: string;

Temp: string;

begin

case FindData.dwFileAttributes of

FILE_ATTRIBUTE_ARCHIVE: S := 'A';

// FILE_ATTRIBUTE_COMPRESSED: S := 'C';

FILE_ATTRIBUTE_DIRECTORY: S := 'D';

FILE_ATTRIBUTE_HIDDEN: S := 'H';

FILE_ATTRIBUTE_NORMAL: S := 'N';

FILE_ATTRIBUTE_READONLY: S := 'R';

FILE_ATTRIBUTE_SYSTEM: S := 'S';

FILE_ATTRIBUTE_TEMPORARY: S := 'T';

else

S := IntToStr(FindData.dwFileAttributes);

end;

S := S + GetDots(75);

Move(FindData.CFilename[0]

S[6]

StrLen(FindData.CFileName));

Temp := IntToStr(FindData.nFileSizeLow);

Move(Temp[1]

S[25]

Length(Temp));

Result := S;

end;

function TMyFtp.FindFiles: TStringList;

var

FindData: TWin32FindData;

FindHandle: HInternet;

begin

FindHandle := FtpFindFirstFile(FFtphandle

'*.*'

FindData

0

0);

if FindHandle = nil then begin

Result := nil;

Exit;

end;

FCurFiles.Clear;

FCurFiles.Add(GetFindDataStr(FindData));

while InternetFindnextFile(FindHandle

@FindData) do

FCurFiles.Add(GetFindDataStr(FindData));

InternetCloseHandle(Findhandle);

GetCurrentDirectory;

Result := FCurFiles;

end;

function TMyFtp.CustomToFileName(S: string): string;

const

PreSize = 6;

var

Temp: string;

TempSize: Integer;

begin

Temp := '';

TempSize := Length(S) - PreSize;

SetLength(Temp

TempSize);

Move(S[PreSize]

Temp[1]

TempSize);

Temp := GetFirstToken(Temp

' ');

Result := Temp;

end;

function TMyFtp.BackOneDir: Boolean;

var

S: string;

begin

S := FCurDir;

S := StripLastToken(S

'/');

if S = '/' then begin

Result := False;

Exit;

end;

if S <> '' then begin

ChangeDirExact(S);

Result := True;

end else begin

ChangeDirExact('/');

Result := True;

end;

end;

// Changes to specific directory in S

function TMyFtp.ChangeDirExact(S: string): Boolean;

begin

if S <> '' then

FtpSetCurrentDirectory(FFTPHandle

PChar(S));

Result := True;

FindFiles;

SetUpNewDir;

end;

// Assumes S has been returned by GetFindDataString;

function TMyFtp.ChangeDirCustom(S: string): Boolean;

begin

S := CustomToFileName(S);

if S <> '' then

FtpSetCurrentDirectory(FFTPHandle

PChar(S));

Result := True;

FindFiles;

SetUpNewDir;

end;

function TMyFtp.GetFile(FTPFile

NewFile: string): Boolean;

begin

Result := FtpGetFile(FFTPHandle

PChar(FTPFile)

PChar(NewFile)

False

File_Attribute_Normal

Ftp_Transfer_Type_Binary

0);

end;

function TMyFtp.SendFile1(FTPFile

NewFile: string): Boolean;

const

Size:DWord = 3000;

var

Transfer: Bool;

Error: DWord;

S: string;

begin

Transfer := FtpPutFile(FFTPHandle

PChar(FTPFile)

PChar(NewFile)

Ftp_Transfer_Type_Binary

0);

if not Transfer then begin

Error := GetLastError;

ShowMessage(Format('Error Number: %d. Hex: %x'

[Error

Error]));

SetLength(S

Size);

if not InternetGetLastResponseInfo(Error

PChar(S)

Size) then

begin

Error := GetLastError;

ShowMessage(Format('Error Number: %d. Hex: %x'

[Error

Error]));

end;

ShowMessage(Format('Error Number: %d. Hex: %x Info: %s'

[Error

Error

S]));

end else

ShowMessage('Success');

Result := Transfer;

end;

function TMyFtp.SendFile2(FTPFile

NewFile: string): Boolean;

var

FHandle: HInternet;

begin

FHandle := FtpOpenFile(FFTPHandle

'sam.txt'

GENERIC_READ

FTP_TRANSFER_TYPE_BINARY

0);

if FHandle <> nil then

InternetCloseHandle(FHandle)

else

ShowMessage('Failed');

Result := True;

end;

end.

无人驾驶汽车真的要来了:飞思卡尔研制视觉芯片 支持物联网开发! Qt发布5.3版与嵌入式企业版 5月23日:Java已经19岁啦! Google发布Dart1.4版本,新增Observatory工具 《近匠》Mixtile:跑在盒子中的嵌入式平台 从研发、平台化到营销:移动时代,汽车厂商如何升级? CTO俱乐部“云计算创新与实践”沙龙:云计算的发展趋势与那些“坑” 一周消息树:大型网站系统与Java中间件 良心推荐:6款基于云的移动应用开发工具 Google Project Tango第二弹:可生成3D图像的平板电脑 API企业化战略部署三部曲(一) 高通产品市场经理刘晓光:详解骁龙Android SDK 苹果史上最大交易:斥资30亿美元收购Beats 微软是否应该提高Windows版本的推送频率? 咸鱼大翻身?索尼将发展可穿戴游戏设备 popping:基于Facebook Pop引擎的iOS动画库 《近匠》专访极路由CTO康神 真正智能中心应当这样做 为什么说Android才是游戏开发者的乐土? 开发移动医疗应用必知的10个掘金点 个推CTO叶新江:云推送技术如何助力产品开发 《近匠》Face++:漫谈人脸识别 无线充电技术赛高:随意走动也能电量满格 体验至上!移动Web应用JavaScript UI库App.js 专访中国国航:传统行业的“轻应用观” 开发者找众筹,哪些网站更靠谱? 48小时脑力激荡 中美青年创客大赛英特尔北京选拔赛 “微应用+大平台”推动企业软件走向碎片化 浅谈Hive vs. HBase 十款最新的JavaScript开发工具 JavaScript Promise启示录 百度携多位安全专家深入探讨安全人才快速培养机制 我报了中程谁有历年的中程试卷? 我收到的信都是?号,怎么看???? VB中是否有移位操作符??是否有_能够得到数据类型宽度的函数? 哪里有core java的e版down啊? 有事好商量!请进! DLL编程错误,请高手指教一下!! 活见鬼,真气人....... 问一个trigger问题? 问一下:我的char*都用_T("asdfsafd")表示了,资源也没任何问题,可有时候运行程序显示乱码 在论坛里,发一个帖子新开一个窗口,当发完后让原来那个窗口刷新一下 我的机子到底怎么回事???? 我试试.. CListCtrl中如何选定整个一行? 来到济南天气太热,特来送分 ★★★★★ 见于现在伪ID和盗用密码的现象十分嚣张,我提议…… ★★★★★ 请教各位,我用vb6.0访问ms sql7.0数据库,为什么有时出现,“过期,数据已超时?” 请问COM和DLL有什么区别和联系?(30分) 关于侯老师 win95-a-developers-guide 一书的源配书... ISAPI中不能存取ASP中的Session、Application变量?高手你老人家在哪里? 大家来看看这些招聘题目合不合适 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一 activeskin里的skinbuilder有谁用过???来讨论吧 我在msdn上看到vb中的字符串有两种:定长字符串和变长字符串。请问如何分别声明这两种类型? 怎样在ADO中引用已打开的recordset的某一字段值,请给几个例,谢谢了! seedundersnow and holyfire help me!about 8253! 谁有cute ftp 4.2.6 beta的注册码 请问如何把页面查询到的记录导入到Excel中呢? 有用过TAdvStringGrid的吗?OnGetEditorType( )为何不被调用? 请教高手如何用Xsl编制函数控制Xml??急急 哪位给一个MD5的例子!谢谢了 长春的李延生来领分 求救:一个VC中多线程的问题 提个问题,原来对VC尤其是界面和C++语法这一块比较熟,现在由于公司需要转C++BUILDER,难不难,需要熟悉哪些 [总300分,会继续加分]哪位大哥用编程实现过创建SQL Server的DTS package并且run the package的全过程[急] 能不能使用html 压缩中提到的文件头有什么作用 , 保含哪些信息 菜鸟问题1 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一。。。。。。。 关于:import java.util.StringTokenizer; 问题! 如何实现在某特定时间(如每月1号,或7天后)执行特定asp程序? 在开发工具中如:(vc,jsp)中如何得到oracle中自定义函数的返回值 当form被移动的时候会相应什么事件的? 关于使用mscomm32.ocx中的一些问题 类似股票信息显示系统的问题(图形显示) 强烈抗议:无怨无仇,为什么冒用我的ID 写一些乱七八糟的东西????? 一个简单的线程问题! 请问高手:两个类之间的关联关系如何实现? 各位请问, 我的系统要求支持三种语言, BIG5,GB2312,ENGLISH,数据库应该怎样设计!! 求救!!!vfp ,控件 optiongroup1, 属性 ButtonCount=N,如何给第N个OPtionN.Caption赋值 假如上天给你一个机会。。。请看过来。。。 如何配置IIS 使其利用TOMCAT 支持JSP AND SERVLET ? {5/6-(2/5+1/3)}x5/7分数啊.急 设x1,x2是关于x的一元二次方程x的平方-2mx+m-1=0的两个实根,则(x1+5x2)(x2+5x1)的最小值为? 解方程:5x2+7x+12=0五x的平方+七x+12=0 编写一个程序,计算x-1/2*x3/4+1/2*3/4*x5/6-1/2*3/4*5/6*x7/8+.的近似值直到最后一项的绝对值小于eps 用c语言编~ 设X1,X2为方程x²(平方)+X-3=0的两个根,求X1³(立方)-X2²(平方)+30的值 x减0.7x等于3.6 (X一5/6)X5/6=25. 设函数f(x)=x3-6x+5,xεR1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 x-0,7x等于什么 解方程,(x+5.5)X5=120怎么算用T等式 求函数f(x)=x3-5x2+8x-4在【0,3】上的值域 X-0.7x等于多少 计算(一5)一(一5)x5分之一x(一4) 设函数f(x)=x3-6x+5,xεR 1;求函数fx的单调区间 2,求函数fx在区间[设函数f(x)=x^3-6x+5,xεR 1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 5x2=1打 成语5x2=1打一成语 已知sinθ,cosθ是关于x的方程x^2-ax+a=o的两个根 θ求1.sin^3(θ)+cos^3(θ)的值2.tanθ+1/tanθ的值 f(x)=2^2x-5x2^x-1+1,它的最小值是?RT.实在算不出来了,只能求助各位大大了0.0f(x)=(2^2x)-(5x2^x-1)+1 1分之1等于1是什么成语 已知关于x的方程2x^2-〔(根号3)+1〕x+m=0的两根为 sin θ,cos θ ,θ∈(0,2π)1.sinθ/(1-cotθ)+cosθ/(1-tanθ)的值2.m的值3.方程的两根及此时θ的值 用秦九韶算多项式f(x)=6x2+3x2-5x2+4当X=4的值时需要把多项式改写成什么 5x2 =1打一成语 已知 θ∈【0,2π】sinθ,cosθ是关于X的方程X方-KX+K+1=0的根,求角θ 已知函数f(x)=0.5x2-x+1.5的定义域和值域都是[1,-b],求b的值. 1*1等于1,根据提示写成语还有12345679 已知关于x的方程2x^2-(√3+1)x+m=0的两个实数根为sinθ和cosθ,θ属于(0,2π)求方程的根及θ的值 已知f(x)是二次函数,且f(x)+f(2x)=5x2+3x+2,求f(x) 0+0等于一什么成语 设x1、x2 是一元二次方程x2+4x-3=0的两个根,2x1(x22+5x2-3)+a =2,  则a = .设x1、x2是一元一次方程X平方+4x-3=0的两根,2x1(x2的平方+5x2-3)+a=2,则a=我知道怎么算了 a=8 心情好啊 f(x)=5(x≤1) f(x)=1/x-1(x﹥1) f(5)= f(1/2)=f(x)=5(x≤1)f(x)=1/x-1(x﹥1)f(5)=f(1/2)= 拍立得相机拍出来的照片效果相当于数码相机的多少像素 设X1、X2是一元二次方程 X - 4X - 3 = 0 的两个根,2X1(X2+5X2-3)+a=2,则a=___ f(x)=x(1-x)(x大于等于0) f(x)=x(1+x)(x小于0)判断f(x)奇偶性 9 8 7 6 5 4 3 2 1中间加上加减号等于21咋写 急 设x1,x2是一元二次方程x²+4x-3=0的两个根,2x1(x2²+5x2-3)+a=2,则a= 已知f(x)=x(1/2x-1+1/2)⑴判断f(x)的奇偶性 ⑵求证:f(x)大于0 5X^2-2根号15X+3等于0, 关于x的实系数一元二次方程x²+ax+2b=0的两个实数根分别位于区间(0,1)(1,2)则b-2/a-1的取值范围是 已知函数f(x)=1/2^x-1+1/2 求f(x)的定义域 判断函数f(x)的奇偶性 证明当X大于0时f(x)大于0 若y等于根号下5x减1再加根号下1减5x,则5x加y等于几 关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2) 则实数a的取值范围 求 函数f(x)=x(x大于-1小于等于1)的奇偶性是A :奇函数非偶函数B:偶函数非奇函数C:奇函数且偶函数D:非奇函数偶函数 已知A=4x²-10x+8,B=5x²-6x+8,C=2x²-3,①求(a-b)*C②当X=-2时,求(A-b)*C 设实系数一元二次方程x^2+ax+2b-2=0有两个相异实根,其中一根在区间(0,1)内,另一根在区间(1,2)内,则(b-4)/(a-1)的取值范围是我知道这题可用线性规划做.想问下,为什么不能用韦达定理,也就是 已知函数f(x)对任意实数X,y恒有f(x+y)=f(x)+f(y)且当x大于0f(x)小于0 判断f(x)奇偶性并证明判断f(x)的单调性,并证明之 4/5x2=4x2一5x2=8/10=4/5是对还是错 实系数一元二次方程x²+ax+2b=0有两个根,一个根在区间(0,1),另一个根在区间(1,2)内,求:(1),点(a,b对应的区域的面积?(2).b-2/a-1的取值范围.(3).(a-1²)+(b-2)²的值域 请计算 +8!+9!+...+2006!的第十位+8!+9!+...+2006!的和的第十位,谢谢楼下的回答!请问是怎样得出n=45时最后的10位数据已经是全0了呢? 当x变化时,分式3x2+6x+5/0.5x2+x+1的最小值为多少3x2,0.5x2指3倍的x的平方,0.5倍的x的平方尽量按一元二次方程格式 把一元二次方程-5x2+x-3=0的二次项系数变为正数,且使方程的根不变,则变形后的方程为().这是选项:A.5x2-x-3=0 B.5x2-x+3=0 C.5x2+x-3=0 D.5x2+x+3=0 (-30)除以(3/1-5/1-15/1)等于多少 已知A=4x²-10x+8,B=5x²-6x+8,C=2x²-3,求(A-B)C分解因式 已知sina是方程5x2+7x-6=0的根求[sin(3π/2-a)tan(2π-a)]/[cos(π/2-a)cos(π/2+a)]的值 48*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*1548*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*15 6x-6.5x2=8求方程 已知方程5x2+kx-6=0的一个根式2,求它的另一个根及K的值 -30除以(3分之1—5分之1—15分之一) 已知A=1-x2,B=x2-4x-3,C=5x2+4,求多项式A-2[A-B-2(B-C)]的值,其中x=-1 超急! 2/5x2/10+9/10x0.4-2除以5x1/10,x:是乘,尽快,我明天要演讲了 设X1,X2是方程X的平方+X-3=0的两个根,则X1的立方-4X2的平方+19的值是 若sina是5x2-7x-6=0的根,则
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn