|
Like2Byte wrote: ...any tools exist to do a more exhaustive 'cleansing' of resource files...
Yes, such tools exist.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
You're not calling the base class OnOk() from your override are you?
Mark
|
|
|
|
|
Do you mean calling OnOK() from within OnOK()? If so, no.
The view class uses the default (vanilla) OnOK() function.
The CRecSetupDlg class overrides the OnOK() function and calls EndDialog(IDOK) as the last statement in the OnOK() function.
|
|
|
|
|
What view class? I didn't see that mentioned before
The warning assertion you posted is because of closing a CWnd improperly - It should be done in
two steps, one for the windows object (HWND) and one for the C++ object (CWnd).
If you break in the debugger at the assertion and quickwatch the "this" pointer, what type
is the window. It sounds like it's coming from a different window than the modal dialog.
BTW, I've never coded for CE so hopefully I'm not way off here
Mark
|
|
|
|
|
Thanks for that!
This class is a SDI application. Why it wasn't designed as a dialog class, I don't know. I inherited this applicaton.
I'll see what I can dig up about the CWnd closing improperly and the this pointer. Gimme a few.
|
|
|
|
|
I have written a class as follows,
class String<br />
{<br />
char *m_string;<br />
unsigned int m_length;<br />
<br />
public :<br />
String(void);<br />
String(char *str);<br />
String(String str);<br />
virtual ~String();<br />
<br />
int GetLength(void);<br />
<br />
void operator=(char *str);<br />
<br />
String operator+(String str);<br />
String operator+(char ch);<br />
String operator+(char *str);<br />
<br />
bool operator==(String str);<br />
bool operator==(char* str);<br />
<br />
bool operator!=(String str);<br />
bool operator!=(char* str);<br />
<br />
String Trim(void);<br />
<br />
void InsertAt(int pos, char ch);<br />
};
for
String obj1("AS"), obj2("qwe");<br />
if( obj1 == obj2 )
if( obj1 == "as" )
But which function should be written to perform operation if( "as" == obj1 )
I was thinking about a '=='operator overloaded frien function. But it generate an error.
Can anyone suggest a better way for this?
When I add constructor as String(String str); It gives compile error as illegal copy constructor. Why? what is solution?
|
|
|
|
|
Aniket Salunkhe wrote: When I add constructor as String(String str); It gives compile error as illegal copy constructor.
Try String(String&& str);
For your overloaded operators, within the function you need to get a handle to your stored string and pass them both into the standard string compare functions i.e.
bool operator==(char* str)<br />
{<br />
return strcmp( str, m_string ) == 0;<br />
}
|
|
|
|
|
WalderMort wrote: String(String&& str);
twice ?
weren't you thinking to const String& instead ?
|
|
|
|
|
Well, if an address needs and address it wouldn't be const now would it , sure as hell confuse the post office though.
I have no excuse this time
|
|
|
|
|
Aniket Salunkhe wrote: But which function should be written to perform operation if( "as" == obj1 )
None.
"as" is a pointer and if you compare the pointer value with an object you will at least get an error similar to "cannot convert obj1 to char*".
You could compose your if-statement as
if( String( "as" ) == obj1 )
Regarding the copy constructor the syntax is this:
String( const String& str ) which should be similar to the syntax of the assignment operator, the difference is that the assignment operator should return a reference to the object to allow statements like
obj1 = obj2 = "MyString";
The assignment operator declaration should look like this:
String& operator=( const char* str );
String& operator=( const String& str );
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger
Roger Stoltz wrote: The assignment operator declaration should look like this:
String& operator=( const char* str ); // For assigning a string, and...
String& operator=( const String& str ); // For assigning another object
why like this?
I have written destructor as
String::~String()<br />
{<br />
free(this->m_string);<br />
this->m_length = 0;<br />
}
And I was tring to write Trim function as follows,
String String::Trim(void)<br />
{<br />
<br />
<br />
String trim_string;<br />
<br />
strcpy(trim_string.m_string, this->m_string);<br />
trim_string.m_length = this->m_length;<br />
<br />
while( trim_string.m_string[--trim_string.m_length] == ' ' );<br />
trim_string.m_string[++trim_string.m_length] = '\0';<br />
<br />
trim_string.m_string = strrev(trim_string.m_string);<br />
<br />
while( trim_string.m_string[--trim_string.m_length] == ' ' );<br />
trim_string.m_string[++trim_string.m_length] = '\0';<br />
<br />
trim_string.m_string = strrev(trim_string.m_string);<br />
<br />
return trim_string;<br />
}
But then it gives Runtime error at "return trim_string;" (OR return *trim_string; ) in Trim(). When when I remove code from Destructor function Runtime error doesn't occur.
What is the wrong?
|
|
|
|
|
Aniket Salunkhe wrote: Roger Stoltz wrote:
The assignment operator declaration should look like this:
String& operator=( const char* str ); // For assigning a string, and...
String& operator=( const String& str ); // For assigning another object
why like this?
Which part is unclear?
This is how the assignment operator should be declared to work as expected.
Regarding your destructor I see that you're mixing memory management routines from both C and C++. Don't ever do that! In C++ you shall use new and delete .
Regarding your Trim function.
A Trim function is expected to trim the object it contains, not returning a trimmed copy of the original object. Personally I would like such a function to return a reference to itself in order to allow the use of cascading, e.g. str.TrimLeft().TrimRight() where TrimRight is called on the reference to the str object returned by TrimLeft .
In order to accomplish this your function should look like this:
String& String::Trim()
{
....
return *this;
}
I suspect that the runtime error you get when calling Trim is due to the abscense of a proper copy constructor. This error will disappear if you rewrite the Trim function as suggested above, but that doesn't mean you shouldn't write a copy constructor; you most certainly should in order to avoid shallow copies.
When you write a class that dynamically allocates memory you should always define at least:
- a default constructor that initializes the internal pointers
- a destructor that deallocates memory
- a copy constructor that make deep copies
- an overloaded assignment operator
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Roger Stoltz wrote: A Trim function is expected to trim the object it contains, not returning a trimmed copy of the original object
I am tring to build 'String' class something similar as in C#, in that it doesn't Trim the object itself ! So what should I follow?
Can you help me to create 'String', because I am getting problem in Copy Constructor & Destructor while returning 'String' object in member function.
Should I show you 'String' class? According to your time, check where I am going wrong in 'String' class. OR else just suggest me any book/link so design a proper class.
Thanks for your Help.
|
|
|
|
|
Aniket Salunkhe wrote: Can you help me to create 'String'
Sorry, but my answer is 'no' for two reasons:
1. There are existing string classes like CString from the MFC library and std::string from the STL library that are well known and robust. If you need a string class you should use one of those.
2. If you're writing this string class in order to teach yourself then, in my opinion, the best way to learn something new is by trying it out as in "learning by doing". You will make mistakes that will become valuable experiences to you.
Don't get me wrong, of course you can ask questions to this forum, but you should have a better idea of what you want to do than simply "I want to write a string class, how do I do that". Think about how you want your string class to function and what every member function should do.
Have a look at another string class here[^]. Download the source code and try to figure out how each function works and why it works that way. It might get you some ideas of what to do and perhaps what not to do.
Post questions if you don't understand, but think about it first; if you appear lazy you won't get any answers. Don't continue this thread because the question you first asked has been covered. Start a new thread with a specific problem if you have one.
You will also benefit from others that visit CodeProject more frequently than I do.
Regarding your problems with the copy constructor and the destructor they should look something like below depending on how you treat terminating zeros and such.
String::String( const String& SrcString )
{
if( SrcString.m_string )
{
m_string = new char[SrcString.m_length];
m_length = SrcString.m_length;
memcpy( m_string, SrcString.m_string, m_length );
}
else
{
m_string = NULL;
m_length = 0;
}
}
String::~String()
{
delete [] m_string;
m_string = NULL;
m_length = 0;
} Hope this helps
--
Roger
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Hi,
I have to write a VC++ code which should support to send Fax to the user. Could you please let me know any APIs are available to reuse.
Thanks a lot.
Regards,
Janarthan
|
|
|
|
|
Will you please enter a display name into your profile!
|
|
|
|
|
that's boring the number of anonymous posts we're getting these days
|
|
|
|
|
|
Until the DirectX forum is up and running I guess this is the best place to ask.
I'm creating a 2D scene using Dirct3D9, for the most part I have not had many problems. Triangles, Squares and rectangles are easy to draw, but what about circles? What I am looking for is a method to draw a 2D circle which fades ( alpha blends ) towards the edges.
Any ideas?
|
|
|
|
|
|
Thanks for the link, but the article is for a very outdated version of DirectX.
I actually created my own solution, and it was very simple. I used a TriangleFan arranged in such a way that it creates something like a pie chart. This made my other problem of creating a fade effect even easier to solve.
|
|
|
|
|
Hi all,
I am currently trying to get our application working on Vista. We currently build a dynamic pdf file and attach it to a Outlook message through Simple Mapi. This has worked until now. When I call MapiLogin, it returns an error code of 1924235005. This number changes each time it is run, but it is about the same. This is followed by the error message from Outlook, "An error occurred while attempting to open the Windows Address Book. Unable to find the WAB.DLL MAPI 1.0 [00000220]". This only occurs with Outlook 2000. More recent versions of Outlook do work.
Has anyone else run into this?
Any help would be greatly appreciated.
Thanks in advance.
Greg
|
|
|
|
|
Hi,
I have an Atl Component with an Interface EFCMyForm .(ATL Simple Object -- VS2005)
And a Dialog class CMydialog with ActiveX controls Placed on it. using right Click on Dialog and Insert ActiveX Control
In One of thw Exposed Method I am creating the dialog box CMyDialog
CMydialog g_myDlg;
STDMETHODIMP CEFCMyForm::Create()
{
#ifdef _AFXDLL
AFX_MANAGE_STATE(AfxGetStaticModuleState())
#endif
g_myDlg.Create(IDD_MY_DLG);
} using CDialog:: Create().
If I take a Global variable I don't have any problem but if I take mydialog obj as member variable as shown below...
CMydialog m_myDlg;
STDMETHODIMP CEFCMyForm::Create()
{
#ifdef _AFXDLL
AFX_MANAGE_STATE(AfxGetStaticModuleState())
#endif
m_myDlg.Create(IDD_MY_DLG);
} using CDialog:: Create().
then the ActiveX Controls which are placed on the Dialog are not being Shown.
To resolve this If I try to Dyanamically create the ActiveX controls in
CMyDialog::OninitDialog()
{
-----Using Create Control------
CLSID clsid;
HRESULT hr1 = CLSIDFromProgID(OLESTR("EsdGraphCtrl.EsdGraphControl.3.0"),&clsid) ;
if (FAILED(hr1))
{
return FALSE;
}
BOOL blnSuccess;
CRect rc;
rc.left=0;
rc.top=0;
rc.right= 100;
rc.bottom =100;
blnSuccess = m_AxGraphControl.CreateControl(clsid,_T("Graph"),WS_VISIBLE|WS_CHILD,rc,this,100,0,0,0);
if (!blnSuccess)
{
return FALSE;
}
}
Any Suggestions would be helpful
Thanks
Today is a gift, that's why it is called the present.
|
|
|
|
|
hi there genius!!!
I´m actualy programming a routine which needs to detect if the ethernet interface in my system is up or down.
To be more specific; what i exactly need is to know if exist some way to listen to ethernet port and ALERT ME when a ethernet cable/wire is pluged in the PC.
I will be a happy man if u can help me in any of these questions?!
THANX IN ADVANCE
MARCOS!!!
|
|
|
|
|
Have you tried the ISensNetwork interface?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|