|
Chris Meech wrote: You might want to make a call to GetLastError[^].
Does fopen() call SetLastError() ? I would have thought it would use errno instead.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Good point. I've become so used to calling GetLastError to solve things, but you may be correct that errno could be checked instead.
[EDIT]
And now that I've checked fopen[^] in MSDN, it does set errno. :slaps head:
Chris Meech
I am Canadian. [heard in a local bar]
In theory there is no difference between theory and practice. In practice there is. [Yogi Berra]
posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]
|
|
|
|
|
You could be right, too, if fopen() is simply a wrapper around CreateFile() .
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Whenever something is different when UAC is enabled, the first question to ask is "does your application have a security manifest?" and if so, "is it setup properly?"
In a nutshell, the presence of the security manifest will prevent things like "file virtualization" and "registry virtualization" and when setup properly will make your application act like it did before UAC was ever invented (i.e. intuitive when code works and doesn't work and why).
|
|
|
|
|
I have a MFC MDI (logging) application developed in VS2005 in Windows XP which gets logs from another Process(using pipes) and logs them into view. i have a View derived from CEditView. There is so much of logging is done to MFC application for every sec and works good in XP.
when the same application is running in Windows 7. initally it seems to be good but when the logging data is becoming more and more we can se the MFC application is logging data very slowly when compared to XP.
On analysis it was found that operation on Edit Ctrl is making the logging slow
these are the line of code which is making the application slow .
int nLen = GetWindowTextLength();
GetEditCtrl().SetSel(nLen,nLen); // tested GetEditCtrl().SetSel(-1,-1); as well
GetEditCtrl().ReplaceSel(strTemp); // strTemp is the Cstring data which is read from pipe
Is there any better way to make application not to get slow in Window 7 ?
|
|
|
|
|
If this is a logging system why are you using an edit control; do you expect the user to be able to change the content?
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Yes and at the same the logs can be saved as File for analysis purposes if at all if there is any issue.
|
|
|
|
|
Well you are stuck with slow processing because as the edit control grows in size it will become slower to manage and display. Using a simple CScrollView would be a much better choice.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thanks Richard. My MFC Application is very old application which is we are using for years. Dont want to change any class inheritances. except to find an alternative to solve the issue.
|
|
|
|
|
Vijjuuu. wrote: Dont want to change any class inheritances.
Well I'm afraid you are stuck with the problem, unless you can figure out some way to speed up your edit control updates.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Yes i am stuck Thanks for your time for replying.
|
|
|
|
|
As an alternative, see here.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Thanks David. My MFC Application is very old application which is we are using for years. Dont want to change any class inheritances. except to find an alternative to solve the issue.
|
|
|
|
|
Another solution might be to separate the logging from the data acquisition. In other words, instead of receiving data from the pipe(s) and immedialtely log it to a control, how about adding the data to some type of container (e.g., string, vector, list) and let the edit control update itself from that container in a separate thread?
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Ya i tried that as well but that making my application more slow
|
|
|
|
|
Hi All,
I am using shared memory functions, to write data into file.
Problem:
When I want to write the buffer 10MB, to file using below function, i am able to write only in first iteration, second iteration i could not write buffer next part in to memory. please help me if any suggestion. or any wrong in the below code. i have only control on this part. i dont have control in other part which has CreateFileMapping.
any thing i need to change in "dwFileOffsetLow" or "dwFileOffsetHigh". from second iteration onwards the
"MapViewOfFile" returning null. Some place i got input as I need to repeate call MapViewOfFile different ranges. But how to call, any help?
WriteBuffer function i defined as follows:
BOOL CWriter::Write(char* pMemName,char* pBinary,long lBuffSize)
{
long lUnitSize = MEM_UNIT_SIZE;
if( lBuffSize <= 0 && lUnitSize <=0 )
return FALSE;
HANDLE hFileMMF = OpenFileMapping(FILE_MAP_WRITE,FALSE,pMemName);
if(hFileMMF == NULL)
{
DWORD dwErr = GetLastError();
return (FALSE);
}
int nCount = 0;
nCount = (int)(lBuffSize / lUnitSize) + 1;
for(int n =0; n<nCount; ++n)
{
DWORD dwFileOffsetHigh = 0;
DWORD dwFileOffsetLow = lUnitSize*n;
LPVOID pViewMMFFile = MapViewOfFile(hFileMMF,
FILE_MAP_WRITE,
dwFileOffsetHigh,
dwFileOffsetLow,
MEM_UNIT_SIZE);
if( pViewMMFFile == NULL )
return (FALSE);
CMutex mutex (FALSE, _T("MIPSMMMutexWriter"));
CString strTemp;
strTemp.Format("%s",pBinary);
mutex.Lock();
try
{
CopyMemory(pViewMMFFile,pBinary,lUnitSize); }
catch(CException e)
{
DWORD dw = ::GetLastError();
TRACE1("%d",dw);
}
mutex.Unlock(); UnmapViewOfFile(pViewMMFFile);
}
return (TRUE);
}
Nice talking to you. If you judge people, you have no time to love them. -- Mother Teresa
modified 10-Nov-11 0:02am.
|
|
|
|
|
Probably your MEM_UNIT_SIZE is not a multiple of the page size, which is required[^] by MapViewofFile.
You can determine the page size of the current system by calling GetSystemInfo[^] and retrieve the dwPageSize member.
Helped?
modified 10-Nov-11 5:32am.
|
|
|
|
|
Thanks for your reply.
Hi I tried the same way, and changed approach. Added for loop, and used getsysteminfo and assigned the granularity at unitsize place. But first time the mapview was success and memory copy also success.
In second iteration it is just failing.
modified code as follows...
GetSystemInfo(&systemInfo);
dwGranularity = systemInfo.dwAllocationGranularity;
....
for( int n = 0; n < nCount; ++n )
{
if(n+1 == nCount)
dwLength = lBuffSize - n*dwGranularity;
pViewMMFFile = MapViewOfFile( hFileMMF,
FILE_MAP_WRITE,
dwOffsetStart,
dwOffsetStart + dwGranularity,
dwGranularity);
...
Granularity is getting as 65536, and the output of GetLastError is 5.(AccessDenied).
Nice talking to you. If you judge people, you have no time to love them. -- Mother Teresa
modified 15-Nov-11 3:37am.
|
|
|
|
|
Please post dwGranularity, and the returnvalue of the failed call and the result of GetLastError() after the failed call
(tip: you can see the error code in the debugger using err, hr in the watch window)
|
|
|
|
|
Hi i updated my previous question with error code and granularity aswel. but i read in some link, Mapped File May Not be Automatically Grown[^], for that i need to use SetFilePointer() and SetEndOfFile() it seems. i could not get exactly how i can utilize these two functions. I am trying -> trail and error way..
Am i in right path? ps help if you know ..
thanks.
Nice talking to you. If you judge people, you have no time to love them. -- Mother Teresa
|
|
|
|
|
This is the first time I am writing code to get the value from a textbox or listbox, in this case listbox
I keep getting squares. I loaded the listbox with TCHAR's, so I thought TCHARS would be appropriate, then I switched to WCHARs.
It's hard to find a good example to follow on the web.
iValue = (int)SendMessage(lb_SQL_Server_Scan_Servers_Field, LB_GETCURSEL, 0, 0);
if (iValue > -1) {
int nLen = SendMessage(lb_SQL_Server_Scan_Servers_Field, LB_GETTEXTLEN, iValue, 0);
pzServerName = new WCHAR[nLen];
int iResult = SendDlgItemMessage(lb_SQL_Server_Scan_Servers_Field, NULL, LB_GETTEXT, iValue, (LPARAM)&pzServerName);
|
|
|
|
|
jkirkerx wrote: int iResult = SendDlgItemMessage(lb_SQL_Server_Scan_Servers_Field, NULL, LB_GETTEXT, iValue, (LPARAM)&pzServerName);
Have you tried:
iResult = SendDlgItemMessage(lb_SQL_Server_Scan_Servers_Field, NULL, LB_GETTEXT, iValue, (LPARAM) pzServerName);
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Should I be getting back readable text, or is it a pointer to what I put in it?
|
|
|
|
|
int iResult = SendMessage(lb_SQL_Server_Scan_Servers_Field, LB_GETTEXT, iValue, (LPARAM) pzServerName);
I got readable unicaode text from just using sendmessage. The documentation on getting the value was pretty vague, but now that I know, I can use the other LB_'s and so forth to get values from other methods.
Thanks
|
|
|
|
|
The point was not the function being used but rather you were sending the address of an address to it.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|