|
Wild theory.
If you're sending more than, say 512 bytes at a time, the socket will probably have to fragment the data to get within the current Maximum Trasmission Unit (MTU) limits for internet packets. I have suspected resource problems in the past related to this fragmentation.
No proof on this, but maybe you can experiment. Win9x may be more succeptable.
There may be other factors involved as well, such as the rate at which packets are being received. ?
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
I want to use try and catch in my program for managing errors.
void CEditorDlg::Saving()
{
UpdateData(TRUE);
CFileException *fileErr;
CFileDialog fd(FALSE, "*.txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text file (*.txt)|*.txt||", this);
CFile file;
if(fd.DoModal() == IDOK)
{
try
{
file.Open(fd.GetPathName(), CFile::modeCreate | CFile::modeWrite, fileErr);
file.Write(m_MainEdit, m_MainEdit.GetLength());
file.Close();
}
catch(CFileException *err)
{
file.Abort();
err->ReportError();
}
}
}
But when in saving file was any error, this code won't work.
Please tell me, how can i use of try/catch for managing ERRORS.
Thanks.
Hadi Rezaie
|
|
|
|
|
You should put in a catch for all cases like this
catch(...)
that will get called for any errors not specifically covered.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
>You should put in a catch for all cases like this catch(...)
I disagree - in VC you will leak memory if CException based pointers are thrown, and you might catch all sorts of processor traps that you can't deal with.
Not everyone agrees with me on this one, so I just post this as a caveat emptor.
|
|
|
|
|
You should pass a pointer to an existing exception object, then check the return value of the call to open - if FALSE, check the exception object. This is an exception that is filled in, not thrown. From the MSDN:
CFile f;
CFileException e;
char* pFileName = "test.dat";
if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e.m_cause << "\n";
#endif
}
In your code, you are passing in an uninitialized pointer - thats bound to be problematic.
|
|
|
|
|
Two things.
First, you must delete any thrown CException based exceptions by calling the Delete() function inside your catch handler.
e->Delete();
Second, You are only passing a pointer to a CFileException object. You need to pass an actual one. It would be better to just use the Constructor based method instead, which will create the exception for you if there is an error.
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
I have program(Dialog based) that in this program i used of Status bar control.
I want to change status bar position in the dialog.
More explain: I want to change position when event is OnSize, OK ?
I wrote it but this code won't work.
::MoveWindow(wnd_Status.m_hWnd, 10, 10, 20, 20);
Please help me ...
Hadi Rezaie
|
|
|
|
|
How can I detect the answer of a modem that I called from mine immediately after dialing the phone number (during PROCEEDING of call state and not at the end)?
THANKS
|
|
|
|
|
There is a Carrier Detect (CD) line that will go high when the connection is made.
If you are using a 3rd party ActiveX control or the MSComm control, there is an event that will fire when the status of the line changes. You can then retrieve the status of the CDHolding property to see whether the connection has been made or not.
|
|
|
|
|
Hello!
I'm trying to insert Simple MAPI to my Application (without using the CDocument related Component from Component Gallery). There's a quite good example in the MSDN Library (just what I need) but the Linker always exits with
"mapitestView.obj : error LNK2001: unresolved external symbol _MAPISendMail@20"
I could reproduce the error with a simple wizard generated Standard SDI App, in which I inserted my several lines of code.
I included mapi.h and added mapi32.lib to the linker settings.
I'd be very glad if someone could give me some advice on how to avoid this error.
bye
Matthias
|
|
|
|
|
Get rid of mapi32.lib from the linker settings. You can't call the MAPI functions directly, you need to do this:
typedef ULONG (FAR PASCAL *MAPIFUNC) (LHANDLE lhSession, ULONG ulUIParam,
lpMapiMessage lpMessage, FLAGS flFlags,ULONG ulReserved);
const HINSTANCE hMAPILib = ::LoadLibrary("MAPI32.DLL");
MAPIFUNC lpMAPISendMail = (MAPIFUNC)GetProcAddress(hMAPILib, "MAPISendMail");
then when you want to call it:
ULONG result = lpMAPISendMail(0, 0, &mail, NULL, 0);
...
VERIFY(::FreeLibrary(hMAPILib));
Should do the trick.
~Kevin
|
|
|
|
|
How can I convert int to string and float to string?
Thank you
Kyousuke
|
|
|
|
|
You can use the itoa function (integer to ascii) to convert an integer to a string.
char *pReadBuffer;
_itoa(m_yourInteger, pReadBuffer, 10);
greetz
|
|
|
|
|
Do you mean C++ standard strings (std::string) or MFC CStrings? In standard C++ you do it with string streams:
#include <sstream>
#include <string>
using namespace std;
//...
ostringstream os;
string s1, s2;
os << 123; // int to stringstream
s1 = os.str(); // stringstream to string
os.seekp(0); // clear stream
os << 1.234; // float to stringstream
s2 = os.str();
In MFC, use CString.Format()
|
|
|
|
|
We have a C++ app which ran on Win95 using the C++ convention to call another exe as system("Myapp.exe"), then calls another exe next line system("Myapp1.exe"). In Win95 these two programs start automatically, using command.exe. Everything ok.
When we run the same application on NT, system("Myapp.exe"), line will wait unti Myapp.exe finishes before starting Myapp1.exe.This executes cmd.exe.
Obviously CreateProcess should have been used, but are there any workarounds without changing the code. To force the exe's to start.
Thanks.
Gerry.
|
|
|
|
|
|
I've already done this in a batch file, but in the C++ compiled code, it has system("Myapp.exe").....I'm trying desperately not to change any code.....
I was going to change the environment var in the Registry, from cmd.exe to command.exe....this works...but results undefined .
Thanks.
Gerry.
|
|
|
|
|
I'm looking into developing an app that needs to have a slight twist on the doc/view architecture, and I'd like some opinions.
In a nushell, we'd like to have an Explorer-type interface, but with the tree containing multiple documents. The top level of the tree would contain N documents, and the data within each document, which is organized hierarchically, would be displayed as children of the documents.
The wrinkle here is that the window containing the tree is outside the normal doc/view paradigm; it not only displays a "list" of available documents, it also displays data for each document. I know how to deal with the latter problem - I'll bypass the UpdateAllViews() mechanism in MFC and replace it with a custom Publish/Subscribe scheme - but how to deal with the tree window?
So far, two ideas have occurred to me:
1) Make the tree window be a child of the mainframe, and not a view; that is, something analogous to a permanently docked control bar.
2) Create a phony "master document", which references all the other documents, and then have this window be a view into the master doc.
I'm still kicking ideas around, but tonight I'm leaning toward 1). Thoughts? Suggestions? References? Catcalls? (I suppose for you Aussies, these would be Koala calls...)
TIA
Jim Johnson
|
|
|
|
|
Regarding getting a list of documents, there's a built-in way to do that. Look at CDocTemplate::GetFirstDocPosition() and CDocTemplate::GetNextDoc()
--Mike--
http://home.inreach.com/mdunn/
The preferred snack of 4 out of 5 Lounge readers.
|
|
|
|
|
i used the second approach in a project a couple of years ago that sounds vaguely similar to yours ... both ways will leave you grunging around in plumbing issues to make the right things visible to the right things so to speak
i ended up with a master doc of a bunch of pointers to the other docs and views ... all i had to do was manage the pointers and swap stuff around as needed
---
"every year we invent better idiot proof systems and every year they invent better idiots"
|
|
|
|
|
I am looking for an algorithm to match an RGB value to the nearest color in a table of values without having to realize a palette.
Any suggestions would be most welcome.
Happy programming!!
|
|
|
|
|
MSJ had an article on OctTrees several years ago (96/97?).
That would do what you want. It fast too. It was a 'wicked code' article.
I think it was written by Jeff Prosise, but can't remember. You can find it
and the code example on the MSJ website.
Stephen Kellett
|
|
|
|
|
The URL is http://msdn.microsoft.com/library/periodic/period97/wicked1097.htm
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
I am writing a small program in C++ without MFC(call me a glutton for punishment, but I want to avoid the hassle of the dependancy). The premise of the program is that it will delete all of the files in a given directory if the file is older than a given number of days. 99% of the application works fine, except the code below:
FILETIME ft;
ULONGLONG qwResult;
ft = getTimeInFiletime();
//ULONGLONG localAge = (ULONGLONG)age;
// Copy the time into a quadword.
qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;
// Subtract x days.
ULONGLONG lngDaysToSubtract;
lngDaysToSubtract = age* _DAY; //Note: _DAY is a ULONGLONG, a.k.a __int64
qwResult -= lngDaysToSubtract;
// Copy the result back into the FILETIME structure.
ft.dwLowDateTime = (DWORD) (qwResult & 0xFFFFFFFF );
ft.dwHighDateTime = (DWORD) (qwResult >> 32 );
This code is creating a FILETIME structure that will contain the "cuttof date", for example if someone calls the program with a parameter of 30 days, it will create a FILETIME structure containing the date of 30 days ago. The problem here is this line:
lngDaysToSubtract = age* _DAY;
"age" is an int parameter passed into this function. If I replace this variable with a hard-coded parameter, say 30, this code works fine. But it fails if I use the function parameter. If I throw in a "printf("Age is: %s\n",age);", it shows that the value is what I expect it to be.
I have been banging my head on this problem all morning. If anyone can help me solve it, I would be extremely grateful!!
Thanks
|
|
|
|
|
"age" is an int parameter passed into this function. If I replace this variable with a hard-coded parameter, say 30, this code works fine.
That tells me that "age" is too small of an integer. A normal int only holds up to ~2B and depending on what the value of _DAY is, that multiplication is probably overrunning the capacity of an int. Change "age" to ULONGLONG, or cast "age" to ULONGLONG in the multiplication, and I bet it'll work.
--Mike--
http://home.inreach.com/mdunn/
The preferred snack of 4 out of 5 Lounge readers.
|
|
|
|