2010-03-24 7 views
0

J'ai une application Windows Mobile 6 utilisant TAPI 2.0. lineGetAddressID() est nécessaire pour obtenir l'identifiant d'adresse utilisé par plusieurs appels dans l'API téléphonique, mais je n'arrive pas à le faire fonctionner.TAPI lineGetAddressID() échoue avec LINEERR_INVALADDRESS

J'ai essayé ce qui suit en vain:

HLINE line; // valid handle from lineOpen(); 
DWORD addr_id = 0; 
result = ::lineGetAddressID(line, &addr_id, LINEADDRESSMODE_DIALABLEADDR, L"1234", 5); 
result = ::lineGetAddressID(line, &addr_id, LINEADDRESSMODE_DIALABLEADDR, L"5551234", 8); 
result = ::lineGetAddressID(line, &addr_id, LINEADDRESSMODE_DIALABLEADDR, L"1115551234", 11); 
result = ::lineGetAddressID(line, &addr_id, LINEADDRESSMODE_DIALABLEADDR, L"11115551234", 12); 

Toutes les retourner LINEERR_INVALADDRESS. Quelqu'un peut-il indiquer ce que je fais peut-être mal? Comme une question secondaire, comment puis-je obtenir par programme l'adresse? Il apparaît dans la structure LINEADDRESSCAPS renvoyée par lineGetAddressCaps(), mais cela nécessite un identifiant d'adresse (qui devrait provenir de lineGetAddressID(), ce qui nécessite une adresse ...).

Note: Je me rends compte que je pourrais utiliser 0 comme identifiant d'adresse et cela fonctionnera probablement, mais je n'ai aucune garantie que cela fonctionnera pour toutes les plateformes. Je voudrais que cela soit résolu "juste".

Merci, PaulH

Répondre

0

Lorsque vous appelez lineGetDevCaps l'un des membres de la structure LINEDEVCAPS, dwNumAddresses, est un compte du nombre d'adresses associées au dispositif de ligne.

TAPI indique que la valeur d'identificateurs d'adresse sont définis comme suit:

identificateurs d'adresses vont de zéro à un de moins que la valeur indiquée par dwNumAddresses.

Vous pouvez parcourir chaque valeur d'identifiant d'adresse dans l'intervalle [0 .. (dwNumAddresses - 1)] et invoquer lineGetAddressCaps que vous avez fourni un identifiant d'adresse valide. Dans ce cas, il n'est pas nécessaire d'utiliser lineGetAddressID car l'identificateur d'adresse est connu et valide.

Si vous faites cela, est-ce que l'une des adresses spécifiées dans la structure LINEADDRESSCAPS correspond à la chaîne utilisée dans vos appels à lineGetAddressID? Notez que votre application est configurée pour utiliser Unicode plutôt qu'ANSI.

+0

Chaque périphérique de ligne a 'dwNumAddresses == 1'. Dans la structure 'LINEADDRESSCAPS', bien que' dwAddressSize == 0'. – PaulH

+0

Lorsque vous appelez 'lineGetAddressCaps', quelle est la valeur de retour? Est-ce 'LINEERR_STRUCTURETOOSMALL'? Cela peut expliquer pourquoi la valeur 'dwAddressSize' est 0. – Henk

+0

La valeur de retour est 0. D'autres valeurs sont remplies (par exemple, dwAddressFeatures, dwDeviceClassesSize/Offset, dwAddrCapFlags, etc ...), mais pas dwAddressSize. – PaulH