0

gSOAPを使用してSOAPWebサービスに情報を要求しています

SOAPWebサービスはオブジェクトを返します。「dataconnector」という呼び出しでリクエストを実行します

dataconnectorでは、返されたオブジェクトのすべての値を出力できますが、それ以外では、オブジェクト内のすべての参照値はnullです。

私はいくつかの検索を行いましたが、soap_unlink()を使用して割り当て解除チェーンから削除しない限り、gSOAPはすべてを削除します。

私は試しましたが、これは私のコードではありませんでした

私が間違っていることについてのアイデアはありますか?

QList<ns1__calls*> calls;

datacheckPortBindingProxy service;
ns1__getCalls request;
std::string un("4444");
request.username = &un;
ns1__getCallsResponse response;
if (service.getCalls(&request, &response) == SOAP_OK){
    qDebug() << "succesfull response";
    for(unsigned int i = 0; i< response.return_.size(); i++){
    ns1__calls* call = response.return_.at(i);

    qDebug() << QString(call->roomId->c_str());
    qDebug() << "      with type_id: " << (call->typeId-1) ;

    calls.append(call);
    soap_unlink(request.soap, call);
}

編集

nvmは、オブジェクトの個別の値をすべてリンク解除する必要があります。

このような:

soap_unlink(response.soap, call->roomId);
soap_unlink(response.soap, call->display);
soap_unlink(response.soap, call->location);
soap_unlink(response.soap, call->staffAidId);
soap_unlink(response.soap, call->firstName);
soap_unlink(response.soap, call->lastName);

もっと簡単な方法はありませんか?

4

1 に答える 1

1

これは特定の gSOAP や Web サービスに関する質問ではありません。変数がスコープ外になると、使用していたメモリの割り当てが解除されます。私の意見では、gSOAP が予約したメモリのリンクresponseを解除すべきではありません。リンクを解除する場合は、解放する責任があります。

ns1__callsその方法は、ポインターによって参照されるオブジェクトのコピーを作成することです。

QList<ns1__calls> calls; // QList of instances instead of pointers
...
calls.append(*call); // append a copy
// soap_unlink(request.soap,call); // not needed!
于 2011-05-19T20:47:24.903 に答える