Evolution of A software Engineer (programmer)
High School/Jr.High
10 PRINT "HELLO WORLD" 20 END OUTPUT: Hello World
First year in College
program Hello (input, output) begin writeln ('Hello World') end. OUTPUT: Hello World
Senior year in College (define hello (print (cons 'Hello (list 'World)))) OUTPUT: Hello World
New professional #include <stdio.h> void main(void) { char *message[] = {"Hello ", "World"}; int i;
for(i = 0; i < 2; ++i)
printf("%s", message[i]); printf("\n"); }
OUTPUT: Hello World
Seasoned professional #include <iostream.h> #include <string.h>
class string { private: int size;
char *ptr;
public: string() : size(0), ptr(new char('\0')) {}
string(const string &s) : size( s.size) { ptr = new char[size + 1];
strcpy(ptr, s.ptr); }
~string() { delete [] ptr; }
friend ostream &operator <<(ostream &, const string &); string &operator=(const char *); };
ostream &operator<<(ostream &stream, const string &s) {
return(stream << s.ptr );
}
string &string::operator=(const char *chrs) { if (this != &chrs) {
delete [] ptr;
size = strlen(chrs); ptr = new char[size + 1]; strcpy(ptr, chrs); } return(*this); }
int main()
{ string str;
str = "Hello World"; cout << str << endl;
return(0); }
OUTPUT: Hello World
Master Programmer
[ uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820) ] library LHello { // bring in the master library importlib("actimp.tlb"); importlib("actexp.tlb");
// bring in my interfaces
#include "pshlo.idl"
[ uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
] cotype THello { interface IHello; interface IPersistFile; }; };
[
exe, uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
] module CHelloLib {
// some code related header files importheader(< windows.h>);
importheader(< ole2.h>); importheader(< except.hxx>); importheader(" pshlo.h"); importheader(" shlo.hxx"); importheader(" mycls.hxx");
// needed typelibs
importlib("actimp.tlb"); importlib(" actexp..tlb"); importlib("thlo.tlb");
[ uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable ] coclass CHello {
cotype THello;
}; };
#include "ipfix.hxx "
extern HANDLE hEvent;
class CHello : public CHelloBase {
public: IPFIX(CLSID_CHello);
CHello(IUnknown *pUnk); ~CHello();
HRESULT __stdcall PrintSz(LPWSTR pwszString);
private: static int cObjRef; };
#include < windows.h > #include < ole2.h > #include < stdio.h> #include < stdlib.h>
#include " thlo.h" #include " pshlo.h" #include " shlo.hxx " #include " mycls.hxx"
int CHello::cObjRef = 0;
CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk) {
cObjRef++;
return; }
HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString) {
printf("%ws\n", pwszString); return(ResultFromScode(S_OK)); }
CHello::~CHello(void) {
// when the object count goes to zero, stop the server cObjRef--; if( cObjRef == 0 ) PulseEvent(hEvent);
return; }
#include <windows.h>
#include < ole2.h> #include "pshlo.h" #include "shlo.hxx" #include "mycls.hxx"
HANDLE hEvent;
int _cdecl main( int argc, char * argv[] ) {
ULONG ulRef; DWORD dwRegistration; CHelloCF *pCF = new CHelloCF();
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
// Initialize the OLE libraries
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);
// wait on an event to stop WaitForSingleObject(hEvent, INFINITE);
// revoke and release the class object CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();
// Tell OLE we are going away.
CoUninitialize();
return(0); }
extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;
CLSID CLSID_CHello = { _/* 2573F891-CFEE-101A-9A9F-00AA00342820 */ 0x2573F891,
0xCFEE, 0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
UUID LIBID_CHelloLib = { _/* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0x2573F890, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
#include <windows.h > #include < ole2.h > #include < stdlib.h> #include < string.h>
#include < stdio.h> #include " pshlo.h" #include "shlo.hxx " #include " clsid.h"
int _cdecl main( int argc, char * argv[] ) {
HRESULT hRslt; IHello *pHello; ULONG ulCnt; IMoniker * pmk; WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];
// get object path
wcsPath[0] = '\0'; wcsT[0] = '\0'; if( argc > 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath); } else { fprintf(stderr, "Object path must be specified\n"); return(1); }
// get print string
if(argc > 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1); else wcscpy(wcsT, L"Hello World");
printf("Linking to object %ws\n", wcsPath);
printf("Text String %ws\n", wcsT);
// Initialize the OLE libraries hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if(SUCCEEDED(hRslt)) {
hRslt = CreateFileMoniker(wcsPath, &pmk); if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
if(SUCCEEDED(hRslt)) {
// print a string out
pHello->PrintSz(wcsT);
Sleep(2000);
ulCnt = pHello->Release();
}
else
printf("Failure to connect, status: %lx", hRslt);
// Tell OLE we are going away. CoUninitialize();
}
return(0);
}
|
No comments:
Post a Comment