|
Hmm, I didn't make this an MFC project per se, just started with an empty solution but I guess some MFC is still being put it automatically.
That link was rather helpful, shows the same error message I'm getting so that should be the right track. I'm not using strcpy or strncpy anywhere. I use my own loops to copy element by element in CABLE. In fact the only string function I think I'm using is strlen . Here's the CABLE class in it's entirty. It's pretty simplistic, I'm pretty much just doing it for practice with plans to add on to it as I learn more.
#include <CABLE.h>
CABLE::CABLE()
{
cable = new char[1];
cable[0] = '\0';
length = 0;
}
CABLE::CABLE( int newLength )
{
cable = new char[newLength+1];
length = newLength;
for( int i = 0; i <= length; ++i )
{
cable[i] = '\0';
}
}
CABLE::CABLE( const char * const newCable )
{
length = strlen( newCable );
cable = new char [length+1];
for( int i = 0; i <= length; ++i )
{
cable[i] = newCable[i];
}
cable[length] = '\0';
}
CABLE::CABLE( const CABLE & rhs )
{
length = rhs.GetLength();
cable = new char[length+1];
for( int i = 0; i <= length; ++i )
{
cable[i] = rhs[i];
}
cable[length] = '\0';
}
CABLE::~CABLE()
{
delete cable;
cable = NULL;
length = 0;
}
CABLE & CABLE::operator=( const CABLE & rhs )
{
if ( this != &rhs )
{
delete [] cable;
length = rhs.GetLength();
cable = new char[length+1];
for( int i = 0; i <= length; ++i )
{
cable[i] = rhs[i];
}
cable[length] = '\0';
}
return *this;
}
char & CABLE::operator[]( int offset )
{
if ( offset > length )
{
return cable[length-1];
}
else
{
return cable[offset];
}
}
char CABLE::operator[]( int offset ) const
{
if ( offset > length )
{
return cable[length-1];
}
else
{
return cable[offset];
}
}
CABLE CABLE::operator+( const CABLE & rhs )
{
int totalLength = length + rhs.GetLength();
CABLE temp( totalLength );
for( int i = 0; i < length; ++i )
{
temp[i] = cable[i];
}
for( int j = 0; j < rhs.GetLength(); ++j, ++i )
{
temp[i] = rhs[j];
}
temp[totalLength] = '\0';
return temp;
}
void CABLE::operator+=( const CABLE & rhs )
{
int totalLength = length + rhs.GetLength();
CABLE temp( totalLength );
for( int i = 0; i < length; ++i )
{
temp[i] = cable[i];
}
for( int j = 0; j < rhs.GetLength(); ++j, ++i )
{
temp[i] = rhs[j];
}
temp[totalLength] = '\0';
*this = temp;
}
bool CABLE::operator==( const CABLE & rhs ) const
{
if ( length != rhs.length )
return false;
for( int i = 0; i < length; ++i )
{
if ( cable[i] != rhs.cable[i] )
return false;
}
return true;
}
const char * CABLE::GetCable() const
{
return cable;
}
int CABLE::GetLength() const
{
return length;
}
So as it is, I'm barely using the string class at all. It'd almost be worth it to swap out the strlen for a sizeof() call / size of a char .
________________________________________________________________________
The question "Do computers think?" is the same as "Can submarines swim?"
Signature Red Studios
Jeryth
|
|
|
|
|
If it's not an MFC App Wizard generated project you shouldn't have any MFC.
The only thing I can see in your code is that you use delete cable instead of delete[] cable in the destructor, but from your previous post I guess that's a typo (you said earlier that the debugger highlighted delete[] cable in the destructor).
How is CABLE used in your code? Which methods are called? That may give some clues.
Cheers
Steen
|
|
|
|
|
Jeryth wrote:
I'll say I'm 95% sure that's the cause. All the linking errors mentioned Class A name in the error field.
Multilple includes will give compiler errors(error C2011: 'CClassA' : 'class' type redefinition), not linking errors!
Cheers
Steen.
"To claim that computer games influence children is ridiculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
You're right, I mis-labeled my problem. All classes compiled fine, they just wouldn't link. It was complaining about resolving an exxternal link error or somthing along those lines.
________________________________________________________________________
The question "Do computers think?" is the same as "Can submarines swim?"
Signature Red Studios
Jeryth
|
|
|
|
|
Im using win32 c++ compiler, but now i want to run/execute my program using command line arguments. How do i go about it?
oam
|
|
|
|
|
Are you wanting to do so from within the IDE?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Im using DOS, but now im used to execute it in the application
oam
|
|
|
|
|
From a command prompt (not DOS), type the name of your program followed by any command-line parameters that it supports.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
But then it just opens the program even though i supplied parameters
oam
|
|
|
|
|
Which means you aren't doing anything with them. Look at:
GetCommandLine()
__argc/__argv
CWinApp::m_lpCmdLine (MFC)
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
I've been having network problems!
Anyway i'm able to run it from Debug folder
like F:\Debug>filename file1 file2
can you run this code from the command line
<br />
#include <windows.h><br />
#include <stdio.h><br />
<br />
void main( VOID )<br />
{<br />
STARTUPINFO si;<br />
PROCESS_INFORMATION pi;<br />
<br />
ZeroMemory( &si, sizeof(si) );<br />
si.cb = sizeof(si);<br />
ZeroMemory( &pi, sizeof(pi) );<br />
<br />
if( !CreateProcess( NULL,
TEXT("MyChildProcess"),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
) <br />
{<br />
printf( "CreateProcess failed (%d).\n", GetLastError() );<br />
return;<br />
}<br />
<br />
WaitForSingleObject( pi.hProcess, INFINITE );<br />
<br />
CloseHandle( pi.hProcess );<br />
CloseHandle( pi.hThread );<br />
}<br />
|
|
|
|
|
mpapeo wrote:
can you run this code from the command line
Yes, why?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Well im having problems with the below code in the bold and italic line, because i don't want to hardcode the process which i want to create (mychildprocess). I want it to be one of the commandline arguments.
[code]
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
[/code]
So what can i replace TEXT with?
oam
|
|
|
|
|
mpapeo wrote:
Well im having problems...
Meaning what?
mpapeo wrote:
if( !CreateProcess( NULL, // No module name (use command line).
TEXT("MyChildProcess"), // Command line.
Per MSDN:
The lpApplicationName parameter can be NULL. In that case, the module name must be the first white space-delimited token in the lpCommandLine string.
You've not specified a valid module name for the lpCommandLine parameter.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
I dont understand that, if i specify the MyChildProcess as the commandline argument it execute correctly, but then if another process which has not been specified there it doesn't execute it but instead it still execute the hardcoded one.
And what should i specify for the lpCommandLine parameter?
oam
|
|
|
|
|
Ive solve it by putting argv[]
oam
|
|
|
|
|
hello,
I have created an application that works fine for WIndows I want to port this application to MAC how can I do this
|
|
|
|
|
hello,
I have created an application that works fine on Windows .How can I port this application for MAC
|
|
|
|
|
To answer the topic question, no I don't believe Visual Studio can compile for Mac execution. It may be a hidden feature but not one I'm aware of. Given MS dislike for Apple I don't imagine they'd make software that can support Apple hardware.
For a little side note lesson, one which you may already know, the main reason program execution can't be directly taken from one machine to another ( Intel -> Apple, Apple -> Alpha, etc ) is because of the CPU architechture. The CPU internals just work differently which is why code needs to be ported rather than just copied over.
If you're using ANSI standard C++ ( nothing unique to .NET, Windows environment, DirectX, etc ) all you need to do is copy the the source code and build it on a Mac with a C++ development suite. I'm not familiar with Mac development so I can't recommend a good Mac IDE. Being as .cpp and .h files are just strict ASCII text files they're universally recognizable so you should be able to just copy them straight across.
If you are using Windows unique code, DirectX, or anything like that, you'll have to replace those sections with Mac compliant code. As far as I know there's no way around this.
The question "Do computers think?" is the same as "Can submarines swim?"
Signature Red Studios
Jeryth
|
|
|
|
|
you can't, well, not easilly ... you will probably need to recode most/all of the UI, rewrite most/all file access routines, and probably graphic thingies ( if you doing things like that ).
and if you use Objective-C, then, I think you will need to do A LOT OF WORK doing bridges between Objective-C and C++.
Maximilien Lincourt
Your Head A Splode - Strong Bad
|
|
|
|
|
I strongly recommend rewriting your app in Java or Qt[^] instead of simply porting it to the Mac.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
In VC++ 4.0 with MFC 4.0 you could cross-platform develop for Win and Mac (using MFC), but AFAIK that feature hasn't been included in any newer MS VC compilers.
Cheers
Steen.
"To claim that computer games influence children is ridiculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
Visual C++ 4 did provide cross compilation. Only for Mac OS 7 till 9, never for anything beyond.
It is secretly believed that Micrsoft did continue development on a Mac version of their new compilers but none of them were available to the public.
If you target Mac OS X, it is impossible to use this compiler. You will have to revert to other tools.
If you target the older platform (minority of Mac users now), you can still use that compiler but the native mac tools are much better.
I did a couple of years back a project where we started with Visual C++ cross compilation and we ended up migrating to Metrowerks.
For mac cross compilation, you need both machines sitting next to each other (same appletalk network).
Given the difference in quality of current compilers on all platforms compared with the old Visual C++ 4, I strongly recommend you to seek native solutions when compiling for the Mac. For Mac OS X, the development tools from Apple are free.
Good luck, and drop me a line at macchess at internetcontact.be if this helped.
|
|
|
|
|
Hey guys, I'm new here and not very experienced with C++ so I'd appreciate any help.
I'm trying to read a binary file and put the contents into a structure. However, I run into a problem whenever I come across 0x08, which results in my code only reading 8 instead of 08 into my structure. Here is part of my code.
// structure i'm using
struct something
{
char head1;
char head2;
};
int main()
{
something packet;
fstream data;
fstream output;
// open the file for input in binary mode
data.open("test.dat", ios::in | ios::binary);
output.open("dataoutput.dat", ios::out);
// reading contents of file
data.read(reinterpret_cast<char *="">(&packet), sizeof(packet));
output << "Primary Header Info: " << endl;
output << packet.head1 << packet.head2 << endl;
data.close();
output.close();
return 0;
}
The result I get in my strucutre is 820 instead of 0820. Any ideas as to why ? TIA
|
|
|
|
|
The Problem is called struct member alignment.
see msdn : struct member alignment
the compiler inserts extra bytes to optimize it for a cpu.
the standard alignment is 8.
To make your code work, you have to insert
#pragma pack( push, 1)
struct
{
//..
};
#pragma pack(pop)
the pragma enables aligment of 1 byte.
This is not a good way to solve your problem.
You better insert 2 methods to read/write your struct memberwise.
This is called serialisation.
|
|
|
|