|
How about using a serialization library? Boost::Serialization supports text, binary and xml as output targets, and is pretty simple to use.
TinyXml Is a nice small library that has picked up a fair ammount of popularity.
Xerces To my way of thinking was pretty bloated, but if you need your output to support almost everything in the XML standard (especially different encoding schemes) this is the way to go.
|
|
|
|
|
boost looks VERY interesting, i think ill go with it.
Thanks!
|
|
|
|
|
Hi,
Office 2003 provides smart tag functionality to outlook if Word 2003 is the default email editor. Oulook uses InternetExplorer_Server
class window to show the messages composed using MS-Word or HTML
format and this window is capable of displaying smart tags. Messages
composed in Plain Text or Rich Edit are displayed in RichEdit20W
class window and this window cannot show smart tag information.
My problem is to provide smart tag kind of functionality to this
RichEdit20W class window. Is there any way to get the handle of
email viewer window of outlook?
One more behaviour I've observed that the smart tag information is
embeded into the message at the time of composing the message and
not at the time of viewing it. My requirement is to recognize smart
tags at the time of viewing the mails. I can choose any editor for
composing the message and any editor for viewing the message. I want
the smart tag functionality be available in every case.
Please help me if you have any idea in this regard.
- Rajeev
|
|
|
|
|
I cannot get the data from my vector after I’ve loaded it! It shows in debug that the vector is loading, but I can’t get the data it has loaded out of the vector.
Also, how do I save/load the vector to file. No one explains the file operations for containers that I can find.
Here’s the pertinent code:
#pragma warning(disable: 4786)
#include "stdafx.h"
#include "Well.h"
#include "Leases.h"
//#include "stdafx.h"
//#include "stdafx.h"
using std::cout;
using std::endl;
int main(int argc, char* argv[])
{
cout << "Hello World" << endl << endl;
CLease cleases;
/*
int i = 0;
for(i=0; i<6; i++)
{
cout << nSerialNum << strUseMap << " " << strWellDescription << " " << strWellName << endl; endl;
db::it++;
}
*/
return 0;
}
/* This class will be included in the vector and then saved to the file
*/
#if !defined AFX_WELL_H__
#define AFX_WELL_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "stdafx.h"
#include <string>
//#include <vector>
//#include "Leases.h"
//#include <string>
using std::string;
class CWell {
public:
string& GetWellName2();
string& GetWellDescription2();
string& GetUseMap2();
long GetSerialNum2();
string GetWellName(string& str);
string GetWellDescription(string& str);
string GetUseMap(string& str);
long GetSerialNum(long& SN);
CWell();
virtual ~CWell();
void Initialize();
protected:
string strWellName;
string strWellDescription;
string strUseMap;
long nSerialNum;
// Fuctions of class
// string GetWellName();
// string GetWellDescription();
// string GetUseMapLocation();
// long GetSerialNumber();
};
#endif // !defined AFX_WELL_H__
#include "stdafx.h"
//#include <vector>
#include "Well.h"
//#include <string>
CWell::CWell() {
// This class holds the data for each well
strUseMap = "";
strWellDescription = "";
strWellName = "";
nSerialNum = 0;
}
CWell::~CWell() {
}
// end class
void CWell::Initialize()
{
// Initialize the well class members to 0/NULL
nSerialNum = 0;
strUseMap = "";
strWellDescription = "";
strWellName = "";
}
long CWell::GetSerialNum(long& SN)
{
return nSerialNum = SN;
}
string CWell::GetUseMap(string& str)
{
return strUseMap = str;
}
string CWell::GetWellDescription(string& str)
{
return strWellDescription = str;
}
string CWell::GetWellName(string& str)
{
return strWellName = str;
}
long CWell::GetSerialNum2()
{
return (long)nSerialNum;
}
string& CWell::GetUseMap2()
{
return strUseMap;
}
string& CWell::GetWellDescription2()
{
return strWellDescription;
}
string& CWell::GetWellName2()
{
return strWellName;
}
#if !defined AFX_LEASES_H__
#define AFX_LEASES_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "Well.h"
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
//#include "Well.h"
using std::vector;
using std::iterator;
class CWell;
class CLease {
public:
CLease();
~CLease();
protected:
int nNumOfWells;
std::vector<cwell> db;
std::vector<cwell>::iterator it;
CWell cwells;
};
#endif // end class definition
#include "stdafx.h"
#include "Leases.h"
#include "stdlib.h"
using std::cout;
using std::endl;
CLease::CLease()
{
//CWell cwells = new CWell;
cwells.Initialize();
// For Testing Only : delete after testing is complete
long SN, SN2 = 0;
string str, str2, str3 = "";
int i = 0;
for(i=0; i< 6; i++)
{
switch(i)
{
case 0: SN = 0; SN2 = cwells.GetSerialNum(SN);
str = "1st Use Map"; cwells.GetUseMap(str); str = "";str2 = "";
str = "1st WellDescription"; cwells.GetWellDescription(str); str = "";str2 = "";
str = "1st Well Name"; cwells.GetWellName(str); str = "";str2 = "";
break;
case 1: SN = 1; SN2 = cwells.GetSerialNum(SN); SN = 0;
str = "2nd Use Map"; str2 = cwells.GetUseMap(str); str = "";str2 = "";
str = "2nd WellDescription"; str2 = cwells.GetWellDescription(str); str = "";str2 = "";
str = "2nd Well Name"; str2 = cwells.GetWellName(str); str = "";str2 = "";
break;
case 2: SN = 2; SN2 = cwells.GetSerialNum(SN); SN = 0;
str = "3rd Use Map"; str2 = cwells.GetUseMap(str); str = "";str2 = "";
str = "3rd WellDescription"; str2 = cwells.GetWellDescription(str); str = "";str2 = "";
str = "3rd Well Name"; str2 = cwells.GetWellName(str); str = "";str2 = "";
break;
case 3: SN = 3; SN2 = cwells.GetSerialNum(SN); SN = 0;
str = "4th Use Map"; str2 = cwells.GetUseMap(str); str = "";str2 = "";
str = "4th WellDescription"; str2 = cwells.GetWellDescription(str); str = "";str2 = "";
str = "4th Well Name"; str2 = cwells.GetWellName(str); str = "";str2 = "";
break;
case 4: SN = 4; SN2 = cwells.GetSerialNum(SN); SN = 0;
str = "5th Use Map"; str2 = cwells.GetUseMap(str); str = "";str2 = "";
str = "5th WellDescription"; str2 = cwells.GetWellDescription(str); str = "";str2 = "";
str = "5th Well Name"; str2 = cwells.GetWellName(str); str = "";str2 = "";
break;
case 5: SN = 5; SN2 = cwells.GetSerialNum(SN); SN = 0;
str = "6th Use Map"; str2 = cwells.GetUseMap(str); str = "";str2 = "";
str = "6th WellDescription"; str2 = cwells.GetWellDescription(str); str = "";str2 = "";
str = "6th Well Name"; str2 = cwells.GetWellName(str); str = "";str2 = "";
break;
} // end switch
db.push_back(cwells);
SN = 0;
str = "";
str2 = "";
str3 = "";
} // end for
// now check the container
CWell well;
for(it=db.begin(); it != db.end(); it++)
{
SN = cwells.GetSerialNum2();
str = cwells.GetUseMap2();
str2 = cwelsl.GetWellDescription2();
str3 = cwells.GetWellName2();
cout << SN << " " << str << " " << str2 << " " << str3 << endl;
//cout << *it << endl;
SN = 0;
str = "";
str2 = "";
str3 = "";
} // end for
}
CLease::~CLease()
{
}
C++ is my favorite programming language
|
|
|
|
|
I develope a DLL that is loaded with every instance of Internet Explorer. In the DLL, I want to handle something like "BeforeNavigate" event to get the URL user enter in the Adress Bar.
I've written this DLL before in C#. And in C#, handle this event is quite easy, just write something like:
WebBrowser browser;
browser.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandle(this.BeforeNavigate);
But now, I have to write it in Visual C++ 6.0. How can I handle this event in Visual C++ 6.0?
Hope to see your replies soon.
Thanks.
Lan hue sau ai lan hue heo
Lan hue sau doi trong heo ngoai tuoi
|
|
|
|
|
|
hi!
i have tried to store bitmap image into my activex control. i used the following Put property to store image.
[propput, id(7), helpstring("property CompanyLogo")] HRESULT CompanyLogo([in] IPictureDisp * newVal);
and in it i wrote following four lines of code.
m_pCompLogoDisp = newVal;
SetDirty(true);
SendOnDataChange();
FireViewChange();
The property is receiving image data but not persisting it.
does my property declarion incorrect. if so then plz help me.
Thanks in advance.
|
|
|
|
|
I've a MTS/COM+ component (COMPONENT_1) that #import s ADO library. And, I have another MTS/COM+ component (COMPONENT_2) that #import s this component. I need to use ADO objects in my second component (COMPONENT_2) too. If I use #import in my second component, I get lots of errors. If I do not, the MIDL compiler remains unable to recognize _Recordset data type. Can anyone please show me how to do it?
I am using ATL with Visual C++ 6.0 SP5.
Thanks
Gurmeet BTW, can Google help me search my lost pajamas?
My Articles: HTML Reader C++ Class Library, Numeric Edit Control
|
|
|
|
|
Hi-- I've been banging my head trying to solve this problem. Of course I'm a self trained pseudo programmer who just started to use STL. I have a huge file with 10 million entries that are paired, say:
1 8
1 5
1 3
2 0
2 4
3 0
3 8
etc...
They are stored as a two dimensional array of 10 million rows and two columns... you get the idea of the data. I need to find the records in the file that have one and only one of the tags in the first entry of the pair and put the second in another vector file in the order found. For example, if I need records with the tag 2, I'll create the vector
0
4
I suppose I need to use a multimap, but do not know how to read the file and then store the results in a vector. Right now I have this simple code:
typedef vector DVECTOR;
DVECTOR FDV;
int tag;
double FD;
int id = 3;
int idp = id + 1;
while(tag != idp)
{
GetData >> tag >> FD;
cout << tag << " " << FD << endl ;
if(tag == id)
FDV.push_back(FD);
}
This does what I want by scaning the file from the begining until it finds the target value and reads all the entries with such value. If the number is close to the first entry, cool it's fast, but if it is near the end it will take a long time (big program repeated many times...). The question is, would the multimap work better and faster to do the same task? If so... how do I do it??? that is, read the file, store the data in a multimap, search for the tag number of my interest and copy all values associated to the tag number into a vector. If I have to read the whole 10 million line file to put it in a map, then it's going to be hanging around in memory for further use (several times)... or should I read the file every time I need it?? If so, then, isn't my naive code more efficient???
By the way, I'm trying this other code using multimap but gives me horrible error messages:
typedef multimap<int, double=""> DMMAP;
DMMAP mapfish;
while(!GetData.eof())
{
GetData >> tag >> FDS;
mapfish.insert(make_pair(tag,FDS));
}
argggggggggggggggggggggggggg
Thank you so much!
Carlos
|
|
|
|
|
Well, if I understand your scenario correctly, you have two valid alternatives:- Scan the whole file into a
multimap and use this later several times. - Improve your file searching by doing something like a binary search on it. This is a little complex, but doable: broadly sketched, you have to open the file and set the current offset to the middle of it, skip characters until you find a newline and then read the entry: if the tag is
id -1, keep on reading till you get to your target portion and proceed. If the tag is greater than that, set the offset to 1/4 of the file, else set it to 3/4, proceed recursively etc. If you'll be doing the search many times, the multimap solution is probably faster, otherwise you'll have better performance with binary searching on the file. We can do an estimate: Let us call N the number of entries (10 millions in your case) and S the number of search operations you're going to perform on the file. Each search takes approximately log2N entry readings, so the binary search method will read in total S*log2N file entries. With the first method, the entries read are exactly N, as you scan the entire file. So the first method is better (on a first approximation) than the second if
N < S*log2N
With 10 million entries, this means the first method wins if you do more than ~430,000 search operations. I guess you won't do that many searches, hence my hunch is that you're probably better off implementing the file binary search stuff. Hope this helps a little.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Want a Boost forum in Code Project? Vote here[^]!
|
|
|
|
|
|
Hi all
Imconfused by a daft problem..
Our apps are written using MFC (CStrings etc) but we are using a library which uses ATL (strings). I understand string is a basic string but cant get my head around this simple problem...
I cannot assign a string longer than 15 chars...
To show an example..
string s1;
CString cs1;
cs1 = m_sRootURL.Left(10);
s1 = cs1.GetString(); // ok
cs1 = m_sRootURL.Left(12);
s1 = cs1.GetString(); // ok
cs1 = m_sRootURL.Left(14);
s1 = cs1.GetString(); // ok
cs1 = m_sRootURL.Left(16);
s1 = cs1.GetString(); // not ok, s1 = "5rf"
All help etc.. etc...
|
|
|
|
|
I don't really understand your question. When you say "I understand string is a basic string" do you really mean: a BSTR?
If your ATL component requires data to be input as a BSTR you can use CString::AllocSysString in MFC to allocate a BSTR and copy a Cstring's contents into the BSTR. Then you can pass the BSTR to the ATL library.
Robert
|
|
|
|
|
i have created an activex control using COM/ATL and then i placed my activex control into Word document using following
function.
CComVariant varClsType("Ascertia.AscertiaObj.1");
MSWord::InlineShapePtr MyObj =
m_pWordApp->Selection->InlineShapes->AddOLEObject(&varClsType);
Now my activex control has different get and set properties like Caption,
BKColor,MyData etc. I want to access and modify those properties after executing the above 2 lines of code from within MSWord.
anybody there to give me a hand.
Thanks in advance.
Ahmad Jalil Qarshi
|
|
|
|
|
Hi,
I'm designing an application that consists of ONLY a wizard. I use this code to show it.
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
CMainWizard wizard;
if ( IDOK == wizard.DoModal() )
{
}
return 0;
}
The rest of the code is default wizard code.
It all works perfectly but when i close the wizard with the cancel button i get a first chance exeception. It think this is because Run() always returns zero.
What should i do to let it exit in an ordinate fashion? Thnx
|
|
|
|
|
i dont think that the error is caused by your return code, you need to step into the code on the cancel button handler and try to "isolate" the line that causes the exception, watch variables and go line by line till you find out whats wrong.
If you still cant find whats wrong, post the code for your CMainWizard class so we can help you find the problem.
HTH
|
|
|
|
|
hi guys
i have create three Interfaces in a class which is create by ATL Object Wizard
this Interfases defines as under:
IA,IB,IC
IA derived from IDispatch
IB derived from IA
IC derived from IA
could you tell me how to write the 'BEGIN_COM_MAP' etc for my case?
thinks a lot
I love programming, but my english is too bad (
|
|
|
|
|
Currently, I have a COM event which I've created a sink for and all of that jazz. It receives events at the Invoke method of course. Then i use dispIdMember to figure out which event was called. The only problem is that the event is fired from a different thread as the rest of my program, which poses a huge problem. Is there a way that I can call a function on threadA from threadB?
|
|
|
|
|
one way to do this is to create a hidden window on threadA and then post a message on threadB to the threadA hidden window.
If you need to wait for the process to finish before threadB continues then use sendmessage not postmessage.
Best of luck
Forever Developing
|
|
|
|
|
hi!
i want to persist binary data read from a file into my ActiveX object. i have tried to do that using VARIANT containing SAFEARRAY of BYTES but couldn't do that. furthermore i tried to do same by using directly SAFEARRAYs of bytes, but unfortunately i couldn't. It seems that its not possible to store VARIANT containing SAFEARRAY of bytes as well as direct SAFEARRAYS of bytes. Am i right?
if its possible then please tell me how to do that. Is there any other way to do that?
Thanks in advance.
Ahmad Jalil Qarshi
|
|
|
|
|
There is already an Automation-compatible type for holding a block of bytes - BSTR . Use SysAllocStringByteLen() to allocate the BSTR . (Normally BSTR s are used to hold C-style strings, but that's not mandatory.)
--Mike--
LINKS~! Ericahist | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
Thanks Mike!
You solved my problem. you are really great. I was working on it since last 2 weeks. nobody guided me towards using BSTR. but now when i see so simple solution with the help of you great person i am so happy.
Thanks a lot.
Ahmad Jalil Qarshi
|
|
|
|
|
How to fix (custom ActiveX)control size in design time.
I am using MFC ActiveX ControlWizard.
Please help me.
Thanks
David Park
|
|
|
|
|
How to lock child window from resizing in MDI ?
I am using WTL + MDI/Dialog framework.
- CMDIFrameWindowImpl<MAINFRAME>
--- CMDIChildWindowImpl<MY_FRAME>
----- CDialogImpl<MY_FRAME_VIEW>
i tried to set-up window styles (below) on creating... but child window then freezing :/ and i can do nothing with it (move/minimize)
Style to setup for not-resizing window:
~WS_THICKFRAME;
~WS_MAXIMIZEBOX;
i have example, but it built on Document/View technology...
http://www.thecodeproject.com/dialog/resizeformtofit.asp
----------------------------
never stop coding.
|
|
|
|
|
use the WM_NCCALCSIZE msg to set the dimensions of the dialog to the same min/max size, use it in the frame
regards
|
|
|
|