因工作需要,要从 ArcEngine的 serverStyle里面得到以前保存的Symbol,昨天试验了半天,没有成功,今天到END上找了个Java的例子,按照上面,终于成功了。
在这里严重批评 ESRI公司的帮助文档和函数命名,很多东西都没有写清楚(特别是参数的含义),很容易把人搞糊涂和微软公司的MSDN的帮助比起来,简直就是幼儿园水平!!!!。严重鄙视之。
IStyleGalleryPtr ipStyleGall(CLSID_ServerStyleGallery);
IStyleGalleryStoragePtr ipSGS(ipStyleGall);
HRESULT hr;
//只用用这种方法才能得到Symbol
ipSGS->AddFile(CComBSTR("C:\\Caves.ServerStyle"));
//本来是想用以下两个方法,可是死活读取不到里面的内容,严重鄙视之
// hr = ipStyleGall->ImportStyle(CComBSTR("C:\\Caves.ServerStyle"));
// hr = ipStyleGall->LoadStyle(CComBSTR("C:\\Caves.ServerStyle"),CComBSTR("Marker Symbols"));
long lCount;
hr = ipStyleGall->get_ClassCount(;lCount);
IStyleGalleryClassPtr ipStyleGallClass;
CComBSTR bstrName;
for(int i=0 ;i{
hr = ipStyleGall->get_Class(i,;ipStyleGallClass);
hr = ipStyleGallClass->get_Name(;bstrName);
IEnumStyleGalleryItemPtr ipEnumStyleGallItem;
//第一个参数是Class名字,第二个参数未搞明白,第三个参数是 category名字
//严重鄙视他的帮助说明,强烈到极点
hr = ipStyleGall->get_Items(bstrName,CComBSTR(""),CComBSTR(""),;ipEnumStyleGallItem);
IStyleGalleryItemPtr ipStyleGallItem;
hr = ipEnumStyleGallItem->Next(;ipStyleGallItem);
while (ipStyleGallItem)
{
IUnknownPtr ipUnknowed;
ipStyleGallItem->get_Item(;ipUnknowed);
ISymbolPtr ipSymbol(ipUnknowed);
if(ipSymbol)
{
...做你想做的操作
}
ipEnumStyleGallItem->Next(;ipStyleGallItem);
}
}