|
AFAIK it is like two uni-directional pipes, similar to a serial port communication.
|
|
|
|
|
The situation cannot happen. One "end's" writes are the other "end's" reads.
|
|
|
|
|
CreateNamedPipe api used to create namedpipes provide you with option duples,inbound or outbound
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
dene99970 wrote: Client writes a string, then assume the server reads the string, so it checks the pipes for a response, then ends up reading the string it just wrote to the pipe.
This should never happen, as previously pointed out. There is a probably a bug in your source code or the "server" echos back received text, can you show example code?
/M
|
|
|
|
|
hello guys...im new to MFC using VS 2008. How can I get the radio buttons status in MFC using VS 2008??
|
|
|
|
|
read the documentation and have a look at CButton::GetCheck[^].
M.
Watched code never compiles.
|
|
|
|
|
BOOL bSelected = (CButton*) GetDlgItem(IDC_XYZ))->GetCheck();
--
"Programming is an art that fights back!"
|
|
|
|
|
GetCheck returns an int in case the radio or more probably the checkbox is a 3 state button; so if you only want to see if it's checked, do something like :
BOOL bSelected = (CButton*) GetDlgItem(IDC_XYZ))->GetCheck() == BST_CHECKED;
(but I'm only nitpicking).
Watched code never compiles.
|
|
|
|
|
Maximilien wrote: BOOL bSelected = (CButton*) GetDlgItem(IDC_XYZ))->GetCheck() == BST_CHECKED;
(but I'm only nitpicking).
While we are picking nits... GetDlgItem() actually returns a pointer to a CTempWnd* object if there is no entry in the internal MFC permanent CHandleMap. The only reason why this code does not cause an access violation is because CButton::GetCheck() is an __inlined SendMessage(m_hWnd,BM_GETCHECK...
You should avoid upcasting a pointer returned from GetDlgItem().
Best Wishes,
-David Delaune
|
|
|
|
|
Randor wrote: You should avoid upcasting a pointer returned from GetDlgItem().
To add to the nitpicking that is exactly what the documentation[^] recommends that you do.
It's time for a new signature.
|
|
|
|
|
Richard MacCutchan wrote: that is exactly what the documentation[^] recommends that you do.
An additional nit to pick: The upcast in the documentation is completely pointless... GotoDlgCtrl[^] takes a pointer to a CWnd* object. The CWnd* pointer returned by GetDlgItem would suffice. The MSDN documentation is full of bad sample codes.
Best Wishes,
-David Delaune
|
|
|
|
|
Randor wrote: The upcast in the documentation is completely pointless
I disagree; the upcast makes it clear what the code is trying to do. Since the actual item being returned is a CButton (even though GetDlgItem doesn't know that) it would seem the sensible thing to do, especially if you then want to call some method on the CButton object.
It's time for a new signature.
|
|
|
|
|
Richard MacCutchan wrote: Since the actual item being returned is a CButton
Are you sure saying that GetDlgItem returns a CButton object?
Best Wishes,
-David Delaune
|
|
|
|
|
Randor wrote: Are you sure saying that GetDlgItem returns a CButton object?
No, I'm saying it returns the object whose ID is sent to GetDlgItem() , which will be some class derived from CWnd . That is why the upcast is required.
It's time for a new signature.
|
|
|
|
|
Richard MacCutchan wrote:
No, I'm saying it returns the object whose ID is sent to GetDlgItem(), which will be some class derived from CWnd.
Richard,
This is not always the case. GetDlgItem will return a CTempWnd object[^] if there is no entry inside the internal MFC handle map.
You should always avoid upcasting a pointer from GetDlgItem.
Best Wishes,
-David Delaune
|
|
|
|
|
Sorry but I'm still not clear on this. It doesn't matter whether the object pointer is permanent or temporary, it is still a CButton* . If the object does not exist, or the value to GetDlgItem() is not valid you won't get a pointer to anything.
OK David,
I have just read that article again and understand (almost, but not completely) why your assertion was correct. Sorry, for belabouring this but my experience of MFC was that this upcasting always worked; I just hope nobody is still using one of my old programs.
Thanks for the guidance.
Richard
It's time for a new signature.
modified on Tuesday, July 20, 2010 1:28 PM
|
|
|
|
|
Richard MacCutchan wrote: Thanks for the guidance.
Your welcome.
Best Wishes,
-David Delaune
|
|
|
|
|
How about calling GetCheckedRadioButton like:
int radioCheck = GetCheckedRadioButton(ID_RADIO1,ID_RADIO3);
This will return the ID of the checked radio button or 0 if none are checked
|
|
|
|
|
i am trying to skip line in a csv format file, but cant do so. i am beginner in c++.
|
|
|
|
|
Why are you unable to do so?
|
|
|
|
|
what have you tried so far ?
how is it identified which line to skip - for example line number 10, or, by something in the line (csv data) itself ? what are you doing with the lines you're not skipping etc
The approach will be different depending on your response - the first is easy - you read the file line by line, when a line counter equals the line to skip you dont do anything with the line (eg write it to a file) - if you use stl getline, you dont even need to worry wether the file is in csv format or not if you are skipping by a line number ....
We cant read your mind - unless you explain clearly what you're trying to do, and post any code you're tried, its a bit of a waste of your and our effort
'g'
|
|
|
|
|
Hi All
error C2440: '=' : cannot convert from 'void *' to 'FL_FILE *'
how can i solve this error?
I use Precompiled Headers off.
Code is here
void main()
{
FL_FILE *file;
media_init();
fl_init();
if (fl_attach_media(media_read, media_write) != FAT_INIT_OK)
{
printf("ERROR: Media attach failed\n");
return;
}
fl_listdirectory("/");
file = fl_fopen("/file.bin", "w");
if (file)
{
unsigned char data[] = { 1, 2, 3, 4 };
if (fl_fwrite(data, 1, sizeof(data), file) != sizeof(data))
printf("ERROR: Write file failed\n");
}
else
printf("ERROR: Create file failed\n");
fl_fclose(file);
}
|
|
|
|
|
You haven't really given people many clues to solve this one. Like which line the error occurs on... And no includes. And no mention of what library you're using (where all the fl_* guff comes from).
After that it looks like the only place you can get this error is file = fl_fopen("/file.bin", "w"); From the error message it looks like fl_open returns a void * and you're trying to assign it to an FL_FILE * . However as it looks like you're using C and not C++ that should be an allowed conversion...
Are you:
- compiling your code as C++ when it should be compiled as C?
- including all the headers you should be for the library you're using?
- using any build configuration settings, like #defines, that the library writer specified?
In addition have you tried compiling the code with all warnings switched on (that's /W4 on both VC++ and gcc)? That might give you some hints as to what's going on.
Ash
|
|
|
|
|
My questions is, im trying to make a small benchmark and im not sure if i am correctly doing this.
I am using a high-resolution performance counter, ive placed it in bold
This uses MD5, which you can simply get it at http://www.evenbalance.com/downloads/pbmd5.cpp[^]
im not really sure if im getting the correct bytes per second
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "md5.h"
#define MUL_BYTES 1024
#define MUL_KB (MUL_BYTES*1024)
#define MUL_MB (MUL_KB*1024)
void Benchmark_MD5(void)
{
unsigned __int64 iPerf;
unsigned __int64 iBaseTime;
double dbFreq;
unsigned char bzBuffer[] = {0x0a, 0x55, 0x23};
unsigned __int64 iValue;
MD5_CTX md5;
int iPasses = 5000;
QueryPerformanceFrequency((LARGE_INTEGER *)&iPerf);
dbFreq = 1.0 / (double)iPerf;
QueryPerformanceCounter((LARGE_INTEGER *)&iBaseTime);
for (int i = 0; i < iPasses; i++) {
MD5Init(&md5, 0);
MD5Update(&md5, bzBuffer, 3);
MD5Final(&md5);
}
QueryPerformanceCounter((LARGE_INTEGER *)&iValue);
double seconds = ((double)(iValue - iBaseTime) * dbFreq);
double bps = (double)((double)(16 + iPasses) / seconds);
printf("DEBUG: [Passes = %d] %5.3f Byte/s\n", iPasses, bps);
printf("RESULT:\t");
if (bps < MUL_BYTES)
printf(" %5.2f Bytes/sec\n", bps);
else if (bps < MUL_KB)
printf(" %5.2f KB/sec\n", bps / 1024);
else if (bps < MUL_MB)
printf(" %5.2f MB/sec\n", bps / 1024 / 1024);
else
printf(" %5.2f GB/sec\n", bps / 1024 / 1024 / 1024);
}
void main(void)
{
Benchmark_MD5();
}
|
|
|
|
|