2015-09-06 65 views
3

我正在使用bloomberg API來編寫cpp項目。
當我需要發送請求到彭博數據饋送時,我必須發送帶有ID的請求。例如:
C++ bloomberg api correlationId

session->sendRequest(*request, CorrelationId(20)); 

CorrelationId由伯格API提供以生成的ID。
此處的ID爲20.來自bloomberg數據饋送的結果包含ID 20,以便我可以識別結果和請求。這意味着,當我從該數據源得到的結果,也有一些是這樣的:而不是INT ID
correlationId=[ valueType=INT classId=0 value=20 ]

現在我想打一個字符串ID。例如,我想生成一個如CorrelationId("US543119ES")的ID。
如果我這樣做,我沒有得到任何錯誤,但在結果的ID變爲:
correlationId=[ valueType=POINTER classId=0 value=00731378 ]

看來,ID變成一個指針,並將其發送,而不是指針的內容的指針的值, 。很顯然value=00731378是一個地址。

是不可能產生一個字符串ID?
如果可能,我該怎麼辦?
我找到了CorrelationId的文檔。

還有的CorrelationId兩個構造函數,我不知道怎麼用,我不知道,如果他們中的一個是我需要的:

CorrelationId (void *value, int classId=0); 
template<typename TYPE > 
CorrelationId (const TYPE &smartPtr, void *pointerValue, int classId=0); 

回答

4

如果我們要生成一個字符串ID,我們可以發送字符串的地址。然後,bloomberg數據饋送會將我們發回的地址,其類型爲void *。所以我們只需要將它轉換成char *。這裏有一個例子:

// sending 
const char * id = "abc"; 
session->sendRequest(*request, CorrelationId(const_cast<char *>(id))); // it can't take "const char *" 

// handling response 
cout << (char *)message.correlationId().asPointer(); // it will show "abc". 
+1

這是解決這個問題的正確方法,你只需要確保您使用至少只要將生活作爲請求和響應,繩子,讓指針將繼續指向它(而不是隨機數據可能已經取代了字符串)。 –

+0

@ KevinP.Fleming是的。究竟。感謝您的補充。 – Yves