2012-01-06 9 views
1

ベンダのAPIを使用してメッセージのxml部分を取得する際に問題が発生します。 getDestination(加えるvoid void *メッセージ、*先、void *型のサイズ)不透明なポインタを使用してxmlデータを取得する

vendordestinationtype_t dest; 
getDestination(msg_p, &dest, 16); 
printf("Received message. (Destination: %s).\n", dest.dest); 

を生成します:どのような作品の一例として、受信したメッセージを。 (目的地:ある目的地)。

HoeverそれはgetXmlPtrある機能が必要ですメッセージのXML部分取得する(無効のvoid *のMSGを、** xml_ptr、void *型xml_length)

char ptr[10000]; 
int size; 
getXmlPtr(msg_p, (void**)&ptr, &size); 
printf("Received message. (XML: %s).\n", ptr); 

がそこで問題は、私は宣言しないか、あります私はxml情報を得ることができるような方法でptrを渡します(ベンダーのドキュメントは本当に悪いです)。それは、引数がアプリケーションのポインタへのポインタでなければならないと主に言います。プログラマは、返されたvoidポインタをアプリケーションに適した参照にキャストすることができます。

答えて

0

まあ、あなたはvoidへのポインタとしてvoidへのポインタを宣言します:void *ptr;

+0

私はキャストがprintfステートメントによって行われると思いますか?私はそういう前にそれをやっていたとき、私が間違っていたことだと思う。ありがとう! – Buraan

+0

@Buraanそれは本当にあなたがそれでやりたいことに依存しますが、ええ。また、呼び出しにキャストできますが、互換性のある型(ポインタへのポインタとポインタへのポインタは2種類あります)が必要です。 –

0

void**は、参照によってポインタを渡していることを意味します。 XMLデータが格納されている場所を指し示すようにこれを修正します。だから、配列ではなくポインタが必要です:

void * ptr; 
int size; 
getXMLPtr(msg_p, &ptr, &size); 
+0

'char **'は暗黙的に 'void **'に変換されません。 –

+0

あなたはとてもシンプルに見えますが、助けを歓迎します – Buraan

+0

@Let_Me_Be:そうです。私はコードをコピーしながら私の脳に従事するのを忘れた。 –

関連する問題