-
-
Save iamDeveloper/7f51e1cb758c9b8fd93e to your computer and use it in GitHub Desktop.
hello_world
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
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 | |
", 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); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment