|
Rajesh R Subramanian wrote: Do I get the nitpick cookie?
No, but I get the "you forgot about MBCS/Unicode" cookie.
It's time for a new signature.
|
|
|
|
|
Hi,
I have C++ DLL, which export set of API's using (dllexport), API uses STL container classes as input and output parameters.
I can successfully compile using VS 2005 and able to to use in other C++ program compiled under VS 2005.
Now if i try to use C++ DLL which compiled using VS 2005, for other C++ porject compiled using VS 2010 then i see crash in STL container class code. However if i compile above C++ DLL using VS 2010 then i can use this DLL for other program compiled using VS 2010.
One intresting thing i noticed, if i not use any STL datatype in C++ DLL API (as input and output params) then i can use in programs compiled under VS 2010 even though C++ DLL is compiled using VS 2005.
|
|
|
|
|
|
So do you suggest any solution. I need to make use of VS2005 binaries into VS 2010 project.
|
|
|
|
|
The Visual Studio help has the following snippet under vector<>.front:
#include <vector><br />
#include <iostream><br />
<br />
int main( )<br />
{<br />
using namespace std; <br />
vector <int> v1;<br />
<br />
v1.push_back( 10 );<br />
v1.push_back( 11 );<br />
<br />
int& i = v1.front( );<br />
const int& ii = v1.front( );<br />
<br />
cout << "The first integer of v1 is "<< i << endl;<br />
i++;<br />
cout << "The second integer of v1 is "<< ii << endl;<br />
}
It is said to produce:
The first integer of v1 is 10
The second integer of v1 is 11
I'm confused. Just how is this the second integer of v1. Seems to me that the first integer of v1 was simply incremented and happens to have the same value as the second integer. If so, the author of this page should be sacked for writing a deliberately confusing entry.
|
|
|
|
|
since front returns a reference, then i and ii are "pointing" to the same value, that's why ii == 11.
http://msdn.microsoft.com/en-us/library/0z70c7a5.aspx[^]
from the above page, see that the second cout is different from your example...
using namespace std;
vector <int> v1;
v1.push_back( 10 );
v1.push_back( 11 );
int& i = v1.front( );
const int& ii = v1.front( );
cout << "The first integer of v1 is "<< i << endl;
i++;
cout << "Now, the first integer of v1 is "<< i << endl;
Watched code never compiles.
|
|
|
|
|
also check the address of i and ii you will see they are the same.
Watched code never compiles.
|
|
|
|
|
Well it seems my online help is old. Need to update and/or switch to web help.
|
|
|
|
|
|
Peter Camilleri wrote: If so, the author of this page should be sacked for writing a deliberately confusing entry.
I agree. Not a lucky sample.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
If I attempt to download http://www.codeproject.com/App_Themes/Std/Img/logo225x90.gif
It returns bad request with the code used below.
Download->HostFileLocation has /App_Themes/Std/Img/logo225x90.gif in UNICODE format stored in it.
#define DEFAULT_BUFLEN 512
char HTTPrequest[DEFAULT_BUFLEN];
char *HostFileLocation = new char[wcslen(Download->HostFileLocation)+1];
wcstombs(HostFileLocation, Download->HostFileLocation, wcslen(Download->HostFileLocation)+1);
char *Host = "www.codeproject.com";
char *UserAgent = "MyPrivateDownloader b86";
sprintf(HTTPrequest,"GET %s HTTP/1.1\r\nHost: %s\r\nUser Agent: %s\r\nAccept: */*\r\nAccept-Encoding:\r\n\r\n", HostFileLocation, Host, UserAgent);
send(IPv4,HTTPrequest,strlen(HTTPrequest),0);
However if I use. HTTP/1.0
sprintf(HTTPrequest,"GET %s", HostFileLocation);
send(IPv4,HTTPrequest,strlen(HTTPrequest),0);
Everything goes smoothly.
I appreciate any help I can get on this matter.
|
|
|
|
|
The header is called User-Agent[^], this should fix it.
/Moak
PS: The way you use string buffers is a buffer overrun[^] waiting to happen.
|
|
|
|
|
I know what a buffer overrun is!
But if I have to avoid I have to use all those _s functions and calculate the length of every string.
Anyways I do not know how a user can trigger it!
|
|
|
|
|
It was just ment as a tip, I know you didn't explicitly ask for it
String and buffer handling is a repeating issue when working with protocols. Perhaps you can avoid low-level memory handling and use one of the many C++ string classes out there to format/parse text strings. That's what I do in my HTTP client, as a result, you can as a developer focus more on protocol and network functionality.
Have a good weekend!
|
|
|
|
|
How do you manager transmission and receiving buffers, the buffers varies from host to host depending on their web server daemon IIS/Apache.
I believe my problem lies in the header response output that I'm using to trace protocol behavior.
My app is Unicode I retrieve the HTTP request, it's all char so I convert multi-byte to wchar_t.
Then use MessageBox, it might be causing the memory problem.
|
|
|
|
|
Fareed Rizkalla wrote: How do you manager transmission and receiving buffers
Use a receive buffer that can grow if necessary, have a look at std::vector[^].
The transmission buffer probably doesn't change after allocation, receive data chunks and write them to disk.
Hope it helps.
|
|
|
|
|
Hi,
I know how to use CCmdUI in a command_ui_handlers mwthod to change the checked state of CMFCRibbonCheckBox object, but is there any way to do this by the object variable itself, like a SetCheck(true) method.
|
|
|
|
|
I have a simple MFC application that I would like to run multiple times at the same time. My question is how will I be able to find out the application instance (Is there a registry entry somewhere?) as I need for each of these instances to have its own settings. can this be done?
|
|
|
|
|
The easiest would be to store a number is the registry or a file.
Every instance of the application must increment this counter when it starts and decrement the counter when it exits.
|
|
|
|
|
You read my mind. I was just hoping there were more smarts available may be in the registry or something... oh well..
Thanks
|
|
|
|
|
Why do you need , to obtain an unique instance of application ?
|
|
|
|
|
Why not ?
Watched code never compiles.
|
|
|
|
|
I guess I wanted each instance to be unique.
|
|
|
|
|
Software2007 wrote: My question is how will I be able to find out the application instance
You could store the process ID; but that should change each time you start the applications.
Software2007 wrote: as I need for each of these instances to have its own settings. can this be done?
How will you start the application ? or the question is how do you match the settings for each instance of the application ?
Could you start each instance with a command line parameter with the setting information ?
Where are the settings stored ? files ? registry ?
M.
Watched code never compiles.
|
|
|
|
|
I guess the above suggestion would wrk for me by assigning registry names based on each instance number like Registry instance #1, Registry Instance #2...etc), I can read and write based on the instance #.
|
|
|
|