我正在爲Chrome編寫一個SIMBL插件,我得到一個未暴露類型的特定實例,它以C編寫爲NSConcreteValue
。我不能打開它或在其上執行選擇器,但我可以通過[myInstance objCType]
獲取其類型字符串。我可以將NSConcreteValue轉換爲它的objCType嗎?
我說的類型是GURL
。
下面是一些代碼:
NSArray* tabViews = [tabStripController performSelector:@selector(tabViews)];
for (id tabView in tabViews) {
id tabController = [tabView valueForKey:@"controller_"];
id tabTitle = [tabController valueForKey:@"toolTip"];
id tabUrl = [tabController valueForKey:@"url_"];
NSLog(@"%@", tabTitle);
NSLog(@"%s", [tabUrl objCType]);
}
標籤名稱是不是一個問題,因爲它是一個NSString
。
[tabUrl objCType]
返回此:
{GURL={basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >={__compressed_pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, std::__1::allocator<char> >={__rep=(?={__long=QQ*}{__short=(?=Cc)[23c]}{__raw=[3Q]})}}}B{Parsed={Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}^{Parsed}}{unique_ptr<GURL, std::__1::default_delete<GURL> >={__compressed_pair<GURL *, std::__1::default_delete<GURL> >=^{GURL}}}}
GURL
有一個名爲spec_
財產,我想訪問,以獲得GURL實例的ASCII字符串。
這裏是GURL:https://chromium.googlesource.com/chromium/src/+/lkgr/url/gurl.h
是任何幫助的objCType字符串?
我不這麼認爲,並非沒有編寫具有C++ ABI知識的代碼。我認爲一個更好的調查計劃是編譯爲ObjC++和/或爲'GURL'製作一個ObjC包裝器。 –
謝謝喬希。所以你說如果我編譯爲ObjC++,我的類將擁有包含的C++類型的知識?在任何情況下,我想我必須刪除'@ import'語句,因爲當我保存爲.mm時,編譯時會出現'模塊被禁用'的錯誤。 – ohdeerdog
我這麼認爲,但你可能也必須包含標題。希望我可以更具體一些:恐怕我不是有經驗的人。但是如果我正在研究這個問題,那麼這就是我所看到的方向。 –