aboutsummaryrefslogtreecommitdiff
path: root/jim-win32com.c
diff options
context:
space:
mode:
authorpatthoyts <patthoyts>2005-03-02 22:34:37 +0000
committerpatthoyts <patthoyts>2005-03-02 22:34:37 +0000
commit6ea197495987dc79c03d23d3764b86604e37afe8 (patch)
tree5ebe490b55eed0b3d4d4cfb3748f973f252d5b3a /jim-win32com.c
parent73b6f39dbcd17189f2817289381796a7f79a1007 (diff)
downloadjimtcl-6ea197495987dc79c03d23d3764b86604e37afe8.zip
jimtcl-6ea197495987dc79c03d23d3764b86604e37afe8.tar.gz
jimtcl-6ea197495987dc79c03d23d3764b86604e37afe8.tar.bz2
Moved the internal rep accessor macros and Jim_FreeIntRep into the header as
they are useful to people writing new object types. Enabled calling COM methods, some object type bugs cleaned.
Diffstat (limited to 'jim-win32com.c')
-rw-r--r--jim-win32com.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/jim-win32com.c b/jim-win32com.c
index b2fd692..4b270f8 100644
--- a/jim-win32com.c
+++ b/jim-win32com.c
@@ -147,7 +147,9 @@ OLE2A(LPCOLESTR wsz)
void
UnicodeFreeInternalRep(Jim_Interp *interp, Jim_Obj *objPtr)
{
+ JIM_TRACE("UnicodeFreeInternalRep 0x%08x\n", (DWORD)objPtr);
Jim_Free(objPtr->internalRep.binaryValue.data);
+ objPtr->internalRep.binaryValue.data = NULL;
objPtr->internalRep.binaryValue.len = 0;
}
@@ -156,6 +158,7 @@ void
UnicodeDupInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr)
{
int len = srcPtr->internalRep.binaryValue.len;
+ JIM_TRACE("UnicodeDupInternalRep 0x%08x duped into 0x%08x\n", (DWORD)srcPtr, (DWORD)dupPtr);
interp;
dupPtr->internalRep.binaryValue.len = len;
dupPtr->internalRep.binaryValue.data = Jim_Alloc(len + sizeof(WCHAR));
@@ -169,8 +172,9 @@ UnicodeSetFromAny(Jim_Interp *interp, Jim_Obj *objPtr)
int nChars;
LPWSTR wsz;
- Jim_GetString(objPtr, NULL);
- //Jim_FreeIntRep(interp, objPtr);
+ JIM_TRACE("UnicodeSetFromAny 0x%08x\n", (DWORD)objPtr);
+ Jim_GetString(objPtr, NULL);
+ Jim_FreeIntRep(interp, objPtr);
nChars = MultiByteToWideChar(CP_ACP, 0, objPtr->bytes, objPtr->length, NULL, 0);
wsz = Jim_Alloc((nChars + 1) * sizeof(WCHAR));
@@ -213,8 +217,8 @@ Jim_GetUnicode(Jim_Obj *objPtr, int *lenPtr)
if (objPtr->typePtr != &unicodeObjType) {
if (UnicodeSetFromAny(NULL, objPtr) != JIM_OK) {
JIM_ASSERT("Jim_GetUnicode cannot convert item to unicode rep");
- //Jim_Panic("Jim_GetUnicode cannot convert item to unicode rep",
- //objPtr->typePtr->name);
+ Jim_Panic("Jim_GetUnicode cannot convert item to unicode rep",
+ objPtr->typePtr->name);
}
}
@@ -238,18 +242,19 @@ void
Ole32FreeInternalRep(Jim_Interp *interp, Jim_Obj *objPtr)
{
int r = JIM_OK;
- IDispatch *p = (IDispatch *)objPtr->internalRep.ptr;
- p->lpVtbl->Release(p);
+ IDispatch *p = (IDispatch *)Jim_GetIntRepPtr(objPtr);
JIM_TRACE("free ole32 object 0x%08x\n", (unsigned long)p);
+ p->lpVtbl->Release(p);
+ p = NULL;
}
void
Ole32DupInternalRep(Jim_Interp *interp, Jim_Obj *srcPtr, Jim_Obj *dupPtr)
{
- IDispatch *p = (IDispatch *)srcPtr->internalRep.ptr;
+ IDispatch *p = (IDispatch *)Jim_GetIntRepPtr(srcPtr);
+ JIM_TRACE("dup ole32 object 0x%08x\n", (unsigned long)p);
dupPtr->internalRep.ptr = p;
p->lpVtbl->AddRef(p);
- JIM_TRACE("dup ole32 object 0x%08x\n", (unsigned long)p);
}
static DISPPARAMS*
@@ -313,7 +318,7 @@ Ole32_Invoke(Jim_Interp *interp, int objc, Jim_Obj **objv)
return JIM_ERR;
}
- pdisp = (LPDISPATCH)objv[1]->internalRep.ptr;
+ pdisp = (LPDISPATCH)Jim_GetIntRepPtr(objv[1]);
name = Jim_GetUnicode(objv[2], NULL);
hr = pdisp->lpVtbl->GetIDsOfNames(pdisp, &IID_NULL, &name, 1,
LOCALE_SYSTEM_DEFAULT, &dispid);
@@ -327,7 +332,7 @@ Ole32_Invoke(Jim_Interp *interp, int objc, Jim_Obj **objv)
VariantInit(&v);
dp = Ole32_GetDispParams(interp, objc-3, objv+3);
- mode = INVOKE_PROPERTYGET;
+ mode = DISPATCH_PROPERTYGET | DISPATCH_METHOD;
hr = pdisp->lpVtbl->Invoke(pdisp, dispid, &IID_NULL, LOCALE_SYSTEM_DEFAULT, mode, dp, &v, &ei, &uierr);
Ole32_FreeDispParams(dp);