|
Something wrong with writing XML code here
In other words:
<Name Group="Something">
<Name Code="1234" SMTH="asdf" SMTH1="gd">
How to get data from Code, SMTH?
|
|
|
|
|
IXMLDOMDocument *pDomDoc;<br />
IXMLDOMNodeList *pXMLDOMNodeList = NULL;<br />
IXMLDOMNode *pXMLDOMNode = NULL,<br />
*pXMLAttrNode = NULL,<br />
*pXMLChildNode = NULL;<br />
IXMLDOMNamedNodeMap *pXMLAttributes = NULL;<br />
<br />
IXMLDOMNode *pXMLParentNode = NULL,<br />
*pXMLGrandParentNode = NULL;<br />
<br />
CString strAttributeValue;<br />
CComBSTR bstrAttrName;<br />
HRESULT hResult;<br />
<br />
hResult = CoCreateInstance(CLSID_DOMDocument,<br />
NULL,<br />
CLSCTX_INPROC_SERVER,<br />
IID_IXMLDOMDocument,<br />
reinterpret_cast<void**>(&lpDomDoc));<br />
if(FAILED(hResult))<br />
return FALSE;<br />
hResult = pDomDoc->put_async(FALSE);<br />
if(FAILED(hResult))<br />
return FALSE;<br />
<br />
CComVariant vFileName(szXmlFilePath);<br />
VARIANT_BOOL vBool;<br />
pDomDoc->load(vFileName,&vBool);<br />
if(VARIANT_TRUE == vBool)<br />
{<br />
hResult = pDomDoc->getElementsByTagName(L"Name", &pXMLDOMNodeList);<br />
if(FAILED(hResult))<br />
return FALSE;<br />
<br />
hResult = pXMLDOMNodeList->nextNode(&pXMLDOMNode);
if(FAILED(hResult))<br />
return FALSE;<br />
<br />
hResult = pXMLDOMNode->get_attributes(&pXMLDOMNamedNodeMap);<br />
if(FAILED(hResult) || pXMLDOMNamedNodeMap == NULL )<br />
return FALSE;<br />
<br />
bstrAttrName = "Code";
hResult = pXMLDOMNamedNodeMap->getNamedItem(bstrAttrName,&pXMLAttrNode);<br />
if(FAILED(hResult) || pXMLAttrNode == NULL)<br />
return FALSE;<br />
hResult = pXMLAttrNode->get_nodeValue(&varNodeValue);<br />
if(FAILED(hResult))<br />
return FALSE;<br />
strAttributeValue.Format(_T("%S"),V_BSTR(&varNodeValue));<br />
}<br />
else<br />
return FALSE;
Hope this will help you ...
|
|
|
|
|
here is an example using XPath query language:
assuming XML file looks like this and you want to get the value of attrib2
<element1>
<element2 attrib1="123" attrib2=abc" />
</element1>
<pre>
#using "msxml40.dll"
IXMLDOMDocumentPtr spDoc;
spDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
// load the XML file
_variant_t vFile("path to some file.xml");
VARIANT_BOOL bSuccess;
spDoc->load(vFile, &bSuccess);
// construct XPath query
std::string str("/element1/element2[@attrib1='123']");
_bstr_t bstr(str);
// get node matching the query (assuming only one node matches)
IXMLDOMNodePtr spNode;
spDoc->selectSingleNode(bstr, &spNode);
// get attribute node
IXMLDOMNamedNodeMapPtr spNodeMap;
spNode->get_attributes(&spNodeMap);
IXMLDOMNodePtr spAttributeNode;
spNodeMap->getNamedItem(L"attrib2", &spAttributeNode);
// get attribute value
_variant_t v;
hr = spAttributeNode->get_nodeValue(&v);
</pre>
|
|
|
|
|
Thak YOU Very MUCH. You BOTH Helped me so MUCH. Tanks again .
But now i got another question - how to create new XML file?
And Where To Find Full Help Information about all these?
|
|
|
|
|
Hi
I have an app that use multithreading to update the display of a window. I use AfxBeginThread() to spawn the thread, passing a copy of the window's m_hWnd as its parameter. This thread will then execute SendMessage() to update the window's display. This works OK in the Debug mode. However, in the release mode, it always gives error (The app has encountered a problem and will be closed etc2) whenever I have spawned two of the said threads, and then I switched window! This error still occurs even if I make the member function processing the message to do no processing (i.e. it just returns). However, this error does not occur if I comment out the SendMessage() line in the thread's function. I have tried using PostMessage() instead of SendMessage(), but with the same result. Could someone tell me what's the possible cause for this?
Thanks!
|
|
|
|
|
Since the prblm is with release build only , mostly it will be a memory initialiaztion/allocation prblm.
Since both SendMessage and PostMessage failed, mostly the prblm will be with the initialiaztion of one of the parameter to these functions.
chk whether hwnd is initialized as below.
HWND hWnd = NULL;
or use
AfxGetApp()->GetMainWnd()->SendMessage
rgds .. mil10
|
|
|
|
|
|
I presume you are passing a custom message to your window, e.g. WM_MYMESSAGE or something (defined from WM_USER + <some arbitrary="" number=""> or you've used RegisterMessage)?
I'm also assuming that your message handler is something like:
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
You MUST make sure that you include the WPARAM and LPARAM arguments. Omitting them will work in DEBUG but will NOT work in release build. This is due to the way the stack is padded in debug builds. In a release build, the message map will expect the arguments - if they're not there, you will corrupt the stack, resulting in an exception.
Apologies if this is not what you're after, I'm just making blind assumptions from your original post.
|
|
|
|
|
Hi
Thank you thank you thank you! Yep it's exactly what I'm looking for. The program's OK now when I modified the OnMyMessage() function.
|
|
|
|
|
i'm trying to convert CString into Unicode (hex) values.
I am doing like ,
CString name;
BYTE unicode[];
input : name="Farhan"
outout : {0x00,0x46,0x00,0x41,0x00,0x52,0x00,0x48,0x00,0x41,0x00,
0x4E}
(in unicode ,each character has 2 byte unicode values).
any suggestion/help is appreciated
|
|
|
|
|
If you are using MFC7, then just assign the string to CWString. Or is it CStringW...
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
there's a few macros for doing this:
CString name;
LPWSTR unicode = CT2W(name);
|
|
|
|
|
I'm wanting to get an HBITMAP from the WinLogon HWND to my app that is running in the user desktop process. Any ideas? I'm fresh out.
|
|
|
|
|
u mean that logon window with username and password?
if so it will not b ther after u logged in. so ur ap can't get an hbitmap from that wnd.
if u just want to edit the imgs in the logon scrn then open c:\winnt\system32\msgina.dll in vc6 ide as a resource file. then u will see all the log on log off imgs and u can edit it. to know more abt how to create GINA dlls, go thru GINA topics in msdn.
rgds...mil10
|
|
|
|
|
Actuall I want to take a screen shot of it when it is active, ie the application desktop is in a locked state. Otherwise I want a screen shot of the application desktop, which is no problem since the app is running on the application desktop.
|
|
|
|
|
What I'm doing is something simular to remote desktop. I just need to send the winlogon desktop screenshot when it's active to my client app.
|
|
|
|
|
solution is 2 go 4 GINA dll. replace teh system msgina.dll with ur custom gina dll....
rgds...mil10.
|
|
|
|
|
That's not a viable solution.
|
|
|
|
|
Hi. I'm a beginner at VC++. Currently, I'm trying to learn how to use the CopyFile function. I've tried using the CopyFile function and succeeded. However, when I tried using the CopyFileEx function in the same project, the compile error message says that CopyFileEx is an undeclared variable. I've checked with MSDN, both are using the same header and library files. Please help.
|
|
|
|
|
CopyFileEx() is not supported under Windows 95/98/ME, and the _WIN32_WINNT macro has to be defined to at least 0x0400 for it to work.
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
But I'm using Windows 2000 with Visual C++ 6.0.
|
|
|
|
|
That's irrelevant. Did you set the macro correctly?
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
To Hello,
My pushbtton will be coloured differently based on some results.
Anyone has any examples on WM_CTLCOLOR?
CBitMapButton is not what I want.
Thanks
S1189216G
|
|
|
|
|
Unfortunately, WM_CTLCOLOR does not work with push buttons. You will have to make your button owner drawn to do what you want. See http://www.codeproject.com/buttonctrl/#Owner%2Ddraw+buttons[^] for examples.
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
"Obviously ??? You're definitely a superstar!!!" mYkel - 21 Jun '04
Within you lies the power for good - Use it!
|
|
|
|
|
Ok, After attempting many times with multithreading I have only seen failure. So,... im trying to use the _beginthreadex function but I always get conversion erros. IE.
<br />
#include <stdio.h><br />
#include <process.h><br />
#include <iostream><br />
<br />
typedef unsigned int UINT;<br />
<br />
UINT SocketThreadProc(void *){<br />
std::cout << "hey";<br />
return 1;<br />
}<br />
<br />
void main(){ <br />
UINT uiThreadId = 0;<br />
_beginthreadex( NULL,
0,
SocketThreadProc,
NULL,
NULL,
&uiThreadId);
}<br />
and my error:
error C2664: '_beginthreadex' : cannot convert parameter 3 from 'unsigned int (void *)' to 'unsigned int (__stdcall *)(void *)'
None of the functions with this name in scope match the target type
Anyone have suggestions, am i not setting up my project right... Im compiling with Multithreaded DLL Settings on..
Thanks,
Matt
|
|
|
|