"Here is the actual type library of the COM server I am building an event handler for:"
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: dataentry.exe
[
uuid(781FD662-A607-11D2-906E-00A0C926DC9D),
version(1.2),
helpstring("IDWorks DataEntry SDK 2.2 Type Library"

]
library DataEntrySDK
{
// TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("StdOle2.Tlb"

;
// Forward declare all types defined in this typelib
dispinterface IDataEntry;
dispinterface IDataEntry2;
interface IIDWorksEventHandler;
typedef enum {
EV_START = 0,
EV_CLEAR = 1,
EV_DELETE_POST = 2,
EV_DELETE_PRE = 3,
EV_ENTER_FIELD = 4,
EV_EXIT_FIELD = 5,
EV_FIRST_PRE = 6,
EV_FIRST_POST = 7,
EV_INSERT_POST = 8,
EV_INSERT_PRE = 9,
EV_KEY_PRESS = 10,
EV_LAST_PRE = 11,
EV_LAST_POST = 12,
EV_LBUTTON_DBLCLK = 13,
EV_NEW_POST = 14,
EV_NEW_PRE = 15,
EV_NEXT_PRE = 16,
EV_NEXT_POST = 17,
EV_PREV_PRE = 18,
EV_PREV_POST = 19,
EV_PRINT_POST = 20,
EV_PRINT_PRE = 21,
EV_RBUTTON_DOWN = 22,
EV_REFRESH_POST = 23,
EV_REFRESH_PRE = 24,
EV_UPDATE_POST = 25,
EV_UPDATE_PRE = 26,
EV_SEARCH_PRE = 27,
EV_SEARCH_POST = 28,
EV_PROJECT_LOAD = 29,
EV_PROJECT_UNLOAD = 30,
EV_PRINTALL_PRE = 31,
EV_PRINTALL_POST = 32,
EV_CANCELNEW_PRE = 33,
EV_CANCELNEW_POST = 34,
EV_ADVANCEDSEARCH_PRE = 35,
EV_ADVANCEDSEARCH_POST = 36,
EV_RUNSTOREDSEARCH_PRE = 37,
EV_RUNSTOREDSEARCH_POST = 38,
EV_PROJECT_READY = 39,
EV_PRINTALL_CANCEL = 40,
EV_EVENT_BUTTON = 41,
EV_VERIFY_POST = 42,
EV_VERIFY_PRE = 43,
EV_CAPTURE_POST = 44,
EV_CAPTURE_PRE = 45,
EV_END = 46
} EVENT_ID;
typedef enum {
ED_CONTINUE = 0,
ED_NOCONTINUE = 1,
ED_CHANGE_DATA = 2,
ED_NOPROCESS = 4,
ED_SETMODIFIED = 8,
ED_CLRMODIFIED = 16
} EVENT_DISPOSITION;
typedef enum {
FDT_NULL = 0,
FDT_LONG = 1,
FDT_DOUBLE = 2,
FDT_TEXT = 3,
FDT_DATE = 4,
FDT_IMAGE = 5,
FDT_SIGNATURE = 6,
FDT_PRINTCOUNT = 7,
FDT_AUTOSEQ = 8,
FDT_BINARY = 9,
FDT_MAX = 10
} SCREEN_FIELD_DATA_TYPE;
typedef enum {
FT_NULL = 0,
FT_TEXT = 1,
FT_DATE = 2,
FT_IMAGE = 3,
FT_STATIC_TEXT = 4,
FT_STATIC_GRAPHIC = 5,
FT_COMPOSITE = 6,
FT_LIST = 7,
FT_SIGNATURE = 8,
FT_PRINTCOUNT = 9,
FT_AUTOSEQ = 10,
FT_BINARY = 11,
FT_BUTTON = 12,
FT_MAX = 13
} SCREEN_FIELD_TYPE;
typedef enum {
FRC_OK = 1,
FRC_OK_DATA_BY_FILE = 2,
FRC_NO_PROJECT_OPEN = 3,
FRC_FIELD_NOT_FOUND = 4,
FRC_UNSUPPORTED = 5,
FRC_NO_DATA = 6,
FRC_ERROR = 7,
FRC_INVALID_DATA = 8,
FRC_DATA_TRUNCATED = 9,
FRC_SOURCE_NOT_FOUND = 10,
FRC_CONFIG_NOT_FOUND = 11,
FRC_USER_CANCEL = 12
} FUNCTION_RTN_CODE;
typedef enum {
acSTART = 0,
acLEFT = 0,
acTOP = 1,
acRIGHT = 2,
acBOTTOM = 3,
acFIELDTYPE = 4,
acDATAMODIFIED = 5,
acMANDATORY = 6,
acVISIBLE = 7,
acREADONLY = 8,
acEMPTY = 9,
acBUFFERLENGTH = 10,
acEND = 11
} ATTRIBUTE_CODE;
[
uuid(E7EBB060-BA87-11D2-906E-00A0C926DC9D),
helpstring("IDWorks DataEntry SDK IDataEntry Interface"

]
dispinterface IDataEntry {
properties:
methods:
[id(0x00000001)]
long PrintCard(short bShowDialog);
[id(0x00000002)]
long DeleteRecord();
[id(0x00000003)]
void FirstRecord();
[id(0x00000004)]
void LastRecord();
[id(0x00000005)]
void NextRecord();
[id(0x00000006)]
void PreviousRecord();
[id(0x00000007)]
void Search();
[id(0x00000008)]
short UpdateRecord();
[id(0x00000009)]
void NewRecord();
[id(0x0000000a)]
void ShowForm(short bShow);
[id(0x0000000b)]
long SetFieldData(
BSTR FieldName,
VARIANT* pFieldData,
short bSetModified);
[id(0x0000000c)]
void ClearForm(short bAll);
[id(0x0000000d)]
long GetFieldData(
BSTR FieldName,
VARIANT* pFieldData,
short bWithMask);
[id(0x0000000e)]
BSTR GetProjectName();
[id(0x0000000f)]
long GetFieldAttribute(
BSTR FieldName,
short AttributeType,
VARIANT* pAttribute);
[id(0x00000010)]
void EnableForm(short bEnable);
[id(0x00000011)]
long SetFieldAttribute(
BSTR FieldName,
short AttributeType,
VARIANT* pAttributeValue);
[id(0x00000012)]
long GetFieldNames(VARIANT* vFieldNames);
[id(0x00000013)]
void ShowCardPreviewFront(short bVisible);
[id(0x00000014)]
void ShowCardPreviewBack(short bVisible);
};
[
uuid(1CA57410-8D68-11D3-80ED-0050040B83CD),
helpstring("IDWorks DataEntry SDK IDataEntry2 Interface"

]
dispinterface IDataEntry2 {
properties:
methods:
[id(0x00000001)]
long PrintCard(short bShowDialog);
[id(0x00000002)]
long DeleteRecord();
[id(0x00000003)]
void FirstRecord();
[id(0x00000004)]
void LastRecord();
[id(0x00000005)]
void NextRecord();
[id(0x00000006)]
void PreviousRecord();
[id(0x00000007)]
void Search();
[id(0x00000008)]
short UpdateRecord();
[id(0x00000009)]
void NewRecord();
[id(0x0000000a)]
void ShowForm(short bShow);
[id(0x0000000b)]
long SetFieldData(
BSTR FieldName,
VARIANT* pFieldData,
short bSetModified);
[id(0x0000000c)]
void ClearForm(short bAll);
[id(0x0000000d)]
long GetFieldData(
BSTR FieldName,
VARIANT* pFieldData,
short bWithMask);
[id(0x0000000e)]
BSTR GetProjectName();
[id(0x0000000f)]
long GetFieldAttribute(
BSTR FieldName,
short AttributeType,
VARIANT* pAttribute);
[id(0x00000010)]
void EnableForm(short bEnable);
[id(0x00000011)]
long SetFieldAttribute(
BSTR FieldName,
short AttributeType,
VARIANT* pAttributeValue);
[id(0x00000012)]
long GetFieldNames(VARIANT* vFieldNames);
[id(0x00000013)]
void ShowCardPreviewFront(short bVisible);
[id(0x00000014)]
void ShowCardPreviewBack(short bVisible);
[id(0x00000015)]
long LoadProject(BSTR ProjectName);
[id(0x00000016)]
long ExecuteStoredSearch(BSTR StoredSearchName);
[id(0x00000017)]
long PrintCard2(
short nCopies,
short bPrint,
short bEncode,
BSTR sPrinterName);
[id(0x00000018)]
long ExecuteSQLSearch(
BSTR Filter,
BSTR Sort);
[id(0x00000019)]
short EnableCardCompletion(short bEnable);
[id(0x0000001a)]
short GetLastPrintJobID(long* PrintJobID);
[id(0x0000001b)]
short Capture(
BSTR FieldName,
BSTR SourceName);
[id(0x0000001c)]
short CaptureBiometric(
BSTR FieldName,
BSTR DeviceName,
BSTR ConfigName);
};
[
odl,
uuid(781FD661-A607-11D2-906E-00A0C926DC9D),
helpstring("IDWorks DataEntry SDK IIDWorksEventHandler Interface"

]
interface IIDWorksEventHandler : IDispatch {
[helpstring("method EventNotify"

]
HRESULT _stdcall EventNotify(
[in] long evtID,
[in] long fdt,
[in] long hwnd,
[in] BSTR FieldName,
[in] VARIANT FieldData,
[in] VARIANT p1,
[in] VARIANT p2,
[in, out] long* evtDisposition,
[in, out] VARIANT* R1,
[in, out] VARIANT* R2);
};
[
uuid(781FD663-A607-11D2-906E-00A0C926DC9D),
helpstring("IDWorks DataEntry SDK Class"

]
coclass SDK {
[default] interface IUnknown;
dispinterface IDataEntry;
dispinterface IDataEntry2;
};
[
uuid(781FD670-A607-11D2-906E-00A0C926DC9D),
helpstring("IDWorks EventHander Class"

]
coclass EVH {
[default] interface IUnknown;
interface IIDWorksEventHandler;
};
};
"IIDWorksEventHandler is the interface I want to implement"
"I will try using the outprocess COM server then (exe)"
"Had tried to build my event handler with Single-threaded COM Server (dll) and Multi-threaded COM Sever (dll) which both failed"
"Had not tried the Win32 executable/COM server (exe) build because the Visual Basic and C++ versions are DLLs that had worked seemlessly with the ID Works application"
"Do share me other information you know if you will regarding COM programming"
"Thanks for your replies"