天天看點

在C++下實作的程式撥号代碼

下面是一段撥号代碼(摘自Nokia的例子),代碼雖然不多,但很多地方都值得學習,例如:對R類的使用,清理;server/client機制;參數傳遞機制;編碼風格;注釋風格等等自己體會吧。

 在閱讀代碼之前請熟悉Symbian OS C++中的ETel結構,以及它的核心類RTelServer,RPhone,RLine,RCall.

下面是代碼内容:

void DialNumberL(const TDesC& aPhoneNumber)

{

//Create a connection to the tel server

RTelServer server;

CleanupClosePushL(server);

User::LeaveIfError(server.Connect());

//Load in the phone device driver

User::LeaveIfError(server.LoadPhoneModule(KTsyName));

//Find the number of phones available from the tel server

TInt numberPhones;

User::LeaveIfError(server.EnumeratePhones(numberPhones));

//Check there are available phones

if (numberPhones < 1)

User::Leave(KErrNotFound);

}

//Get info about the first available phone

RTelServer::TPhoneInfo info;

User::LeaveIfError(server.GetPhoneInfo(0, info));

//Use this info to open a connection to the phone, the phone is identified by its name

RPhone phone;

CleanupClosePushL(phone);

User::LeaveIfError(phone.Open(server, info.iName));

//Get info about the first line from the phone

RPhone::TLineInfo lineInfo;

User::LeaveIfError(phone.GetLineInfo(0, lineInfo));

//Use this to open a line

RLine line;

CleanupClosePushL(line);

User::LeaveIfError(line.Open(phone, lineInfo.iName));

//Open a new call on this line

TBuf <100> newCallName;

RCall call;

CleanupClosePushL(call);

User::LeaveIfError(call.OpenNewCall(line, newCallName));

//newCallName will now contain the name of the call

User::LeaveIfError(call.Dial(aPhoneNumber));

//Close the phone, line and call connections and remove them from the cleanup stack

//NOTE: This does not hang up the call

CleanupStack::PopAndDestroy(3);//phone, line, call

//Unload the phone device driver

User::LeaveIfError(server.UnloadPhoneModule(KTsyName));

//Close the connection to the tel server and remove it from the cleanup stack

CleanupStack::PopAndDestroy(&server);

}   //end

繼續閱讀