Solved

How to write a LPOLESTR to a text file?

Posted on 2004-04-13
3
1,010 Views
Last Modified: 2012-06-21
I am very new to c++ and need to write a LPOLESTR to a text file.  Is this possible or do I need to convert it to something else?  Also, are there any specific header files I need to accomplish this?  I have already used the funtion StringfromCLSID to convert GUID's to printable strings but apparently they are not writable.  I can't import the fstream class for some reason also so I havn't used that.

This is the code segment -

// Execute the search
    hr = pSearch->ExecuteSearch(    pszSearch,
                                    rgAttributes,
                                    ARRAYSIZE(rgAttributes),
                                    &hSearch);
      cout << "Search Executed: " << hr << endl;
    if(SUCCEEDED(hr))
    {  
        FILE* myOutputFile;
        myOutputFile = fopen("c:\\TestWatch\\ADDeleted.txt", "w");
        // Call IDirectorySearch::GetNextRow() to retrieve the next row of data
        while(S_OK == (hr = pSearch->GetNextRow(hSearch)))
        {
            ADS_SEARCH_COLUMN col;
            UINT i;
           
            // Enumerate the retrieved attributes.
            for(i = 0; i < ARRAYSIZE(rgAttributes); i++)
            {
                hr = pSearch->GetColumn(hSearch, rgAttributes[i], &col);
                if(SUCCEEDED(hr))
                {      
                                                   
          switch(col.dwADsType)
                    {
                        case ADSTYPE_CASE_IGNORE_STRING:
                        case ADSTYPE_DN_STRING:
                        case ADSTYPE_PRINTABLE_STRING:
                        case ADSTYPE_NUMERIC_STRING:
                        case ADSTYPE_OCTET_STRING:
                            wprintf(L"%s: ", rgAttributes[i]);
                            LPOLESTR pStr;
                            for(DWORD x = 0; x < col.dwNumValues; x++)
                            {                                          
                                StringFromCLSID( (REFCLSID)col.pADsValues[x].OctetString.lpValue, &pStr );
                                                      // write to text file hear                                        fput(pStr, myOutputFile);
                                wprintf(L"%s" ,pStr);
                                CoTaskMemFree((LPVOID)pStr );
                                if((x + 1) < col.dwNumValues)
                                {
                                    wprintf(L",");
                                }
                            }
                            wprintf(L"\n");
                            break;
                    }

                    pSearch->FreeColumn(&col);
                }
            }

            wprintf(L"\n");
        }
            fflush(myOutputFile);
            fclose(myOutputFile);
        // Close the search handle to cleanup.
        pSearch->CloseSearchHandle(hSearch);
    }
0
Comment
Question by:misslinda454
3 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 100 total points
ID: 10814440
An LPOLESTR basically is an UNICODE string. So, all you have to do is using the UNICODE file I/O functions, e.g.

        FILE* myOutputFile;
        myOutputFile = _wfopen(L"c:\\TestWatch\\ADDeleted.txt", L"w");


//...

                                StringFromCLSID( (REFCLSID)col.pADsValues[x].OctetString.lpValue, &pStr );
                                             // write to text file hear
                                    fputws(pStr, myOutputFile);

//...

          fflush(myOutputFile);
          fclose(myOutputFile);
0
 
LVL 4

Expert Comment

by:bkfirebird
ID: 10814461
here's a good article on how to convert OLE strings ....
http://www.devguy.com/fp/Tips/COM/bstr.htm
0
 

Author Comment

by:misslinda454
ID: 10814557
Thanks jkr that worked perfectly!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now