XtraResourceCookie myCookie, saveCookie;
myCookie = This->pCallback->lpVtbl->MoaBeginUsingResources(This->pCallback,
gXtraFileRef, &saveCookie);
h = Get1NamedResource(...);
This->pCallback->lpVtbl->MoaEndUsingResources(This->pCallback,
gXtraFileRef, saveCookie);
Under Windows, the same rigmarole is used; the main
difference is that an "XtraResourceCookie" is really
just an HINSTANCE to your Xtra's DLL.
{
FSSpec mySpec;
MoaError err;
PIMoaPathName pMoaFile;
MoaChar chXtraFolder[512];
err = pObj->pCallback->MoaCreateInstance(&CLSID_CMoaPath, &IID_IMoaPathName, (PPMoaVoid)&pMoaFile);
err = FSMakeFSSpec( ((FSSpecPtr)gXtraFileRef)->vRefNum, ((FSSpecPtr)gXtraFileRef)->parID , "\p", &mySpec);
err = pMoaFile->InitFromFSSpec(&mySpec);
err = pMoaFile->GetPath(chXtraFolder, 512);
err = pMoaFile->Release();
}
{ XtraResourceCookie pSaveCookie, pNewCookie = NULL; DWORD dwErr; MoaChar chXtraFolder[MAX_PATH]; pNewCookie = pObj->pCallback->MoaBeginUsingResources(gXtraFileRef, &pSaveCookie); if (pNewCookie) { dwErr = GetModuleFileName(pNewCookie, chXtraFolder, MAX_PATH); pObj->pCallback->MoaEndUsingResources(gXtraFileRef, pSaveCookie); if (dwErr!=0) { int n; int nLen = strlen(chXtraFolder); for (n=nLen; n>0; n--) { if (chXtraFolder[n-1] == '\\') break; else chXtraFolder[n-1] = '\0'; // clear character } } } }