
|
[openbeostranslationkit]
||
[Date Prev]
[04-2002 Date Index]
[Date Next]
||
[Thread Prev]
[04-2002 Thread Index]
[Thread Next]
[openbeostranslationkit] Instantiating Translator (AKA: ARGH!)
- From: "Brian Matzon" <brian@xxxxxxxxx>
- To: openbeostranslationkit@xxxxxxxxxxxxx
- Date: Mon, 22 Apr 2002 13:53:47 GMT
Ok this is annoying the hell out of me!
I simply cannon instantiate a BTranslatorRoster.
before going to the openbeos list I'd figure that
I would try the actual team again :)
Ordinarily BArchivable extended classes, may be archived using the
Archive(BMessage* message) method and instantiated using the
Instantiate(BMessage* message) method.
Thus the following should work fine (it does not!)
BTranslatorRoster* translator_roster = NULL;
BMessage translator_message;
translator_roster = new BTranslatorRoster();
translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
..
//verify that translators are actually loaded
..
//archive the sucker
translator_roster->Archive(&translator_message);
//delete old translator_roster and reinstantiate
delete translator_roster;
translator_roster = (BTranslatorRoster*)
BTranslatorRoster::Instantiate(&translator_message);
translator_roster is now NULL - how come????
Ok, so I tested an alternative, reading the docs
BTranslatorRoster::Instantiate says:
Returns a new BTranslatorRoster object, allocated by new and created
with the version of the constructor that takes a BMessage archive.
However, if the archive doesn't contain data for a BTranslatorRoster
object, Instantiate() returns NULL
If this is the case - then the following should work:
translator_message.AddString("be:translator_path", "/boot/home/config/
add-ons/Translators/");
translator_roster = (BTranslatorRoster*)
BTranslatorRoster::Instantiate(&translator_message);
but it doesn't *ponder!*
the actual instantiate test is available from CVS (openbeos/sources/os/
kits/translation/tests/)
- the method in question is:
status_t TranslatorRosterTest::InstantiateTest()
however this only contains the latter of the tests. So for
completeness, this is the first test:
-- 8< --
translator_roster = new BTranslatorRoster();
translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
//write it to output
if(translator_roster != NULL) {
int32 num_translators;
translator_id* translators;
translator_roster->GetAllTranslators(&translators, &
num_translators);
if(num_translators <= 0) {
Debug("Unable to load translators, or no translators
installed\n");
return B_ERROR;
} else {
printf("%ld translator(s) loaded\n", num_translators);
}
delete [] translators;
} else {
printf("Unable to instantiate translator roster\n");
}
translator_roster->Archive(&translator_message);
delete translator_roster;
//instantiate
translator_roster = (BTranslatorRoster*)
BTranslatorRoster::Instantiate(&translator_message);
if(translator_roster != NULL) {
int32 num_translators;
translator_id* translators;
translator_roster->GetAllTranslators(&translators, &
num_translators);
if(num_translators <= 0) {
Debug("Unable to load translators, or no translators
installed\n");
return B_ERROR;
} else {
printf("%ld loaded\n", num_translators);
}
delete [] translators;
} else {
printf("Unable to instantiate translator roster\n");
}
-- 8< --
|

|