|
An excellent book I would recommend to have, is:
* Programming Applications for Microsoft Windows
- By Jeffrey Richter
- Microsoft Press.
* Don't wish it was easier, wish you were better! *
|
|
|
|
|
Hi,
Is it possible like on Unix to have a program dump a file with a stack trace for ease of debugging? If so, how? Thanks.
|
|
|
|
|
Yeah visual studio also has something like it. When you are debuging a application and you come with an exception, you click on retry and select debug/view/stack
"When death smiles at you, only thing you can do is smile back at it" - Russel Crowe (Gladiator)
|
|
|
|
|
Is there a Visual .NET 2003 equivalent of the .bsc file found in Visual C++ ver 6?
I am the handsome one in the crowd.
|
|
|
|
|
I'm a VB developer and i'm making a software that use a multiport video capture card.
I need to use directshow in order to select the video composite-in. I know i need to use the crossbar filter but i'm a novice in c++ programing.
Please help me to resolve my problem.
Thanks
|
|
|
|
|
Who can explain :
char *m="az";
cout << m << endl;
i=0;
cout << m[i++] << m[i++] << endl ;
i=0;
((cout.operator<<(m[i++])).operator <<( m[i++])).operator <<(endl) ;
Gives (Visual C++) 6.0 :
az
za
za
Thanks .
|
|
|
|
|
Using more than one ++ or -- operator on anything but a line by themselves is always risky. Looking at the statement:
cout << m[i++] << m[i++] << endl; the i++ statement gets executed first, and that value (1) is used with the [] operator.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
sorry but the value of i used by the [] operator will be 0 ...
I think you're confused whith ++i ...
|
|
|
|
|
cout << i++ << i++ << endl; Stepping into the code for ostream& ostream::operator<<(int n) revealed that n had a value of 1 the first time, and a value of 0 the second time. Had the pre-increment operator been used instead, a subscript-out-of-range error would have been realized since the value of n would have been 2 the first time through. Separating the i++ operations into two statements solves all the problems.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Um, no.
The problem here is the undefined behavior of the multiple ++ operations which does get you into some problems.
int i = 0;
cout << m[i++] << endl;
This code would fetch the 0'th value. The ++ and -- operators are not risky when you know how to use them. They have well defined behaviors and undefined behaviors.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
In the second and third cout statements, you are modifying the value of i more than 1 time between sequence points. The result of this is undefined behavior - the compiler can output anything it wants.
|
|
|
|
|
// Loading bitmap image from file
bool ResLoad = SrcImage.LoadBMP24Image(szFileName);
Does anyone knows how this statement actualy loads the file?<br />
Below is the function for it i think
bool CBMPImage::LoadBMP24Image(const char* szFileName)
{
FILE* bmp = fopen (szFileName,"rb");
if (!bmp) return false;
BITMAPFILEHEADER BMPFileHeader;
BITMAPINFOHEADER BMPHeader;
fread (&BMPFileHeader,sizeof(BITMAPFILEHEADER),1,bmp);
fread (&BMPHeader,sizeof(BITMAPINFOHEADER),1,bmp);
if (BMPFileHeader.bfType != 0x4d42) {fclose (bmp); return false;}
if (BMPHeader.biSize != sizeof(BITMAPINFOHEADER)) {fclose (bmp); return false;}
if (BMPHeader.biPlanes != 1) {fclose (bmp); return false;}
if (BMPHeader.biCompression != BI_RGB) {fclose (bmp); return false;}
unsigned long BitColor = BMPHeader.biBitCount;
|
|
|
|
|
Goh,
Hope this helps...
FILE* bmp = fopen (szFileName,"rb"); // creates a FILE pointer szFileName
is char[] containing the file name that is passed to the operation.
if (!bmp) return false;//if null e.g no file found
BITMAPFILEHEADER BMPFileHeader;//create handles for the file
BITMAPINFOHEADER BMPHeader;
//fread does the actual loading
fread (&BMPFileHeader,sizeof(BITMAPFILEHEADER),1,bmp);
fread (&BMPHeader,sizeof(BITMAPINFOHEADER),1,bmp);
//check for valid headers date etc..
if (BMPFileHeader.bfType != 0x4d42) {fclose (bmp); return false;}
if (BMPHeader.biSize != sizeof(BITMAPINFOHEADER)) {fclose (bmp); return false;}
if (BMPHeader.biPlanes != 1) {fclose (bmp); return false;}
if (BMPHeader.biCompression != BI_RGB) {fclose (bmp); return false;}
unsigned long BitColor = BMPHeader.biBitCount;
so if success bmp contains a pointer to the bitmap file.
Does this help???? or do you need more info, not sure of your experience etc..
Ross W
|
|
|
|
|
I am a beginner trying to understand the codes
so where does the function knoe which file to create a file pointer. Where should the filename be placed
Thank alot
|
|
|
|
|
The key is szFilename, this will be a character array (string)
that will contain the path of the physical file, like "c:\SomeBitmap.bmp" look for the definition of szFilename
before the call below:
bool ResLoad = SrcImage.LoadBMP24Image(szFileName);
It may well of come from a dialog in which case it would have come from a member variable...
The key thing is that you could simply do this:
bool ResLoad = SrcImage.LoadBMP24Image("c:\\SomeBitmap.bmp");
If there is anything else please ask
|
|
|
|
|
Dear rw104,
Can I have your ICQ or msn number as i feel it is slow to ask you in this way.
I still got lots of queries. Can I sent you the file to take a look thx
Hui Beng
Thx
|
|
|
|
|
Hello,
I'm trying the following code in an MFC project, which is causing a compiler error. I hope you can guide me with any error/mistake in my code:
My Code:
...
#include <MyClass.h>
#include <vector>
...
vector<CString> *g_pvecStrings;
...
void g_MyOtherFunction(void);
...
void CMyClass::MyFunction(void)
{
vector<CString> vecStrings;
...
g_pvecStrings = vecStrings;
...
g_MyOtherFunction();
...
vecStrings.clear();
}
void g_MyOtherFunction(void)
{
CString csMyStr;
...
g_pvecStrings->push_back(csMyStr);
...
}
The MSVC++ 6.0 (SP5) compiler error for the statement marked as (1) above:
error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::vector<class CString,class std::allocator<class CString> >' (or there is no acceptable conversion)
Please reply on this...
Thanks,
Rgds,
Nirav Doshi
* Don't wish it was easier, wish you were better! *
|
|
|
|
|
MFC classes like CString tend to not play nicely with STL components. Pick one or the other, and try not mix them without some kind of adapter.
If you can keep you head when all about you
Are losing theirs and blaming it on you;
If you can dream - and not make dreams your master;
If you can think - and not make thoughts you aim;
Yours is the Earth and everything that's in it.
Rudyard Kipling
|
|
|
|
|
Thanks Andrew for your reply!
Actually, I have my own CWBString class which basically is wrapping string data, which is (obviously) as a "char * ".
I changed that class references with CString for the purpose of the query post for easy explanation.
If as you're saying, I guess I won't be able to use the vector container! ... Is that it?
Thanks,
Rgds,
Nirav
* Don't wish it was easier, wish you were better! *
|
|
|
|
|
First line you're trying to assign a std::vector<T> to a std::vector<T>*, which obviously fails, and should fail unless something really fishy is at work here.
Second line you're trying to assign a local variable to a global variable by using the address-of operator on the local variable. This will cause the g_pvecStrings variable to point to memory on an unwinded stack after the termination of the void CMyClass::MyFunction(void) method call.
The correct approach would be to do: *g_pvecStrings = vecStrings; presuming g_pvecStrings != 0. An even more correct approach would be an application redesign, but that's probably just the C++ purist in me talking.
Hope that helps.
--
Henrik Stuart (http://www.unprompted.com/hstuart/)
|
|
|
|
|
Thanks Henrik for your reply!
Henrik Stuart wrote:
First line you're trying to assign a std::vector<t> to a std::vector<t>*, which obviously fails, and should fail unless something really fishy is at work here. The correct approach would be to do: *g_pvecStrings = vecStrings; presuming g_pvecStrings != 0.
The *g_pvecStrings = vecStrings; doesn't work too!
Henrik Stuart wrote:
An even more correct approach would be an application redesign, but that's probably just the C++ purist in me talking.
Thanks for this point! My basic purpose is to call a global function which is going to fill the vector with strings. The filled vector is to be used in two of my class member functions. So to pass the data between the class member functions and the global functions I was doing this.
So, I had the global pointer to a vector, which was to point to a vector which will be allocated on the stack within my member function. From within the SAME function I was releasing and making the g_pvecStrings = NULL ;
Please suggest the right way to get this going!
Thanks!
* Don't wish it was easier, wish you were better! *
|
|
|
|
|
Nirav Doshi wrote:
Thanks for this point! My basic purpose is to call a global function which is going to fill the vector with strings. The filled vector is to be used in two of my class member functions. So to pass the data between the class member functions and the global functions I was doing this.
The C++ way is to avoid using anything global and use a static member function instead and static class variable.
John
|
|
|
|
|
Oh! Thanks! )... With my confusion to trying to get my work done within my timeline, I delved into some of my old C-style coding!
I guess, this would be the best way to solve my requirement!
Thanks again!
Rgds,
Nirav
* Don't wish it was easier, wish you were better! *
|
|
|
|
|
Making the variable a class static does little to the design. It just changes the namespace. If it was bad code as a global variable, it is still bad code as a class static.
My question is why can't the vector be passed by address or reference to the global functions. Then you avoid the global variables, true or class statics.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
1. Filling the vector through the global or static pointer isn't a good idea. You should pass the vector to the MyOtherFunction by reference.
<br />
void CMyClass::MyOtherFunction(vector<CString>& vec)<br />
{<br />
vec.push_back(...)<br />
}<br />
2. If the compiler generates error on *g_pvecStrings = vecStrings , I think that your class CWBString is the deliquent (because with CString it works ok). The assignment operator in vector causes assignments of each element. Hence, did you declared correctly the copy constructor or assignment operator in CWBString ?
Robert-Antonio
"Science is a differerntial equation.
Religion is a boundary condition."
|
|
|
|