?
Solved

Can you pass a va_list as arguments to fill a CString (variable argument list)?

Posted on 1997-05-29
1
Medium Priority
?
1,207 Views
Last Modified: 2013-12-03
I have a class member that accepts a string with formatting capability, and therefore can have multiple arguments to fill the format sections. Can I simply take the string I get and the argument list and send it to CString and let it do the work of stuffing? How can I do this. I want to take the formatted string and send it to an open I/O stream. I'm using MSVC++ 4.2 under Win95 and WinNT 4.x. (Must I just add my own function like the protected CString::FormatV)?)

Here's my function member:
/////////////////////////////////////////////////////////////////////////////////////////////////
// this function member will extract the arguments into a va_list, set the new string, and
// append the string to the open report file
// it will display an error if a file has not been opened first with OpenReportFile
// this function will allow the passing of arguments as used in the printf and
// CString::Format functions (see Microsoft VC++ help for information on formatting codes)
//
// Input Variables:  lpszformatstr - string of text to be written to open file w/formatting info
//                   ... - formatting variable argument list
//
// Output Variable: function status return (TRUE- success, FALSE- error)
BOOL KEMETReportClass::WriteLineToReportFile(LPCTSTR lpszformatstr, ...)
{
      // assure a good valid string
      ASSERT(AfxIsValidString(lpszformatstr,FALSE));

      // check that a file is actually open
      if (!FileOpened || reportfilehandle == NULL)
            {
            AfxMessageBox("KEMETReportClass Warning!\nNo File Has Been Opened.\nCannot Write Line.",MB_OK | MB_ICONEXCLAMATION);
            return(FALSE);
            }

      // stuff the text string into a formatted CString
      CString ReportLineTextString;
      va_list arglist;
      va_start(arglist,lpszformatstr);
      ReportLineTextString.Format("%s",lpszformatstr,arglist);
      va_end(arglist);

      // now check for empty string
      // if not empty, spit it to the file, othewise, display a NULL string error message
      if (!ReportLineTextString.IsEmpty())
            fprintf(reportfilehandle,"%s",ReportLineTextString);
      else
            {
            AfxMessageBox("KEMETReportClass Warning!\nCannot Write A NULL Text Line.",MB_OK | MB_ICONEXCLAMATION);
            return(FALSE);
            }
      
AfxMessageBox(ReportLineTextString);
      return(TRUE);
}
0
Comment
Question by:maknight
1 Comment
 
LVL 6

Accepted Solution

by:
jpk041897 earned 30 total points
ID: 1397711
valists separate strings from eachoter using nulls, for instance:

"String 1"\0"String 2"\0"String 3"\0\0

Deafault constructors for CString would only read the first string in the va list.

You would either have to derive a class from CString and add your own constructor or add a method that woud parse the va list and implement the functionality you desire.
0

Featured Post

Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

Question has a verified solution.

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

This article describes a technique for converting RTF (Rich Text Format) data to HTML and provides C++ source that does it all in just a few lines of code. Although RTF is coming to be considered a "legacy" format, it is still in common use... po…
What my article will show is if you ever had to do processing to a listbox without being able to just select all the items in it. My software Visual Studio 2008 crystal report v11 My issue was I wanted to add crystal report to a form and show…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…

755 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