|
Nibu thomas
MVP For VC++
Code must be written to be read, not by the compiler, but by another human being.
Programming Blog: http:\\nibuthomas.wordpress.com
|
|
|
|
|
hi,
Thanks for ur reply.
Can we get the handle of messagebox default icon based on its its styles.
|
|
|
|
|
Hello again.
Hope somebody can help me. When i create setup file in VC++ 2003 MFC I included configuration (*.ini) file which is needed in running the software. But if the user install it to a different location, I can't track or locate it so the *.ini file appears not to be found.
How can I track it in my code so wherever it resides I can still find it?
Or other trick perhaps.
That's all. Thank you.
|
|
|
|
|
|
Thanks nave.
I think that makes sense.
It's a big help.
Till next time.
God Bless.
|
|
|
|
|
See if GetModuleFileName(NULL, ...) helps, which is different than GetCurrentDirectory() .
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi all,
I am using ipl98 library version 2.20 and I was compile it successful. However, I can only use the static library is created by VC++.net (It can run ok with the example in ipl98 library project.) The dynamic library cannot use it to run the example.
About Borland C++, I also compile successfully but the dynamic library cannot do with the example. After that I compile it to create the static library, this is not successful, the error: library too large, please restart with library page size 32.
My purpose is using ipl98 library version 2.20 in the Borland C++. However, I spent a lot of time but until now I also cannot use it in the Borland C++. If you have any advices, any ideas, or any instructions please show me!
Can we use the static library created by VC++.net to transition dynamic library? Or Can we use the static library in Borland C++? Or you have another ways to solve it.
I hope I will get your feedback as soon as possible.
Best regards!
nothing
|
|
|
|
|
Hello:
Looking for local (around Western Philadelphia, PA suburbs -- preferably Exton/Malvern area) person with experience coding C++ Windows Mobile apps.
SQL Server 2000/2005 experience helps.
Please send me a note if you are local and interested.
Please (please) no recruiters and check the map to see if you are local first. India is not local
Thanks
~Bill
Admin -- please move this if it belongs in a different forum area.
-- modified at 8:04 Monday 15th October, 2007
|
|
|
|
|
Hi all. I was trying to make something that will try to reconnect on a severed connection from the server. Now i know WSAGetLastError only works if a message is trying to be sent from client to server, and a error code is returned in case the message doesnt go through. So i did the following:
Started a server.
Connected client
Turned server off.
And i got error code 183 in return.
So i figured, if i can match it then i should be able to reconnect.
<br />
if(WSAGetLastError()==183){<br />
...
}<br />
But to no avail it didnt work. So what should i do in a situation like this? Any suggestions? Thanx in advance!
|
|
|
|
|
Where are you checking for this value at?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I setup a function thread to loop over and over to send request from the server as long as Connected=true; once thats set to true the function starts to send request. I made a simple ofstream function to test whether or not it works if the connection was severed.
<br />
ofstream out;<br />
out.open("error.txt",ios::app);<br />
out << WSAGetLastError << endl;<br />
out.close();<br />
Soon as i turned the server off it made the file with error code 183 in it. (Several times too because of the loop)
I need to know how to use this in a if statement.
|
|
|
|
|
dellthinker wrote: I setup a function thread to loop over and over to send request...
If no error occurs, send() returns the total number of bytes sent, which can be less than the number indicated by len for nonblocking sockets. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError() .
dellthinker wrote: out << WSAGetLastError << endl;
You do realize that this will print the address of WSAGetLastError() rather than actually call the function, don't you?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Ok, and error code 183 was returned.
<br />
if(WSAGetLastError==183){<br />
}<br />
That doesnt work. If 183 is some code indicating that the data sent was lots and or not sent then there should be a way to use this in a if statement. Correct?
|
|
|
|
|
dellthinker wrote: if(WSAGetLastError==183){
You do realize this compares the address of WSAGetLastError() to 183 rather than actually call the function, don't you?
dellthinker wrote: That doesnt work. If 183 is some code indicating that the data sent was lots and or not sent then there should be a way to use this in a if statement. Correct?
Your question is really confusing. Do you have something akin to:
while (more_data_exists)
{
int nRet = send(...);
if (SOCKET_ERROR == nRet)
DWORD dwError = WSAGetLastError();
}
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
DavidCrow wrote: our question is really confusing. Do you have something akin to:
while (more_data_exists)
{
int nRet = send(...);
if (SOCKET_ERROR == nRet)
DWORD dwError = WSAGetLastError();
}
Ok let me be more specific. Im going to go step-by-step of what im trying to do here.
If a program that is 'connected' to a server all of a sudden gets disconnected for whatever reason it has to do on the server side, im trying to get it 'reconnect'. In order for me to do that im looking for whatever error WSAGetLastError might spit out. Compare that error with an if statement and do whatever is necessary to reconnect to the server. Understand me now?
|
|
|
|
|
Here's my usual test for socket closure. Once you detect the socket closure, set some flag and exit from your routine. In your main program, check for that flag and call your connect code. I wouldn't put it inside the if/else code block - connection code is too problematic and time-consuming.
iResult = send (m_hSocket, pBuffer, iLength, 0);
if (iResult == SOCKET_ERROR)
{
iResult = WSAGetLastError ()
if ((iResult == WSAENETDOWN) ||
(iResult == WSAENETRESET) ||
(iResult == WSAECONNABORTED) ||
(iResult == WSAETIMEDOUT) ||
(iResult == WSAECONNRESET))
{
}
else
{
}
Judy
|
|
|
|
|
dellthinker wrote: In order for me to do that im looking for whatever error WSAGetLastError might spit out. Compare that error with an if statement and do whatever is necessary to reconnect to the server. Understand me now?
Yes, it makes sense, but still does not explain why you are having trouble comparing the return value from WSAGetLastError() with some constant, like:
DWORD dwError = WSAGetLastError();
if (183 == dwError)
... Furthermore, error 183 equates to ERROR_ALREADY_EXISTS , which I doubt your socket functions are returning when a disconnect has happened.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
In an MFC app on VS C++ 2005, I need to process and close files on a USB drive before it is pulled out. My plan is to do this processing when DBT_DEVICEQUERYREMOVE message is broadcast, and to return a TRUE after I have finished processing files on the USB drive.
I have handled WM_DEVICECHANGE and am getting DBT_DEVICEREMOVECOMPLETE messages. But I am not getting DBT_DEVICEQUERYREMOVE messages despite registering. What do I need to do to get those messages? Am I passing the wrong handle or GUID? I'm at my wit's end here, I've been stuck for a day now!
I handled WM_DEVICECHANGE in my message map in MainFrm.cpp like this:
ON_MESSAGE(WM_DEVICECHANGE, &CMainFrame::OnMyDeviceChange)
This function, stripped down, is:
LRESULT CMainFrame::OnMyDeviceChange(WPARAM wParam, LPARAM lParam)
{
LRESULT lpReturn = TRUE;
if (wParam == DBT_DEVICEQUERYREMOVE)
{
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
switch( pHdr->dbch_devicetype )
{
case DBT_DEVTYP_DEVICEINTERFACE:
{
}
case DBT_DEVTYP_HANDLE:
{
}
case DBT_DEVTYP_OEM:
{
}
case DBT_DEVTYP_PORT:
{
}
case DBT_DEVTYP_VOLUME:
{
PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
MessageBox("The user wants to remove this USB drive.");
lpReturn = TRUE;
break;
}
}
}
return lpReturn;
}
Here is how I am calling my registration function in OnCreate() in my MainFrm.cpp:
HDEVNOTIFY hDevNotify = NULL;
GUID InterfaceClassGuid={0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED};
cHF.DoRegisterDeviceInterface(this->GetSafeHwnd(), InterfaceClassGuid, hDevNotify);
Here is where I am trying to register to get the DBT_DEVICEQUERYREMOVE messages for USB Drives, in my HelperFunctions.cpp:
BOOL CHelperFucntions::DoRegisterDeviceInterface(HWND hWnd, GUID InterfaceClassGuid, HDEVNOTIFY hDevNotify)
{
char szMsg[80];
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = InterfaceClassGuid;
hDevNotify = RegisterDeviceNotification(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE);
if(!hDevNotify)
{
wsprintf(szMsg, "Could not register to receive notifications about drive events: %d\n",
GetLastError());
MessageBox(hWnd, szMsg, "RegisterDeviceNotification failed", MB_OK);
return FALSE;
}
return TRUE;
}
So what am I missing here? Any ideas as to why am I not getting the DBT_DEVICEQUERYREMOVE notification I am getting the DBT_DEVICEARRIVAL (0x8000) and DBT_DEVICEREMOVECOMPLETE (0x8004), so it must be something wrong with my registering for the DBT_DEVICEQUERYREMOVE notification?
Any help would be much appreciated. Thanks!
--
Omne Ignotum Pro Magnifico
-- modified at 18:32 Wednesday 10th October, 2007
|
|
|
|
|
can anyone code the VRP problem using genetic alogrithms in c++.
i need that to be done as a report along with code to submit for my exam.
kindly help me in this work
|
|
|
|
|
At least this post is on the correct board.
For more info, see here[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
What are you wanting such that memset() does not work?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
|
DQNOK wrote: I'm looking to fill memory with a pattern...
I guess it all depends on what the pattern is. Anything beyond a single byte becomes application-specific, so I would think a nonexistent function would be normal.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
OK. Thanks for your thoughts and replies.
My algorithm is not application specific (that I can see). I'll go ahead and post it here in case anyone else can benefit from it. It looks long, but it's mostly comments. The test case at the end works fine for me when I compile and run it with Digital Mars C++.
#include <string.h>
void memoryfill( void* target, char* pattern, size_t ptrnlen, size_t numRepeats )
{
char* trgt = (char*)target;
if( 0 == numRepeats )
{
;
}
else if( 1 == ptrnlen )
{
memset(target, *pattern, numRepeats);
}
else
{
memcpy(trgt, pattern, ptrnlen);
int snglbit=1;
int thisCnt = numRepeats >> 1;
while( thisCnt > 0 )
{
memcpy(trgt+ptrnlen*snglbit, trgt, ptrnlen*snglbit);
snglbit <<= 1;
thisCnt >>= 1;
}
char* endptr = trgt + ptrnlen*snglbit;
while( (snglbit >>= 1) > 0 )
{
if( snglbit & numRepeats )
{
memcpy(endptr, trgt, ptrnlen*snglbit);
endptr += ptrnlen*snglbit;
}
}
}
return;
}
<br>
#include <stdio.h>
<br>
int main()
{
char buf[1024];
memset(buf, 0, 1024);
memoryfill( buf, "Hello World_", 12, 19 );
printf("\n%s", buf);
}
|
|
|
|