|
Fatbuddha 1 wrote: I mean if I can detect what Os I am facing...
To my knowledge, there is not a platform-independent way of determining this. For Windows, check out GetVersionEx() .
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
You can't compile a program and expect it to then be copied to any computer and run. So, it's not that bad to make a function in your own code that does different things depending on which operating system it is compiled for (you may be cross compiling for all I know)
Ie:
DWORD HowManyMegaBytesDoIHave ()
{
#ifdef _WINDOWS
return ThatWindowsAPIFunction ();
#endif
#ifdef _MACOS9
etc
}
I hope that made sense. I'm pretty sure the windows one is real, no idea about the other, but they're just meant to illustrate. You'll have to the same #ifdef with the headers too.
If you want one codebase to work identically on all OS's, then you'll have to scale back your desires a long way.
Good luck,
Iain.
In the process of moving to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), give me a job!
|
|
|
|
|
Sorry for the late answer.
Of course you are right, what was I thinking??
Spend to much time on Java .
So to conclude either your way, or I simply provide a version of my prog for win and unix. This might be even the cleaner style.
Thanks and have a nice weekend.
Cheers
You have the thought that modern physics just relay on assumptions, that somehow depends on a smile of a cat, which isn’t there.( Albert Einstein)
|
|
|
|
|
Hello.
My program gets "segmentation fault" in "strcat(string,stringaux)" and it is strange because I am sure that string always has space for adding the new stringaux due to before call strcat I check if size of the destiny plus new stringaux is less than string capacity:
char string[100];
char stringaux[3];
void Function()
{
if ((strlen(string)+strlen(stringaux))<100)
{
strcat(string,stringaux)
}
}
In this way strcat() never can make string be longer than 100. But still I get SEGMENTATION DEFAULT.
I have been reading, and the explanation can be that the Stack gets full due to I have many local variables or ...
Is there anybody can tell me some ideas about why SEGMENTATION DEFAULT is produced in strcat() when I am sure that is not because there is not space in the destiny string?
Thanks in advance.
|
|
|
|
|
Are you completely sure the segfault comes from strcat? How did you determine this (setting breakpoints, putting traces in the code...)?
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Because If I add a comment in the strcat() the segmentation fault does not appear and if I take the comment away the segmentation fault appears.
|
|
|
|
|
Hmm...what happens if you increate the string buffer to -let's say- 150 chars? Or increase your stringaux to -let's say- 10 chars? Does anything change? Also, before the strcat, try displaying the 2 strings to see what is in them, printf or puts should do it...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
Remember that strlen returns the length without the terminating null character.
|
|
|
|
|
That is not the point!
Even if I am taking care your comment and in the example I change <100 by <99 the problem is not there.
Because as I said before I am sure that the segmentation fault is not because there is not space in the destiny, even if I make bigger the destiny [1000] I still get the segmentation fault.
|
|
|
|
|
strcat() appends source to destination, overwriting the null character. Does string have one?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Probably yes, since strlen appears (or as someone already suspected, maybe that the segmention fault occur before the actual call to strcat ) to succeed.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Yeah, I did not bother to fully scrutinize his code. It's possible that stringaux has a '\0' but not within the 3 bytes allocated to it.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
DavidCrow wrote: It's possible that stringaux has a '\0' but not within the 3 bytes allocated to it.
But, I suppose, that doesn't harm (it is string the indictee...).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I am sure that the problem is in strcat and not in strlen.
|
|
|
|
|
Why?
Could you please post a test case (i.e. the input values for the two string) showing the failure?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Can you tell me, Which compiler you are using?
I have tried with same code given above with gcc compiler in Debian, I doesn't get any Segmentation fault.
Its may be because of your compiler.
I too faced the Same problem when i tried to get the String in run time, in tcc. then later I tried with gcc it worked perfectly..
|
|
|
|
|
Hello,
Can a RUNTIME_CLASS macro have a class with parameters ?
CMDIFrameWnd* pFrame = STATIC_DOWNCAST(CMDIFrameWnd,AfxGetApp()->m_pMainWnd);
CString str = "string";
pFrame->CreateNewChild(RUNTIME_CLASS(TableF(str),IDR_KTYPE, m_hMDIMenu, m_hMDIAccel);
Prithaa
|
|
|
|
|
RUNTIME_CLASS macro will only take class name as parameter.
prvn
|
|
|
|
|
Hello,
Thanks for your reply.
CMDIFrameWnd* pFrame = STATIC_DOWNCAST(CMDIFrameWnd,AfxGetApp()->m_pMainWnd);
CString str = "string";
pFrame->CreateNewChild(RUNTIME_CLASS(TableF(str),IDR_KTYPE, m_hMDIMenu, m_hMDIAccel);
so when I am making this window and I want to pass parameters what should be done.How can I trace the object of this window.
Pritha
|
|
|
|
|
Hey, I am trying to open form2 from form1. Then open a new form1 when form 2 is closed. But adding the #include "Form1.h" header to form2.h is causing errors (undeclared identifier). I added these inclusion guards and tried using forward declaration. EIther that didn't work or I used it wrong because these are the automatically generated code for Forms in the .h file.
/*Form1.h*/
#pragma once
#ifndef First
#define First
#include "Form2.h"
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2 ^ frm = gcnew Form2;
frm->Show();
this->Close();
}
#endif
/*Form2.h*/
#pragma once
#ifndef Second
#define Second
#include "Form1.h"
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form1 ^ frm = gcnew Form1;
frm->Show();
this->Close();
}
#endif
|
|
|
|
|
You should post this question in the Managed C++ forum.
|
|
|
|
|
As Cedric said, there is a managed C++ forum - and you should be using it.
But in C/C++, this would work:
class CTwo;
class COne
{
...
CTwo *m_pTwo;
CTwm m_Two;
};
class Two
{
...
COne *m_pOne;
COne m_One;
};
I hope that helps,
Iain.
In the process of moving to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), give me a job!
|
|
|
|
|
|
1/ It's a codeguru article - did you get any luck on codeguru's forums?
2/ I've had good success with a codeproject article:
http://www.codeproject.com/KB/miscctrl/colour_picker.aspx[^]
3/ I've written my own combobox like control, where you can put anything you like in the little boxes...
http://www.codeproject.com/KB/miscctrl/generic_picker.aspx[^]
4/ If you look at the code on the original codeguru article, you'll see it handles WM_DRAWITEM, and there will be a couple of lines where it draws the coloured box - just replace that with your own code.
5/ Didn't I already point you at our combobox section? We have several other owner draw combo boxes that you can learn from.
6/ Good luck!
Iain.
In the process of moving to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), give me a job!
|
|
|
|
|
hey guys my project is about how to limit the download and the upload from the internet, and it will be run on a server connected on many pcs, so the server will organize the limit of each pc, and manage the download and upload, and if one exceed it limit it sends a warrning message.
But i face a problem during implementation in c++, first i used the buffer to control the limit, but i don t know how i can know if any pc use the internet browser to download or upload and how i can get the data from the internet browser and transfer it to bytes and store it in the buffer:
this is my code:
setlimit(int limit, int nbofpc)
{
Float limitbypc;
Limitbypc = limit/nbofpc;
For(int i=0; i<nbofpc;i++)>
Char buffer limitbypc;
Return 0;
}
if(download)
{
void downloadlimit( )
{ AnsiString IP;
For(int i=0; i<nbofpc;>Switch (IP)
{Case ‘10.15.1.157’: bufferlimitbypc = fputs(data);
If(sizeof(data)) == sizeof(buffer)
WriteString ("you can’t download more"); break;
Case ’10.15.1.158’: bufferlimitbypc = fputs(data); break;
If(sizeof(data)) == sizeof(buffer)
WriteString ("you can’t download more"); break;
……………
Case’10.15.1.164’: ……….; break;
}
}
Return 0;}}
if(upload)
{
void uploadlimit( )
{ AnsiString IP;
For(int i=0; i<nbofpc;>Switch (IP)
{Case ‘10.15.1.157’: bufferlimitbypc = fputs(data);
If(sizeof(data)) == sizeof(buffer)
WriteString ("you can’t upload more"); break;
Case ’10.15.1.158’: bufferlimitbypc = fputs(data); break;
If(sizeof(data)) == sizeof(buffer)
WriteString ("you can’t upload more"); break;
……………
Case’10.15.1.164’: ……….; break;
}
}
Return 0;}}
thanks
joseph
|
|
|
|