bool V2vProj::Compute(const data::VectorBarral * barrel) { OGRDataSource * poSourceDs = VectorOpen(barrel->GetSrcDataSource().c_str(), GA_ReadOnly); ON_SCOPE_EXIT([&]() {OGRDataSource::DestroyDataSource(poSourceDs); }); OGRDataSource * poOutputDs = VectorOpen(barrel->GetDstDataSource().c_str(), GA_Update); ON_SCOPE_EXIT([&]() {OGRDataSource::DestroyDataSource(poOutputDs); }); OGRLayer * poSrcLayer = poSourceDs->GetLayerByName( barrel->GetSrcLayer().c_str()); OGRLayer * poDstLayer = poOutputDs->GetLayerByName( barrel->GetDstLayer().c_str()); OGRSpatialReference * poSourceSRS = poSrcLayer->GetSpatialRef(); OGRCoordinateTransformation * poCT = poCT = OGRCreateCoordinateTransformation( poSourceSRS, m_ogrSr); OGRFeatureDefn * poDstFeatureDefn = poDstLayer->GetLayerDefn(); auto features = barrel->GetFeatures(); std::for_each(begin(features), end(features) , [&](int fid) { poSrcLayer->GetFeature(fid); OGRFeature * poDstFeature = OGRFeature::CreateFeature(poDstFeatureDefn); ON_SCOPE_EXIT([&]() {OGRFeature::DestroyFeature(poDstFeature); }); poDstFeature->SetFrom(poSrcLayer->GetFeature(fid)); OGRGeometry * poDstGeometry = poDstFeature->GetGeometryRef(); OGRGeometry * poReprojectedGeom = OGRGeometryFactory::transformWithOptions( poDstGeometry, poCT, NULL); poDstFeature->SetGeometryDirectly(poReprojectedGeom); poDstLayer->CreateFeature(poDstFeature); }); return true; }
std::vector<std::wstring> APlayerWindow::showOpenFile() { HRESULT hr = S_OK; std::vector<std::wstring> filePaths; IFileOpenDialog *fileDlg = NULL; hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&fileDlg)); if (FAILED(hr)) return filePaths; ON_SCOPE_EXIT([&] { fileDlg->Release(); }); IKnownFolderManager *pkfm = NULL; hr = CoCreateInstance(CLSID_KnownFolderManager, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pkfm)); if (FAILED(hr)) return filePaths; ON_SCOPE_EXIT([&] { pkfm->Release(); }); IKnownFolder *pKnownFolder = NULL; hr = pkfm->GetFolder(FOLDERID_PublicMusic, &pKnownFolder); if (FAILED(hr)) return filePaths; ON_SCOPE_EXIT([&] { pKnownFolder->Release(); }); IShellItem *psi = NULL; hr = pKnownFolder->GetShellItem(0, IID_PPV_ARGS(&psi)); if (FAILED(hr)) return filePaths; ON_SCOPE_EXIT([&] { psi->Release(); }); hr = fileDlg->AddPlace(psi, FDAP_BOTTOM); COMDLG_FILTERSPEC rgSpec[] = { { L"ÒôÀÖÎļþ", SupportType } }; fileDlg->SetFileTypes(1, rgSpec); DWORD dwOptions; fileDlg->GetOptions(&dwOptions); fileDlg->SetOptions(dwOptions | FOS_ALLOWMULTISELECT); hr = fileDlg->Show(NULL); if (SUCCEEDED(hr)) { IShellItemArray *pRets; hr = fileDlg->GetResults(&pRets); if (SUCCEEDED(hr)) { DWORD count; pRets->GetCount(&count); for (DWORD i = 0; i < count; i++) { IShellItem *pRet; LPWSTR nameBuffer; pRets->GetItemAt(i, &pRet); pRet->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &nameBuffer); filePaths.push_back(std::wstring(nameBuffer)); pRet->Release(); CoTaskMemFree(nameBuffer); } pRets->Release(); } } return filePaths; }
void UserConfig::OnLogin() { FILE* fp = OpenFile("r"); if (fp == NULL) { int defaultCfg[] = DEFAULT_CONFIG; memcpy(m_UserCfgData, defaultCfg, sizeof(m_UserCfgData)); return; } fseek(fp, 0, SEEK_END); long size = ftell(fp); fseek(fp, 0, SEEK_SET); char* pText = new char[size + 1]; ON_SCOPE_EXIT( [&]{ delete[] pText; }); memset(pText, 0, size + 1); fread(pText, size, 1, fp); fclose(fp); fp = NULL; CString strText(pText); strText.Remove(' '); int iStart = 0; CString strItem; for (int i = 0; i < UserCfg_MAX; ++i) { strItem = strText.Tokenize(";", iStart); //返回 从iStart位置到pszTokens字符之前 的内容 if (iStart == -1) break; int nQual = strItem.Find("="); if (nQual == -1) continue; m_UserCfgData[i] = atoi(strItem.Mid(nQual + 1)); //返回 从第n个字符到最后一个字符之间 的内容 } }
void StringAppendF(std::wstring* str, const wchar_t* fmt, ...) { va_list args; va_start(args, fmt); ON_SCOPE_EXIT([&] { va_end(args); }); StringAppendFT(str, fmt, args); }
std::wstring StringPrintf(const wchar_t* fmt, ...) { va_list args; va_start(args, fmt); ON_SCOPE_EXIT([&] { va_end(args); }); std::wstring str; StringAppendFT(&str, fmt, args); return str; }
const std::wstring& SStringPrintf(std::wstring* str, const wchar_t* fmt, ...) { va_list args; va_start(args, fmt); ON_SCOPE_EXIT([&] { va_end(args); }); str->clear(); StringAppendFT(str, fmt, args); return *str; }
CPLErr BatchTxt(const char * idir, const char * odir, Option opt) { char ** files = GetFiles(idir); ON_SCOPE_EXIT([&]{CSLDestroy(files); }); char ** shps = GetSources(odir, files); ON_SCOPE_EXIT([&]{CSLDestroy(shps); }); CPLErr err = CE_None; for (int i = 0; i < CSLCount(files); i++) { err = Txt2Any(files[i], shps[i], opt); if (err != CE_None) { break; } } printf("OK"); return err; }
static void run_network() { ON_SCOPE_EXIT(/*TODO: push "network down" event */); //connect hostent *host; host = gethostbyname(Config::host_name); if (host == nullptr) { std::cerr << "failed resolving " << Config::host_name << '\n'; return; } sockaddr_in server = {}; server.sin_family = AF_INET; server.sin_port = Config::host_port; memcpy(&server.sin_addr, host->h_addr_list, sizeof server.sin_addr); int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd < 0) { perror("Failed creating socket"); return; } ON_SCOPE_EXIT(close(fd););