Hello everyone,

First, I am sorry for the long email. I don't know how to write it shorter.

I want to run my application from the "send contact" menu in the contact 
(address book app).
I read the recipe in Palmsource about running the application from the send 
menu,
The recipe said
Begin quote
...
Check that the library is not already installed:
...
        if (! SysLibFind(kSmsLibName, &refNum))
                return;

Then install the library. This sets up the dispatch table and registers the 
exchange library with the Exchange Manager:
        if (!SysLibInstall(MyInstallDispatcher, &refNum))
...
End quote

I need to check and install the local exchange library, not the Sms lib
After checking the lib if (SysLibFind(exgLocalLibName, &refNum)), how can I 
install the library using SysLibInstall()? I don't know how to get dispatch 
table (MyInstallDispathcher). The recipe makes me think it is simple to use 
SysLibInstall() 

I follow the function AESLib_LoadLibrary() in AESLib_inline.h and do this

Err LoadLocalExchangerLibrary()
{
  Err                         err;
  MemHandle            codeRscH = 0;
  SysLibEntryProcPtr   codeRscP = 0;
  UInt16                 cardNo = 0;
  LocalID                  dbID = 0;
  DmSearchStateType     searchState;
  DmOpenRef                 dbR = 0;
  SysLibTblEntryPtr      entryP = 0;
  Boolean          libInROM = false;
  UInt16 refNum;

  DmGetNextDatabaseByTypeCreator(true, &searchState,       sysFileTExgLib, 
sysFileCLocalLib, true, &cardNo, &dbID);
  if (!dbID)
     return sysErrLibNotFound;

  libInROM = (MemLocalIDKind(dbID) != memIDHandle);

  if (0 == (dbR = DmOpenDatabase(cardNo, dbID, dmModeReadOnly)))
     return sysErrNoFreeRAM;

  if (0 == (codeRscH = DmGet1Resource(sysResTAppCode, 1))) {
  // I got stuck in this line, codeRscH is 0
  // what should be the value of the 2nd param 
  // in DmGet1Resource() in this case?
     ErrNonFatalDisplay("Can't get library rsrc");
     err = DmGetLastErr();
     err = sysErrLibNotFound;
  } else {
     codeRscP = (SysLibEntryProcPtr)MemHandleLock(codeRscH);
     err = SysLibInstall(codeRscP, &refNum);
     if (!err && !libInROM) {
        DmDatabaseProtect(cardNo, dbID, true);
     }
  }

  DmCloseDatabase(dbR);
  dbR = 0;

  if (err) {
     refNum = sysInvalidRefNum;
     if (codeRscP && !libInROM) {
        MemPtrUnlock(codeRscP);
        DmReleaseResource(codeRscH);
     }
  } else {
     entryP = SysLibTblEntry(refNum);
     entryP->dbID = dbID;
     if (libInROM) {
        entryP->codeRscH = 0;
     } else {
        entryP->codeRscH = codeRscH;
     }
  }
  return err;
}

Could someone please tell me what I do wrong. 
Also, in the recipe, toward the end, it said "If the application has multiple 
segments, you have to load and lock each segment that contains a part of the 
Exchange Library."
My application has multiple segments, which segment will contains a part of the 
Exchange Library? How do I know? Could you explain to me, please.

Many thanks for reading my email and for your help.

tnn

-- 
For information on using the PalmSource Developer Forums, or to unsubscribe, 
please see http://www.palmos.com/dev/support/forums/

Reply via email to