That was it.  I was compiling without the XP_WIN flag.  I recompiled with it
and the problem went away.
Thanks,
    --Dan

"John Bandhauer" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> If you're calling from C++ there isn't really any marshaling.
>
> I'd guess that your calling code is not compiled with the right
> defines. Specifically, you may not be defining XP_WIN and thus
> the calling convention being used is incorrect. The interface
> mathods you are calling expect the __stdcall convention. And this
> is indicated by the #ifdefs in nsCOM.h -
> http://lxr.mozilla.org/seamonkey/source/xpcom/base/nsCom.h#50
>
> The code you are calling was compiled with XP_WIN defined. The
> calling code must have also been compiled with XP_WIN defined for
> this to work right. Otherwise the passing of params will be wrong
> - Oh and it will probably crash later too.
>
> >       I have tried to use xpcom.dll instead of xpcom.dll
>
> huh?
>
> Hope this helps.
>
> John.
>
> Dan Lange wrote:
> >
> > I am trying to use the RDF service, which I obtained through XPCOM.  I
> > didn't have any difficulty getting the service from the service manager.
> > Whenever I call any methods of the RDF service, however, the method
recieves
> > a different set of arguments then I passed in, and it crashes.  It looks
to
> > me like a DLL related problem marshalling the arguments, but I am at a
loss
> > as to how to fix it.  Any help would be appreciated.
> >
> > Details:
> > I am writing a DLL that makes XPCOM calls.  It is not itself an XPCOM
> > object.
> > I am compiling on my DLL a windows NT platform using my own makefile,
not
> > the Mozilla makefile.  I use the DLL from within a mozilla browser.
> >
> > My code:
> > static nsIRDFService* gRDFService = NULL;
> > ...
> >  rv = nsServiceManager::GetService(kRDFServiceCID,
> >      NS_GET_IID(nsIRDFService),
> >      (nsISupports**) &gRDFService);
> > ...
> >   printf("NbRdfInterface: gRDFService: %X\n",gRDFService);
> >   printf("NbRdfInterface: url: %s\n",url);
> > ...
> >   rv = gRDFService->GetDataSource(url, NULL);
> > // originally: rv =
> > gRDFService->GetDataSource(url,getterAddRefs(datasource));  I changed it
to
> > isolate the problem.
> > ...
> >
> > Instrumentation that I have put into nsRDFService.cpp:
> > NS_IMETHODIMP
> > RDFServiceImpl::GetDataSource(const char* aURI, nsIRDFDataSource**
> > aDataSource)
> > {
> >     printf("\nRDFService: GetDataSource: this = %X\n",this);
> >     printf("RDFService: GetDataSource: aURI = %s\n",aURI);
> >     printf("RDFService: GetDataSource: mNamedDataSources =
> > %X\n\n",mNamedDataSources);
> > ...
> >
> > Mozilla Debug output:
> > ...
> > // Other components calling the RDF service.  It works for them...
> > RDFService: GetDataSource: this = A11410
> > RDFService: GetDataSource: aURI = rdf:local-store
> > RDFService: GetDataSource: mNamedDataSources = A11320
> >
> > RDFService: GetDataSource: this = A11410
> > RDFService: GetDataSource: aURI = rdf:charset-menu
> > RDFService: GetDataSource: mNamedDataSources = A11320
> >
> > RDFService: GetDataSource: this = A11410
> > RDFService: GetDataSource: aURI = rdf:local-store
> > RDFService: GetDataSource: mNamedDataSources = A11320
> > ...
> >
> > // My component has a valid set of arguments.
> > NbRdfInterface: gRDFService: A11410
> > NbRdfInterface: url: file:/C:/jsrc/rdfTest.rdf
> >
> > // My Component calls the RDF service.
> > RDFService: GetDataSource: this = 1C8A0450
> > RDFService: GetDataSource: aURI =
> > RDFService: GetDataSource: mNamedDataSources = 64722F63
> > ...
> > // Boom!
> > ...
> >
> > For reasons that I don't understand, the parameters that I passed to
> > GetDataSource are not the ones that it recieves.  I have tried working
the
> > problem from the following angles:
> >
> > 1) Calling GetServiceManager in an attempt to initialize the service
> > manager.
> >         This didn't help.  Plus, you will observe that the service
manager
> > is giving me the correct pointer to the RDF service, I just can't seem
to
> > use it.
> >
> > 2) Calling a different RDF service method.
> >         No dice.  The other method had exactly the same problem.
> >
> > 3) Fiddling with different ways of linking things.
> >        As near as I can figure out, my DLL statically links xpcom.lib,
but
> > not any rdf libraries.
> >       I have tried to use xpcom.dll instead of xpcom.dll, but I couldn't
get
> > it to link.  I have also tried linking rdf.lib, which is a step in the
wrong
> > direction, but that didn't work either.
> >
> >     -- Dan Lange



Reply via email to