2011-07-11 22 views
0

有如下因素代碼:STRINGZ_TO_NPVARIANT在Xcode問題

NPVariant type; 
STRINGZ_TO_NPVARIANT("click", type); 

和Xcode的返回

「錯誤: 'uint32_t的' 前預期的表達」

誰能給我個忙?

+0

如果你還沒有,你可以考慮使用FireBreath的(http://www.firebreath.org),而不是直接寫入NPAPI;桌面上的情況非常少,FireBreath並不是比自己更好的解決方案,特別是因爲它已經針對許多不同的瀏覽器問題進行了測試和穩定的解決方法。 – taxilian

回答

2

我碰到了這一點。基於我在npapi項目中發現的這個錯誤,我通過不使用宏解決了這個問題,並且使用它擴展到的內容,然後應用修補程序顯示的內容。 http://code.google.com/p/npapi-headers/issues/detail?id=3

- NPString str = {_val,uint32_t(strlen(_val))};

+ NPString str = {_val,(uint32_t)(strlen(_val))};

基本上,在括號中包裝uint32_t,然後gcc會編譯它。

所以完全替換爲宏是

NPVariant type; 
type.type = NPVariantType_String; 
NPString str = { "click", (uint32_t)(strlen("click")) }; 
type.value.stringValue = str; 
0

如果檢查what this macro resolves into你:

NPVariant type; 
type.type = NPVariantType_String; 
NPString str = { "click", uint32_t(strlen("click")) }; 
type.value.stringValue = str; 

至少這樣可以明白什麼是錯誤消息指。我仍然不確定錯誤的原因是什麼 - 也許你的Xcode或gcc版本已經過時了。根據the documentation你至少需要Xcode 2.5和gcc 4.2。

0

在npruntime.h找到這兩個MACRO

#define STRINGZ_TO_NPVARIANT(_val, _v)          \ 
NP_BEGIN_MACRO                \ 
    (_v).type = NPVariantType_String;           \ 
    NPString str = { _val, **(uint32_t)** strlen(_val) };       \ 
    (_v).value.stringValue = str;            \ 
NP_END_MACRO 

#define STRINGN_TO_NPVARIANT(_val, _len, _v)         \ 
NP_BEGIN_MACRO                \ 
    (_v).type = NPVariantType_String;           \ 
    NPString str = { _val, **(uint32_t)**_len };         \ 
    (_v).value.stringValue = str;            \ 
NP_END_MACRO 

加(uint32_t的)投strlen的前(_Val)和_len