15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Using CAsyncSocket / CSocket in a console application

'Just Ask' Dan Maher -- dmaher@apdi.net
Wednesday, April 24, 1996

Environment: VC++4.0/OS independent

How can I use CAsyncSocket in a console application?  There are other MFC
classes that one might think would be able to be used in a console
application, yet they can't be.  I've tried many times to try to get this
to work, but to no avail.  The closest I've come to getting it to work was
when I put a bogus CWinApp object in a module and called AfxSocketInit(). 
Then, everything linked and ran, except that an assertion failed in the
Create() member function.  It (the CAsyncSocket) seems to want to be attached to a MFC
thread.  My latest attempt was to create a Dialog based MFC application
through AppWizard and remove the dialog.  I've changed the subsystem to
console, but, of course, it's looking for a main() at link time.  If I
provide one, what should it call?  Or can I change the entrypoint and if
so, where?

What I'm trying to do is reuse a CAsyncSocket - based class that is used
in a windowed application.  I would like to have both the console app and
the windowed app to use the same class.  Is there a better way to do
this?

TIA
dM





Mike Blaszczak -- mikeblas@interserv.com
Sunday, April 28, 1996

On Wed, 24 Apr 1996, "'Just Ask' Dan Maher"  wrote:
>Environment: VC++4.0/OS independent

Thanks.

>How can I use CAsyncSocket in a console application? 

CAsyncSocket is funny because it has its own message pump.  I haven't tried 
using an CAsyncSocket in a console application yet, but I think you could do 
it by:

1) Declaring a CWinApp-derived object in your application
2) in your main(), call the MFC initialization function to make sure the 
CWinApp is initialized and that MFC is ready to go.
3) in your main(), call AfxSocketInit()
4) You might have to create a message pump because CAsyncSocket wants to 
create hidden windows and use them to receive messages.  CAsyncSocket, 
though, has its own message pump.  It looks like you'll have to look through 
the source code a bit to see when the CAsyncSocket-supplied pump is necessary 
and when your pump would be required.

>There are other MFC
>classes that one might think would be able to be used in a console
>application, yet they can't be.  

That could be the vaguest thing I've ever heard any (non-political) person 
say.  Even so, I'd say it is incorrect: you'd probably be surprised at what 
you can use in a console application.

>I've tried many times to try to get this
>to work, but to no avail.  The closest I've come to getting it to work was
>when I put a bogus CWinApp object in a module and called AfxSocketInit(). 
>Then, everything linked and ran, except that an assertion failed in the
>Create() member function.  It (the CAsyncSocket) seems to want to be 
>attached to a MFC
>thread. 

What ASSERT failed, specifically?  There are no ASSERT statements in 
CAsyncSocket::Create(), so you must be getting an ASSERT from some other 
place.  Did you mean to say that some function which CAsyncSocket::Create() 
calls gives you an ASSERT?

How could you expect an accurate answer without including the exact line and 
file number of the ASSERT, by the way? People might guess, and then guess 
wrong, and then give you a bogus answer. Do you think settlers in the 1840's 
ran around saying "Hey, California is just full of that one element!"  Maybe 
physicists ran out there looking for uranium and got angry because there was 
lots of gold all over the damn place. What then?

>My latest attempt was to create a Dialog based MFC application
>through AppWizard and remove the dialog.  I've changed the subsystem to
>console, but, of course, it's looking for a main() at link time.  If I
>provide one, what should it call?  Or can I change the entrypoint and if
>so, where?

That depends.  Do you want a console application that interacts with the user 
through a console, or do you want a Windows application that runs hidden and 
doesn't talk to the user at all? You can also write an application that 
interacts with the user via a console even if you have a message pump and 
/SUBSYSTEM:WINDOWS, you know.  Is that what you want to do?

>TIA

HDYKMAWS?

.B ekiM
--
TCHAR szDisc[] = _T("These words are my own; I do not speak for Microsoft.");





| Вернуться в корень Архива |