|
If they are not used then the preprocessor will ignore them. Macro expansion happens at the reference, not at the definition. You may need to create some dummy file to get the expansions. A better idea would be to write proper documentation comments so they can be seen by anyone looking at the definitions. And I think that may also make them visible through intellisense.
|
|
|
|
|
I am creating an application using c# winform to create and mount ISO files like wincdemu. I am able to create the ISO file and mount it like a local drive. I want to mount the image with disc type CD-ROM/DVD-ROM. I am using AttachVirtualDisk() to mount the image.
Is there any API/library support to mount the image with disc type CD-ROM/CD-R/CD-RW/DVD-ROM/DVD-RAM etc. ?
I appreciate any advice.
|
|
|
|
|
You might be better off asking in the C# forum.
"the debugger doesn't tell me anything because this code compiles just fine" - random QA comment
"Facebook is where you tell lies to your friends. Twitter is where you tell the truth to strangers." - chriselst
"I don't drink any more... then again, I don't drink any less." - Mike Mullikins uncle
|
|
|
|
|
Hello,
We use a third party library for our grids. Each grid cell has a style, one member of which is the font:
class CLibStyle
{
[...]
CLibFont m_pFont;
[...]
};
During deserialization serialization in the library methods, the font is managed as follows:
ar >> m_pFont;
For our part, we deserialize the styles line by line, column by column, then storing them in a map to use them later:
CLibStyle * pStyle = NULL;
for (int nNumRow = 0; nNumRow ++; nNumRow <nNbRow)
for (int nNumCol = 0; nNumCol ++; nNumCol <nNbCol)
{
pStyle = new CLibStyle();
pStyle->Serialize(ar);
mapStyle->AddTail(pStyle);
}
So far it's very basic but this is where we have a big problem because it happens that this deserialization, as simple as it is, allocates pointers m_pFont on the same memory areas from one loop to another. With the same archive file, this problem does not necessarily arise depending on whether you are in Debug or in Release, or even differs from one PC to another.
Afterwards, we inevitably have problems even if the pointers are destroyed ...
Any ideas for ensuring that pointers are not allocated on the same memory range?
Thanks a lot for your help.
modified 25-May-20 3:49am.
|
|
|
|
|
Hello,
I'm not sure to understand how the "serialization" works in your exemple.
What is ar ?
ar >> m_pFont
m_pFont is a pointer, so in my opinion, there is no allocation here, only a pointer (ar) affected to another pointer (m_pFont). You probably have one instance of your font ( managed by your code or the library, I don't know ) referenced ( pointed ) by several m_pFont.
|
|
|
|
|
|
You appear to be confusing serialization and deserialization. The first line above ar >> m_pFont; is deserializing from the archive into the m_pFont object. So where is the deserialize code that loads the object from the archive, and what type is m_pFont?
|
|
|
|
|
You are right. I've just modified and corrected my previous post ...
|
|
|
|
|
Well, in fact, I've two cases :
if I serialize with the following way, I've got some CLibStyle::m_pFont on the same memory during the serialization :
CLibStyle Style;
for (int nNumRow = 0; nNumRow ++; nNumRow <nNbRow)
for (int nNumCol = 0; nNumCol ++; nNumCol <nNbCol)
{
Style.Free();
m_pGrid->GetStyleRowCol( nRow, nCol, Style);
Style.Serialize(ar);
}
if I serialize with this second way, I've got problem during deserialization in the ar >> m_pFont line : CArchive::ReadObject can't find the corresponding runtime class ...
CLibStyle *pStyle;
for (int nNumRow = 0; nNumRow ++; nNumRow <nNbRow)
for (int nNumCol = 0; nNumCol ++; nNumCol <nNbCol)
{
pStyle = new CLibStyle();
m_pGrid->GetStyleRowCol( nRow, nCol, *pStyle);
pStyle->Serialize(ar);
}
|
|
|
|
|
Well your code remains unclear. However, if m_pFont is a pointer, then you are going to have problems unless you also serialize the object that it is pointing at. Deserializing a pointer without the underlying object means that it will be pointing to some random portion of memory.
|
|
|
|
|
This point is treated by the MFC CArchive::ReadObject and CArchive::WriteObject methods which are automatically called by the >> or << operator. They are able to detecte or serialize the associated RuntimeClass.
|
|
|
|
|
Well if that is working then you need to use your debugger to find out what is going wrong. Also it is still not clear exactly what is wrong when you have deserialized from the archive.
The comments at Storing and Loading CObjects via an Archive | Microsoft Docs[^] seem to imply that you may need to use the Serialize function rather than the insertion/extraction operators.
|
|
|
|
|
|
The most obvious flaw I can see is that your are interverting loop test and variable increment in your for loops.
The syntax is
for (init; condition; increment) , and you are using
for (init; increment; condition) instead.
"Five fruits and vegetables a day? What a joke!
Personally, after the third watermelon, I'm full."
|
|
|
|
|
Well spotted, but I would expect his app to crash if that is in the actual running system.
|
|
|
|
|
Yes, very well spotted ... I wrote the sample code too quickly
|
|
|
|
|
I also wonder why these loops are needed, since you do not even use nNumRow and nNumCol in the loops. What is the relation of the loop variables nNumRow and nNumCol to the ar variable?
"Five fruits and vegetables a day? What a joke!
Personally, after the third watermelon, I'm full."
|
|
|
|
|
It is no wonder we are getting confused if you are not even showing the actual code that has the problem.
|
|
|
|
|
Thank you all for your help.
The example code is very close to the actual code and the problem is that sometimes, depending on the computer, because of the operator >> to deserialize the style m_pFont, several m_pFont pointed to the same memory area.
I studied the problem with a minimal grid ... and finally realized that in my application I was not using this m_pFont. I modified my code so that I would no longer use it at all, destroy it and set it to NULL which definitively resolved my problem.
If I don't fully explain the phenomenon, I think it comes from the fact that these m_pFont contained the same data and that the operators << consider the pointer had already been serialized as explained in the TN002: Persistent Object Data Format | Microsoft Docs ... Maybe ...
Regards
|
|
|
|
|
Any Thing To Send Data To Crystal Report By VC++ 6.0
,We Can Say , PrintOut Method
Object : Change No Copies Dynamic Through Code
|
|
|
|
|
Other application can print out without problem ? Have tried to print to another printer ? Or, have you tried to run that command on another machine ? You can find more if you do some debugging on your code ...
modified 24-May-20 2:43am.
|
|
|
|
|
I used the below code for creating CEdit dynamically, code compiled but editbox is not visible on screen
[CODE]
CEdit *tedit = new CEdit:
tedit->CreateEx(WS_EX_CLIENTEDGE , L"Edit", L" ", ES_AUTOHSCROLL | ES_LEFT | WS_BORDER | WS_VISIBLE | WS_CHILD ,this,IDC_EDIT);
[/CODE]
|
|
|
|
|
You need to provide more details of your code. That line should work according to the documentation. There must be something else that needs to be done.
|
|
|
|
|
|
<l>I am trying to learn c++ programming language and am still an amateur at it. I have a problem with "passing arrays in a function" and all am asking is what would be the easiest way to handle this problem?
|
|
|
|