You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/05/28 10:33:40 UTC
svn commit: r779478 -
/commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp
Author: mturk
Date: Thu May 28 08:33:40 2009
New Revision: 779478
URL: http://svn.apache.org/viewvc?rev=779478&view=rev
Log:
Use OLE macros instead directly referencing VARIANT struct members
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp?rev=779478&r1=779477&r2=779478&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/variant.cpp Thu May 28 08:33:40 2009
@@ -48,7 +48,26 @@
if (!v)
return 0;
VariantInit(v);
- return ACR_PointerCreate(_E, v, 0, variant_callback);
+ return ACR_PointerCreate(_E, v, 0, variant_callback);
+}
+
+extern "C"
+ACR_JNI_PLATFORM_DECLARE(jobject, VARIANT, alloc1)(ACR_JNISTDARGS, jstring str)
+{
+ jobject r = NULL;
+ VARIANT *v = (VARIANT *)ACR_Calloc(_E, THROW_FMARK, sizeof(VARIANT));
+
+ UNREFERENCED_O;
+ if (!v)
+ return 0;
+ WITH_WSTR(str) {
+ VariantInit(v);
+ V_VT(v) = VT_BSTR;
+ V_BSTR(v) = SysAllocString(J2W(str));
+ r = ACR_PointerCreate(_E, v, 0, variant_callback);
+ } END_WITH_WSTR(str);
+
+ return r;
}
extern "C"
@@ -57,7 +76,7 @@
VARIANT *v = (VARIANT *)ACR_PointerGet(_E, _O, NULL);
if (v)
- return v->vt;
+ return V_VT(v);
else
return VT_NULL;
}
@@ -69,47 +88,47 @@
if (!v)
return 0;
- switch (v->vt) {
+ switch (V_VT(v)) {
case VT_BOOL:
- return v->boolVal;
+ return V_BOOL(v);
break;
case VT_I1:
case VT_UI1:
- return v->bVal;
+ return V_UI1(v);
break;
case VT_I2:
- return v->iVal;
+ return V_I2(v);
break;
case VT_UI2:
- return v->uiVal;
+ return V_UI2(v);
break;
case VT_I4:
- return v->lVal;
+ return V_I4(v);
break;
case VT_UI4:
- return v->ulVal;
+ return V_UI4(v);
break;
case VT_INT:
- return v->intVal;
+ return V_INT(v);
break;
case VT_UINT:
- return v->uintVal;
+ return V_UINT(v);
break;
case VT_R4:
- return (int)(v->fltVal);
+ return (int)(V_R4(v));
break;
case VT_R8:
- return (int)(v->dblVal);
+ return (int)(V_R8(v));
break;
case VT_ERROR:
- return (int)(v->scode);
+ return (int)(V_ERROR(v));
break;
case VT_BSTR:
- return SysStringLen(v->bstrVal);
+ return SysStringLen(V_BSTR(v));
break;
}
- if (v->vt & VT_ARRAY) {
- SAFEARRAY *sa = v->parray;
+ if (V_ISARRAY(v)) {
+ SAFEARRAY *sa = V_ARRAY(v);
long lb, ub;
SafeArrayGetLBound(sa, 1, &lb);
@@ -128,56 +147,59 @@
if (!v)
return 0;
- switch (v->vt) {
+ switch (V_VT(v)) {
case VT_BOOL:
- return v->boolVal;
+ return V_BOOL(v);
break;
case VT_I1:
case VT_UI1:
- return v->bVal;
+ return V_UI1(v);
break;
case VT_I2:
- return v->iVal;
+ return V_I2(v);
break;
case VT_UI2:
- return v->uiVal;
+ return V_UI2(v);
break;
case VT_I4:
- return v->lVal;
+ return V_I4(v);
break;
case VT_UI4:
- return v->ulVal;
+ return V_UI4(v);
break;
case VT_I8:
- return v->llVal;
+ return V_I8(v);
break;
case VT_UI8:
- return v->ullVal;
+ return (jlong)V_I8(v);
break;
case VT_INT:
- return v->intVal;
+ return V_INT(v);
break;
case VT_UINT:
- return v->uintVal;
+ return V_UINT(v);
break;
case VT_R4:
- return (jlong)(v->fltVal);
+ return (jlong)(V_R4(v));
break;
case VT_R8:
- return (jlong)(v->dblVal);
+ return (jlong)(V_R8(v));
break;
case VT_CY:
- return v->cyVal.int64;
+ return V_CY(v).int64;
break;
case VT_ERROR:
- return v->scode;
+ return V_ERROR(v);
+ break;
+ case VT_DATE:
+ return (jlong)V_DATE(v);
break;
case VT_BSTR:
- return SysStringLen(v->bstrVal);
+ return SysStringLen(V_BSTR(v));
break;
}
- if (v->vt & VT_ARRAY) {
- SAFEARRAY *sa = v->parray;
+ if (V_ISARRAY(v)) {
+ SAFEARRAY *sa = V_ARRAY(v);
long lb, ub;
SafeArrayGetLBound(sa, 1, &lb);
@@ -190,21 +212,81 @@
}
extern "C"
+ACR_JNI_PLATFORM_DECLARE(jdouble, VARIANT, getdv0)(ACR_JNISTDARGS)
+{
+ VARIANT *v = (VARIANT *)ACR_PointerGet(_E, _O, NULL);
+
+ if (!v)
+ return 0.0;
+ switch (V_VT(v)) {
+ case VT_BOOL:
+ return V_BOOL(v) * 1.0;
+ break;
+ case VT_I1:
+ case VT_UI1:
+ return V_UI1(v);
+ break;
+ case VT_I2:
+ return V_I2(v);
+ break;
+ case VT_UI2:
+ return V_UI2(v);
+ break;
+ case VT_I4:
+ return V_I4(v);
+ break;
+ case VT_UI4:
+ return V_UI4(v);
+ break;
+ case VT_I8:
+ return (double)V_I8(v);
+ break;
+ case VT_UI8:
+ return (double)((jlong)V_I8(v));
+ break;
+ case VT_INT:
+ return V_INT(v);
+ break;
+ case VT_UINT:
+ return V_UINT(v);
+ break;
+ case VT_R4:
+ return (double)V_R4(v);
+ break;
+ case VT_R8:
+ return V_R8(v);
+ break;
+ case VT_CY:
+ return (double)V_CY(v).int64;
+ break;
+ case VT_ERROR:
+ return V_ERROR(v);
+ break;
+ case VT_DATE:
+ return V_DATE(v);
+ break;
+ }
+ return 0.0;
+}
+
+extern "C"
ACR_JNI_PLATFORM_DECLARE(jstring, VARIANT, getsv0)(ACR_JNISTDARGS)
{
jstring s = NULL;
- HRESULT r;
- VARIANT c;
+ HRESULT r;
+ VARIANT c;
VARIANT *v = (VARIANT *)ACR_PointerGet(_E, _O, NULL);
if (!v)
return 0;
- switch (v->vt) {
+ switch (V_VT(v)) {
+ case VT_NULL:
+ break;
case VT_EMPTY:
s = _E->NewString(L"", 0);
break;
case VT_BSTR:
- s = _E->NewString(v->bstrVal, SysStringLen(v->bstrVal));
+ s = _E->NewString(V_BSTR(v), SysStringLen(V_BSTR(v)));
break;
default:
VariantInit(&c);
@@ -212,11 +294,12 @@
VARIANT_ALPHABOOL | VARIANT_NOUSEROVERRIDE,
VT_BSTR);
if (SUCCEEDED(r)) {
- s = _E->NewString(c.bstrVal, SysStringLen(c.bstrVal));
+ s = _E->NewString(V_BSTR(&c), SysStringLen(V_BSTR(&c)));
VariantClear(&c);
}
else {
/* TODO: Pick Exception to be thrown
+ * for conversion error.
*/
}
break;