|
No, that's not what I said, is it. Did I say something about adding a CoInitializeEx to StatusThread? Yes, I think I did. Try that first, it may enable the COM runtime to marshall the event fire across to the VB thread.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
please tell me how to use CoInitialzeEx() on StatusThread..
I am not getting....
Please...
|
|
|
|
|
Go away and learn about how COM and threads interact[^]. You need to understand this stuff before you try messing with COM and threads.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I am relatively new to ATL/WTL. I am writing an application in VC++ using ATL/WTL (not using MFC).
I need to write helper classes for my application that will
- Write all the log information in the form of proper XML files. I need to follow a valid/standard schema with XSLT for writing the XML data.
- Parser to read the XML files using the above schema & iterate through the nodes.
I have never worked with XML before and I am only trying to use ATL/WTL with VC++, so I would greatly appreciate if anyone can instruct me on how I can go about implementing this, for example - point me to the right classes for implementing a XML wrapper for writing data in XML files & for parsing the XML files and iterating through the nodal data. Some sample code would also be very helpful for me in this regard.
modified on Monday, February 9, 2009 8:21 AM
|
|
|
|
|
ATL's not going to help you much - it doesn't have any XML classes. I would use MSXML[^], I guess. You could use ATL smart pointer and BSTR wrapper classes.
Rennie76 wrote: I need to follow a valid/standard schema with XSLT for writing the XML data
XML Schemas are XSD, not XSLT - XSLT is for transforming XML from one format to another.
|
|
|
|
|
Stuart Dootson wrote: I guess. You could use ATL smart pointer and BSTR wrapper classes.
Yes, I would not use MSXML without the ATL #import code. Also _com_error , _bstr_t , _variant_t
|
|
|
|
|
|
As already mentioned there is MSXML and also XMLLite.
Rennie76 wrote: Some sample code would also be very helpful for me in this regard.
Both are documented on the msdn web site and I imagine sample code is available there as well.
|
|
|
|
|
led mike wrote: XMLLite
Ooooh - I'd forgotten about that one. Nice reminder.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
|
When creating an ATL COM project and adding an ATL Simple Object, if I create a method for that class that has one [in] BSTR parameter and one [out,retval] BSTR* parameter...
What can I assume or assert about the retval in this circumstance? In other words, do I need to check the BSTR to ensure that it does not already point to something and deallocate it if I decide to set the value? Is it mandatory to set the BSTR's value to something?
STDMETHODIMP CSomeATLClass::SomeATLClassMethod(BSTR bstrIn, BSTR* retVal)
{
return S_OK;
}
modified on Thursday, February 5, 2009 3:04 PM
|
|
|
|
|
An [out] BSTR* will not point to a valid BSTR when your method is entered; it will not be set to NULL either so will contain some invalid value.
Setting it to NULL on entering the method I would consider good practice - at least you know what its set to at that point. Your interface definition will say a BSTR is returned so a caller using it might not be too happy to have NULL returned where a string is expected. Using an assert to check its not null in the calling code would be a good idea.
Personally I like code to be simple in that if a BSTR is expected that's what I get, conveying some deeper meaning by setting the pointer to NULL, complicates things as far as I'm concerned. If you decide for some reason you can't return a BSTR why not use the HRESULT to convey this information?
|
|
|
|
|
I'm currently setting the BSTR to an empty string on error but with try/catch blocks in there, I was questioning myself if all the hoopla was really needed.
Thanks for taking the time out to assist me. I will keep the code that ensures an empty BSTR is returned.
Take care.
|
|
|
|
|
Hi All,
Is there an interface in IE I can get hold of to sink the event of someone clicking the print button on the print preview window in IE?
Thanks for any help or ideas
Cheers
Tom
Philosophy: The art of never getting beyond the concept of life.
Religion: Morality taking credit for the work of luck.
|
|
|
|
|
|
Thanks for the reply. I'll look into it.
Cheers
Tom
Philosophy: The art of never getting beyond the concept of life.
Religion: Morality taking credit for the work of luck.
|
|
|
|
|
Hi all again, i'm developing an application based on the tabbrowser sample. I added some event handling
and other operations but when i try to open a pdf file from a link the app crash (c000005).
This happens only with acrobat reader installed, if i use something else (like the freeware foxit reader)
it runs properly.
Any idea?
|
|
|
|
|
I've just built the sample with VS2005. Running the browser (on XP) I just typed a link to a local pdf file. I saw the Adobe Reader 6.0 splash screen start up and the file was opened in the browser with no problems. But maybe you're using different version of something to me.
|
|
|
|
|
Have you tried running the app under the debugger so you can see where the access violation (for that's what it is) occurs and what the call stack is?
|
|
|
|
|
Just found that with newer version of acrobat reader the problem is solved.
Once again, thanks to everybody
|
|
|
|
|
Hi Experts,
I m devlopeing a COM application which takes one string and gives list of similar
words.
for that purpose I have used VARIANT* to store and return the list.
My code for the exported function is as :
LngGenSugg( BSTR* pcIpIscii, VARIANT *pacSuggArray, int* piNSugg, LFONT lfIOLayout, int *iResult)
{
// TODO: Add your implementation code here
USES_CONVERSION;
char buffer[20];
HRESULT hr= S_OK;
// Create SafeArray of VARIANT BSTRs
SAFEARRAY *pSA;
SAFEARRAYBOUND aDim[1];
aDim[0].lLbound= 0;
aDim[0].cElements= WordLen +1;
pSA= SafeArrayCreate(VT_BSTR,1,aDim);
if (pSA != NULL)
{
_variant_t vOut;
VariantInit(&vOut);
vOut.vt= VT_BSTR; // set type
long aLong[1];
for (LONG l= aDim[0].lLbound; l< (aDim[0].cElements + aDim[0].lLbound); l++)
{
aLong[0]= l; // set index value
ltoa(l,buffer,10);
vOut.bstrVal = A2W("Victory");
if((hr= SafeArrayPutElement(pSA, aLong, &vOut)) != S_OK)
{
SafeArrayDestroy(pSA); // does a deep destroy
return hr;
}
MessageBox(NULL,(char*)pSA[l].pvData ,"pSA",0);
}
}
V_VT(pacSuggArray)= VT_ARRAY | VT_BSTR;
V_ARRAY(pacSuggArray)= pSA; // (pSA may be null)
.
.
.
.
}
I just try to give words as "Victory";
so Is it correct way to do thiss???
and
Exception occured during execution at MessageBos() cal.
can anyone help me??
and Another problem is..
I have tried the same function by using char** str Array that stores similar words list but..
I m failed to assing it to return VARIANT array pacSuggArray.
so plz help me..
Thanx in advance...
waiting for ur valuable reply...
regards ,
Victory
|
|
|
|
|
You seem to be creating an array of type VT_BSTR , which is fine, but then complicating things somewhat.
I'd recommend using SafeArrayAccessData to get a pointer, say pData, to your array of BSTR pointers then in a loop using pData[n] = SysAllocString(L"Victory"); to set the pointers and then SafeArrayUnaccessData at the end.
|
|
|
|
|
Thanx ur reply...
If I want to assign my char *str[50] array of word list to that safearray.
then what should I do?
Do I assign each word from str array as above
or.
Is there any another way..
that I can assign just address of str array to safearray??
plz reply..
I m waitng for ur valuable reply.
regards,
Victory
|
|
|
|
|
Using the method mentioned its only memory for the BSTRs (which are pointers) that been assigned so to get a complete string you'd need to assign memory somehow. Using SysAllocString takes care of that for you and also looks after the length of the string, something that could complicate matters.
You can assign memory to the SAFEARRAYS data area, if the rest of the SAFEARRAY has been setup to expect the type of data you put there. Personally I'd get it working using the method mentioned before looking for other ways but I'm sure there are plenty of articles etc on other ways.
|
|
|
|
|
Hi,
I have developed a COM Add-In for MS-Office 2003 & 2007. I am able to register this Add-In (DLL / EXE) using regsvr32.exe and I am able to use the functionalities of this component. But I am able to use this in my profile but if different user logs in to the system the same Add-In functionality will not be available, the user needs to register again this DLL / EXE in his own profile.
I would like to know how to register this DLL / EXE so that all users logging this m/c should be able to use this Add-In functionality.
Thanks
SNI
SNI
|
|
|
|