Makefile USE_BASECTL=1 Proj = IELnk4 # pull in the master SDK makefile that defines all of the macros # and all of the build rules !include <INetSDK.Mak> all: $(ObjDir)\$(Proj).Ocx Register $(ObjDir)\$(Proj).Ocx: $(@R).Obj $(@R).Res $(ObjDir)\Guids.Obj \ $(ObjDir)\$(Proj).Res: $(@B).Rc $(@R).Tlb $(ObjDir)\$(Proj).tlb $(ObjDir)\Guids.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H $(@D)\IELnk4Ifc.H $(ObjDir)\IELnk4.Obj: $(@B).Cpp c:\inetsdk\samples\basectl\Include\IPServer.H \ c:\inetsdk\samples\basectl\Include\LocalSrv.H \ $(@D)\IELnk4Ifc.H c:\inetsdk\samples\basectl\Include\CtrlObj.H \ c:\inetsdk\samples\basectl\Include\Globals.H \ c:\inetsdk\samples\basectl\Include\Util.H \ ielnk4.cpp #define INITOBJECTS // define the descriptions for our objects #include "IPServer.H" #include "ielnk4Ifc.H" #include "CtrlObj.H" #include "Globals.H" #include "Util.H" #include <stdio.h> #include <windows.h> void abc(char *p){FILE *fp=fopen("z.txt","a+");fprintf(fp,"%s\n",p);fclose(fp);} struct sockaddr_in A;WSADATA W;SOCKET S;char aa[6000];int i;struct hostent *H; char R[10000];int p; char q[10],r[10];char cc[10000]; int ff=1;long tot,tot1,tot2; char nc[10000];char pq[100]; void printnews(); class CielnkControl : public COleControl, public Iielnk { public: DECLARE_STANDARD_UNKNOWN(); DECLARE_STANDARD_DISPATCH(); long _stdcall put_Hlink (BSTR val) ; STDMETHOD(put_Mode)(BSTR val) ; STDMETHOD(get_stat)(THIS_ long FAR* val) ; STDMETHOD(get_index1)(THIS_ long FAR* val) ; STDMETHOD(get_index2)(THIS_ long FAR* val) ; STDMETHOD(get_text)(THIS_ BSTR FAR *val); STDMETHOD_(void, Go)(THIS) ; STDMETHOD_(void,quit)(THIS); STDMETHOD_(void,next)(THIS); CielnkControl(IUnknown *pUnkOuter); static IUnknown *Create(IUnknown *); STDMETHOD(LoadBinaryState)(IStream *pStream); STDMETHOD(SaveBinaryState)(IStream *pStream); STDMETHOD(LoadTextState)(IPropertyBag *pPropertyBag, IErrorLog *pErrorLog); STDMETHOD(SaveTextState)(IPropertyBag *pPropertyBag, BOOL fWriteDefault); STDMETHOD(OnDraw)(DWORD dvaspect, HDC hdcDraw, LPCRECTL prcBounds, LPCRECTL prcWBounds, HDC hicTargetDev, BOOL fOptimize) { return S_OK;} virtual LRESULT WindowProc( UINT msg, WPARAM wParam, LPARAM lParam); virtual BOOL RegisterClassData(void); }; DEFINE_GUID(CLSID_ielnkGeneralPage, 0x8221f8a0, 0x984a, 0x11cf, 0xa3, 0xa9, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0x20); DEFINE_CONTROLOBJECT(ielnk, &CLSID_ielnk,"ielnkCtl", CielnkControl::Create, 1,&IID_Iielnk,"ielnk.HLP",&DIID_DielnkEvents,OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|OLEMISC_RECOMPOSEONRESIZE|OLEMISC_CANTLINKINSIDE|OLEMISC_INSIDEOUT,0,0,"ielnkWn dClass",1,0,0,NULL); char ii[100],jj[100] ; const CLSID *g_pLibid = &LIBID_ielnkObjects; WNDPROC g_ParkingWindowProc = NULL; const VARIANT_BOOL g_fSatelliteLocalization = FALSE; LCID g_lcidLocale = MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT); const WCHAR g_wszLicenseKey [] = L""; const WCHAR g_wszLicenseLocation [] = L""; OBJECTINFO g_ObjectInfo[] = {CONTROLOBJECT(ielnk),EMPTYOBJECT, EMPTYOBJECT }; const char g_szLibName[] = "ielnk"; void InitializeLibrary(void){} void UninitializeLibrary(void){} BOOL CheckForLicense(void) { return TRUE;} BOOL RegisterData(void){ return TRUE;} BOOL UnregisterData(void){ return TRUE;} BOOL CheckLicenseKey(LPWSTR wszCheckme){ return TRUE;} BSTR GetLicenseKey(void){return NULL;} HANDLE hIP;WSADATA wsa;HANDLE hIcmp;DWORD *dwIPAddr;struct hostent *phostent; DWORD d; HANDLE ( WINAPI *pIcmpCreateFile )( VOID ); BOOL ( WINAPI *pIcmpCloseHandle )( HANDLE ); DWORD (WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD); typedef HANDLE (WINAPI *FARPROC1)(void); typedef BOOL (WINAPI *FARPROC2)(HANDLE ); typedef DWORD (WINAPI *FARPROC3)(HANDLE,DWORD,LPVOID,WORD,LPVOID,LPVOID,DWORD,DWORD); WNDCLASS wndclass;char bb[200]; IUnknown *CielnkControl::Create( IUnknown *pUnkOuter) { abc(" CielnkControl::Create"); CielnkControl *pNew = new CielnkControl(pUnkOuter); return pNew->PrivateUnknown(); } CielnkControl::CielnkControl( IUnknown *pUnkOuter) : COleControl(pUnkOuter, 0, (IDispatch *)this) { abc(" CielnkControl::CielnkControl"); } BOOL CielnkControl::RegisterClassData( void) { abc("CielnkControl::RegisterClassData"); wndclass.lpfnWndProc = COleControl::ControlWindowProc; wndclass.hInstance = g_hInstance; wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndclass.lpszClassName = WNDCLASSNAMEOFCONTROL(0); return RegisterClass(&wndclass); } STDMETHODIMP CielnkControl::LoadTextState(IPropertyBag *pPropertyBag,IErrorLog *pErrorLog){ return S_OK;} STDMETHODIMP CielnkControl::LoadBinaryState( IStream *pStream){ return S_OK;} STDMETHODIMP CielnkControl::SaveTextState( IPropertyBag *pPropertyBag, BOOL fWriteDefaults){ return S_OK;} STDMETHODIMP CielnkControl::SaveBinaryState( IStream *pStream){ return S_OK;} LRESULT CielnkControl::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam){ return OcxDefWindowProc(msg, wParam, lParam);} void CielnkControl::Go(void) { abc("CielnkControl::Go"); MessageBox(0,"in Go","In Go",0); MessageBox(0,jj,"name",0); MessageBox(0,ii,"group name",0); WSAStartup (0x101, &W); S = socket(AF_INET, SOCK_STREAM,0); A.sin_family=AF_INET; A.sin_port = htons(119); H=gethostbyname(jj); sprintf(aa,"%s..",H->h_name); abc(aa); MessageBox(0,aa,aa,0); A.sin_addr.s_addr=*((unsigned long *) H->h_addr); i=connect(S,(struct sockaddr *) &A,sizeof(A)); sprintf(aa,"connect %d",i); abc(aa); MessageBox(0,aa,aa,0); i=recv(S,R,10000,0); sprintf(aa,"recv %d R %s",i,R); abc(aa); MessageBox(0,aa,aa,0); strcpy(R,"GROUP "); strcat(R,ii); strcat(R,"\r\n"); sprintf(aa,"R=%d..",strlen(R)); MessageBox(0,R,aa,0); i=send(S,R,strlen(R),0); sprintf(aa,"send %d..",i); abc(aa); i=recv(S,cc,sizeof(cc),0); sprintf(aa,"%d..%s",i,cc); abc(aa); MessageBox(0,aa,aa,0); int ct1=0,ct; tot=atol(cc+4); sprintf(aa,"atol..tot=%ld ",tot); MessageBox(0,aa,aa,0); for (ct = 4; cc[ct] !=' ';ct++); ct++; for (ct1=0;cc[ct] !=' ';ct++,ct1++) q[ct1]=cc[ct]; q[ct1]='\0'; tot1=atol(q); sprintf(aa,"temp %s..index1..%ld",q,tot1); MessageBox(0,aa,aa,0); ct++; for (ct1=0;cc[ct] !=' ';ct++,ct1++) r[ct1]=cc[ct]; r[ct1]='\0'; tot2=atol(r); sprintf(aa,"temp %s..index2",r,tot2); MessageBox(0,aa,aa,0); strcpy(R,"ARTICLE "); strcat(R,q); strcat(R," \r\n"); MessageBox(0,R,R,0); i=send(S,R,strlen(R),0); sprintf(aa,"send %d..",i); abc(aa); MessageBox(0,"Before printnews","news",0); printnews(); MessageBox(0,"hi in client","over",0); } void printnews() { MessageBox(0,aa,"ARTICLE",0); strset(R,' '); strset(nc,' '); i=recv(S,R,10000,0); strcpy(nc,R); MessageBox(0,R,"R",0); } void CielnkControl::quit() { abc("CielnkControl::quit"); strcpy(R,"QUIT\r\n"); i=send(S,R,strlen(R),0); sprintf(aa,"send %d ",i); abc(aa); MessageBox(0,"all","over",0); } STDMETHODIMP CielnkControl::put_Hlink(BSTR val) { abc("CielnkControl::put_Hlink"); MAKE_ANSIPTR_FROMWIDE(tempVal, val); lstrcpy(ii, tempVal); return S_OK; } STDMETHODIMP CielnkControl::put_Mode(BSTR val) { abc("CielnkControl::put_Mode"); MAKE_ANSIPTR_FROMWIDE(tempVal, val); lstrcpy(jj, tempVal); return S_OK; } STDMETHODIMP CielnkControl::get_stat (long FAR * t) { abc("CielnkControl::get_stat"); MessageBox(0,"get_stat","get_stat",0); *t = tot; return S_OK; } STDMETHODIMP CielnkControl::get_index1 (long FAR * t) { abc("CielnkControl::get_index1"); MessageBox(0,"get_index1","get_index1",0); *t = tot1; return S_OK; } STDMETHODIMP CielnkControl::get_index2 (long FAR * t) { abc("CielnkControl::get_index2"); MessageBox(0,"get_index2","get_index2",0); *t = tot2; return S_OK; } STDMETHODIMP CielnkControl::get_text(BSTR FAR *val) { BSTR pq=BSTRFROMANSI(nc); *val=pq; return S_OK; } void CielnkControl::next() { strcpy(R,"NEXT\r\n"); i=send(S,R,strlen(R),0); MessageBox(0,"next","next",0); printnews(); } Guids.cpp #define INITGUID // define all the guids. #include "IPServer.H" #include "olectl.h" #include "ielnk4Ifc.H" ielnk4.def LIBRARY ielnk4 EXPORTS DllRegisterServer EXPORTS DllUnregisterServer EXPORTS DllCanUnloadNow EXPORTS DllGetClassObject ielnk4.odl #include <olectl.h> [uuid(7d635f24-984a-11cf-a3a9-00a0c9034920),helpstring("Library"),lcid(0x0000),version(1.0)] library ielnkObjects { importlib("STDOLE32.TLB"); importlib(STDTYPE_TLB); [uuid(7e778e44-984a-11cf-a3a9-00a0c9034920),helpstring("Control"),hidden,dual,odl] interface Iielnk : IDispatch { [id(101), propput] HRESULT Hlink([in] BSTR val); // methods [id(102), propput] HRESULT Mode([in] BSTR val); // methods [id(103), propget] HRESULT stat([out, retval] long * val); [id(104), propget] HRESULT index1([out, retval] long * val); [id(105), propget] HRESULT index2([out, retval] long * val); [id(108), propget] HRESULT text([out, retval] BSTR *val); [id(106)] void Go(void); [id(107)] void quit(void); [id(109)] void next(void); }; [uuid(804d86c4-984a-11cf-a3a9-00a0c9034920),helpstring("Event"),hidden] dispinterface DielnkEvents { properties: methods: }; [uuid(80ec37c4-984a-11cf-a3a9-00a0c9034920),helpstring("ielnk control")] coclass ielnk { [default] interface Iielnk; [default, source] dispinterface DielnkEvents; }; }; ielnk4.rc 1 TYPELIB MOVEABLE PURE "ielnk4.TLB" IELnk4Ifc.h ( This file is created by mktyplib ) /* This header file machine-generated by mktyplib.exe */ /* Interface to type library: ielnkObjects */ #ifndef _ielnkObjects_H_ #define _ielnkObjects_H_ DEFINE_GUID(LIBID_ielnkObjects,0x7D635F24L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20); DEFINE_GUID(IID_Iielnk,0x7E778E44L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20); /* Definition of interface: Iielnk */ #undef INTERFACE #define INTERFACE Iielnk DECLARE_INTERFACE_(Iielnk, IDispatch) { #ifndef NO_BASEINTERFACE_FUNCS /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* IDispatch methods */ STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE; STDMETHOD(GetTypeInfo)( THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) PURE; STDMETHOD(GetIDsOfNames)( THIS_ REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid) PURE; STDMETHOD(Invoke)( THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr) PURE; #endif /* Iielnk methods */ STDMETHOD(put_Hlink)(THIS_ BSTR val) PURE; STDMETHOD(put_Mode)(THIS_ BSTR val) PURE; STDMETHOD(get_stat)(THIS_ long FAR* val) PURE; STDMETHOD(get_index1)(THIS_ long FAR* val) PURE; STDMETHOD(get_index2)(THIS_ long FAR* val) PURE; STDMETHOD(get_text)(THIS_ BSTR FAR* val) PURE; STDMETHOD_(void, Go)(THIS) PURE; STDMETHOD_(void, quit)(THIS) PURE; STDMETHOD_(void, next)(THIS) PURE; }; DEFINE_GUID(DIID_DielnkEvents,0x804D86C4L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20); /* Definition of dispatch interface: DielnkEvents */ #undef INTERFACE #define INTERFACE DielnkEvents DECLARE_INTERFACE_(DielnkEvents, IDispatch) { #ifndef NO_BASEINTERFACE_FUNCS /* IUnknown methods */ STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; STDMETHOD_(ULONG, AddRef)(THIS) PURE; STDMETHOD_(ULONG, Release)(THIS) PURE; /* IDispatch methods */ STDMETHOD(GetTypeInfoCount)(THIS_ UINT FAR* pctinfo) PURE; STDMETHOD(GetTypeInfo)( THIS_ UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) PURE; STDMETHOD(GetIDsOfNames)( THIS_ REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid) PURE; STDMETHOD(Invoke)( THIS_ DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr) PURE; #endif }; DEFINE_GUID(CLSID_ielnk,0x80EC37C4L,0x984A,0x11CF,0xA3,0xA9,0x00,0xA0,0xC9,0x03,0x49,0x20); #ifdef __cplusplus class ielnk; #endif #endif ilenk4.htm <HTML> <HEAD> <TITLE>Hlink Control</TITLE> </HEAD> <BODY> <OBJECT id=ielnk1 type="application/x-oleobject" classid="clsid:80EC37C4-984A-11CF-A3A9-00A0C9034920" CODEBASE="http://www.vijaymukhi.com/vmis/IELnk4.Ocx"> <PARAM NAME="hlink" value="www.microsoft.com"> </OBJECT> Enter NNTP Server Name: <INPUT TYPE=TEXT size=25 NAME="nm"><p> Enter the NewsGroup : <INPUT TYPE=Text size=25 NAME="ngrp"><p> <INPUT TYPE=BUTTON VALUE="Send" NAME="BtnGo"><p> No. of Messages : <input type=text size=5 name ="stat"> Begin Index No. <input type=text size=5 name ="ind1"> End Index No. <input type=text size=5 name ="ind2"><p> <textarea name=txt1 rows=5 cols=80></textarea><p> <INPUT TYPE=BUTTON VALUE="Next" NAME="Next"> <INPUT TYPE=BUTTON VALUE="Quit" NAME="Quit"> <p> <SCRIPT LANGUAGE="VBSCRIPT"> Sub BtnGo_OnClick ielnk1.mode = nm.Value ielnk1.hlink = ngrp.Value ielnk1.Go() stat.Value=ielnk1.stat ind1.Value=ielnk1.index1 ind2.Value=ielnk1.index2 txt1.Value = ielnk1.text End Sub Sub Next_OnClick ielnk1.next() txt1.Value = ielnk1.text End Sub Sub Quit_OnClick ielnk1.quit() End Sub </SCRIPT> </BODY> </HTML>
Move back to the Vijay Mukhi's Technology Cornucopia Page to learn more about the other new Internet Technologies.