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
}
}
}
}