Hi...
I'm a beginner to xpcom and I'd like to know the answer to some basic
questions.
1. Here "somefunction" is a getter function.
NS_IMETHODIMP SomeClass::somefunction( nsILocalFile ** aNewFile ) {
nsresult rv;
nsCOMPtr<nsILocalFile> aFile =
o_CreateInstance( NS_LOCAL_FILE_CONTRACTID, &rv );
aFile->InitWithPath( "/some/path/file" );
*aNewFile = aFile;
return NS_OK;
}
nsCOMPtr<nsILocalFile> file;
foo->somefunction( getter_AddRefs( file ) );
After calling "somefunction", file was a bad pointer, because the aFile was
created inside the function and then deleted at the return from
"somefunction".
Is this example below the right way to fix the problem?
NS_IMETHODIMP SomeClass::somefunction( nsILocalFile ** aNewFile ) {
nsresult rv;
nsCOMPtr<nsILocalFile> aFile =
o_CreateInstance( NS_LOCAL_FILE_CONTRACTID, &rv );
aFile->InitWithPath( "/some/path/file" );
nsILocalFile *dummy = aFile;
NS_ADDREF( dummy );
*aNewFile = dummy;
return NS_OK;
}
2. I created a nsMyWebProgressListener class, derived from
nsIWebProgressListener. The nsMyWebProgressListener is used locally, it
doesn't have to have a CID or IID. I need to pass a
nsIWebProgressListener* to "SetWebProgressListener".
Is there something wrong to code it this way?
nsCOMPtr<nsIWebProgressListener> dummy = new nsMyWebProgressListener;
aLauncher->SetWebProgressListener( dummy );
Thanks.