|
tHANKS mARK. I appreciate your efforts and help towards my problem.
The above code works perfectly with Visual Studio. But when I added in eVC++, I am getting Linker errors. Code is added & implemented in the same way in VS & eVC++.
I added the above code in my DbOperations class - SerializeElements is not a member of DbOperations, just added in the class cpp file. And from another dialog class Operator, I am calling db.WriteArchive() & ReadArchive(). From my view class, via a menu Operator.doModal is called, so view class is also in the picture. I get the following errors:
Linking...
MC_AppView.obj : error LNK2005: "void __cdecl SerializeElements(class CArchive &,class OperatorDetails *,int)" (?SerializeElements@@YAXAAVCArchive@@PAVOperatorDetails@@H@Z) already defined in DbOperations.obj
Operator.obj : error LNK2005: "void __cdecl SerializeElements(class CArchive &,class OperatorDetails *,int)" (?SerializeElements@@YAXAAVCArchive@@PAVOperatorDetails@@H@Z) already defined in DbOperations.obj
ARMV4IDbg/MC_App.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
I tried making SerializeElemnets as a member of DbOperations, but that also gives lots of errors due to <>, etc. How do I avoid these errors?
Thanks
Terry
|
|
|
|
|
Mark,
I removed the template <> SerializeElements() from the code & ran the application. Its still running and giving the results as we expected, but after reading is completed, it throws Assertion Failure: on strcode.cpp Line 171 which falls under void CString::Release(), ASSERT(GetData()->nRefs != 0);
line.
If I do retry, it works properly. I need to get rid of this error. Do you know how to I catch exception in eVC++. If I write
try{
....
} catch(CException e) {
}
it shows warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX. The MSDN warning lists of 4530 mentions to specify /EHsc. How do I speicify any of this & where in the Project Settings. This will be a great help, as I like very much to catch exception and handle them. But in eVC I am not able to do it due to these errors/warnings.
Please would be nice if can help out in this.
Thanks
Terry
|
|
|
|
|
Trupti Mehta wrote: I removed the template <> SerializeElements() from the code & ran the application. Its still running and giving the results as we expected,
That won't work well with CStrings in the OperatorDetails class, since without a SerializeElements() override for the
CMap, the default serialization of the map's objects is binary bits - not good when pointers are involved
I'm not sure why the template function causes the link to fail.
You should be able to put the SerializeElements() template in ONE cpp file and it should work. I tested with it
in the same CPP file that does the serialization/unserialization of the CMap (just above my sample WriteArchive()
and ReadArchive functions).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark, I also have added in the same file (DbOperations.cpp) just copied your code same way. All serialization.desera & template overrride are in the same file. I tried removing template<> & AFXAPI, but still no success.
You were very correct that with pointers of Map I will have a problem. To pass the DbOperations reference to other classes, I made a copy constructor & operator=, in this case I can't directly copy map tp map. So I made operatorMap as pointer & the other map deptMap is as a normal object only & not assigning in copy constru or =. deptMap additions & updations are possible (NOT a pointer), but operatorMap (a POINTER) operations are not allowed. It causes Assertion failure in afxtempl.h line 1368 which is Assert 1st line of CMap<> operator[].
I got to take out some solution of this. Can you tell how to assign a map to map in copy constructr & = operator. Basically copy a map to other. In DbOperations .h
typedef CMap<int, int, OperatorDetails, OperatorDetails&> OperatorDetailsMap;
typedef CMap<int, int, DeptDetails, DeptDetails&> DeptDetailsMap;
class ....{
OperatorDetailsMap* operMap;
DeptDetailsMap deptMap;
In .cpp
DbOperations::DbOperations(const DbOperations &d) {
this->operMap = d.operMap;
}
DbOperations& DbOperations::operator=(const DbOperations &d) {
this->operMap = d.operMap;
return *this;
}
My point is how do I copy this.deptMap with d.deptMap, where deptMap being normal objects & not a pointer. With this solution we wont have problem with serializeElements() & pointers. As SerializeElements() causes problems, so looking out for solution without serializeElements & pointers. SerializeElemtsis added only in DbOperations along with WriteArchive & ReadArchive. The same thing is working with Visual Studio, but not with eVC++4. Really it is difficult to code in eVC++ than VC++, many restrictions & uncompatibility.
Looking for solution as soon as possible. From days I have been looking for this solution & yet not solved. You have been extremely helpful throughout. I highly appreciate your help and look towards more help.
Thanks
Terry
|
|
|
|
|
just a basic question, why don't use simple CStdioFile or CFile classes when you are building MFC app instead of raw api CreateFile. though i am big fan window api! just a thought !
|
|
|
|
|
Alok, this application is especially meant for development in eVC++ with WinCe. CStudioFile is not supported. So got to opt raw api of C/C++.
Thanks
Terry
|
|
|
|
|
just a question are ATL header files are available for eVC, you could use CAtlFile Class [^]
|
|
|
|
|
No Alok, ATL is not available in eVC, only MFC & pure C/C++. In that too with Win CE, many are again not allowed or supported.
Thanks
Terry
|
|
|
|
|
CString strTime=childnode->getAttribute("Time");
initializing' : cannot convert from 'class _variant_t' to 'class CString'
how to save it
thankyou
|
|
|
|
|
SOS
|
|
|
|
|
huke1987 wrote: SOS
so still in college or working somewhere!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/xml>
|
|
|
|
|
CString strTime = whchildnode->getAttribute("Time").bstrVal;
|
|
|
|
|
thank you
but there have a little problem
i use "CString strTime = childnode->getAttribute("Time").bstrVal; "
strTime=""
the strTime in xml is not null
|
|
|
|
|
put the following code and tell me what is the value of vt and bstrVal in the objVar variable after executing it.
_variant_t objVar = childnode->getAttribute("Time");
|
|
|
|
|
thank you
objVar need change to cstring
~~~~~
|
|
|
|
|
what?I didnt understand..
I said to do so for debugging..
|
|
|
|
|
Naveen wrote: I said to do so for debugging..
Better ask for BreakPoint and F-5 function keys!
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/xml>
|
|
|
|
|
Nice move!
My 5!
Alcohol. The cause of, and the solution to, all of life's problems - Homer Simpson
|
|
|
|
|
i save it in another way
///////////////////////////////
CString strTime=(char *)childnode->selectNodes("Time")->Getitem(0)->text;
////////////////////////////////////////////
or
///////////////////////////////
aSmsItemlist=childnode->GetchildNodes
node1=aSmsItemlist->Getitem(0);
CString strTime=(char *)node1->text;
|
|
|
|
|
This is on the right track but sloppy. What happens if the variant's type isn't VT_BSTR ? Nothing pleasant I can assure you!
Steve
|
|
|
|
|
since he tried to assign the value to a CString, I thought that the node will be having a string value. But later when he said his CString is empty, I felt there is some thing wrong. so I suggested him to take the return into a _varient_t and check for the type.
|
|
|
|
|
thank you all the friends
I have to solve that problem
my English is so bad~~~~~
|
|
|
|
|
huke1987 wrote: CString strTime=childnode->getAttribute("Time");
better use _bstr_t bstVal = childnode->getAttribute("Time").bstrVal; , it has overloaded LPCTSTR, which could be used any where !
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/xml>
|
|
|
|
|
thank you ??
|
|
|
|
|
huke1987 wrote: ??
sometimes extra ?? is confusing [ ]
|
|
|
|