SF 1689061 compiler changes to support later versions of VCC and also a big memcpy fix in Variants for currency
This commit is contained in:
@@ -51,6 +51,10 @@
|
|||||||
<td width="13%" valign="top">1687419</td>
|
<td width="13%" valign="top">1687419</td>
|
||||||
<td width="87%" valign="top">(prelease 3) Corrected calls to AttachCurrentThread in EventProxy</td>
|
<td width="87%" valign="top">(prelease 3) Corrected calls to AttachCurrentThread in EventProxy</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top">1689061 </td>
|
||||||
|
<td width="87%" valign="top">(prelease 4) C code changes to fix VC2003 compiler warnings.</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="13%" valign="top"> </td>
|
<td width="13%" valign="top"> </td>
|
||||||
<td width="87%" valign="top"> </td>
|
<td width="87%" valign="top"> </td>
|
||||||
@@ -81,6 +85,13 @@
|
|||||||
<td width="87%" valign="top"><em>Identified 1.11.1</em> Process affinity may have to be set on
|
<td width="87%" valign="top"><em>Identified 1.11.1</em> Process affinity may have to be set on
|
||||||
dual core machines to avoid com exceptions.</td>
|
dual core machines to avoid com exceptions.</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="13%" valign="top">no ticket</td>
|
||||||
|
<td width="87%" valign="top"><em>Identified 1.11.1</em> Versions of JDK 1.5 prior to 1.5_10 are known to leak JNI handles.
|
||||||
|
See the Sun bug tracking system http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6399321 for more details.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- --------- -->
|
<!-- --------- -->
|
||||||
|
|||||||
@@ -322,7 +322,7 @@ static char* BasicToCharString(const BSTR inBasicString)
|
|||||||
size_t len = ::wcstombs(charString, inBasicString, charStrSize);
|
size_t len = ::wcstombs(charString, inBasicString, charStrSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
charString = ::strdup("");
|
charString = ::_strdup("");
|
||||||
|
|
||||||
return charString;
|
return charString;
|
||||||
}
|
}
|
||||||
@@ -334,7 +334,7 @@ static char* CreateErrorMsgFromResult(HRESULT inResult)
|
|||||||
FORMAT_MESSAGE_FROM_SYSTEM, NULL, inResult,MAKELANGID(LANG_NEUTRAL,
|
FORMAT_MESSAGE_FROM_SYSTEM, NULL, inResult,MAKELANGID(LANG_NEUTRAL,
|
||||||
SUBLANG_DEFAULT), (LPTSTR) &msg, 0, NULL);
|
SUBLANG_DEFAULT), (LPTSTR) &msg, 0, NULL);
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
||||||
msg = ::strdup("An unknown COM error has occured.");
|
msg = ::_strdup("An unknown COM error has occured.");
|
||||||
|
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
@@ -473,13 +473,13 @@ JNIEXPORT jobject JNICALL Java_com_jacob_com_Dispatch_invokev
|
|||||||
{
|
{
|
||||||
jint *uAE = env->GetIntArrayElements(uArgErr, NULL);
|
jint *uAE = env->GetIntArrayElements(uArgErr, NULL);
|
||||||
hr = pIDispatch->Invoke(dispID,IID_NULL,
|
hr = pIDispatch->Invoke(dispID,IID_NULL,
|
||||||
lcid,wFlags,&dispparams,v,&excepInfo,(unsigned int *)uAE);
|
lcid,(WORD)wFlags,&dispparams,v,&excepInfo,(unsigned int *)uAE); // SF 1689061
|
||||||
env->ReleaseIntArrayElements(uArgErr, uAE, 0);
|
env->ReleaseIntArrayElements(uArgErr, uAE, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hr = pIDispatch->Invoke(dispID,IID_NULL,
|
hr = pIDispatch->Invoke(dispID,IID_NULL,
|
||||||
lcid,wFlags,&dispparams,v,&excepInfo, NULL);
|
lcid,(WORD)wFlags,&dispparams,v,&excepInfo, NULL); // SF 1689061
|
||||||
}
|
}
|
||||||
if (num_args)
|
if (num_args)
|
||||||
{
|
{
|
||||||
@@ -514,7 +514,7 @@ JNIEXPORT jobject JNICALL Java_com_jacob_com_Dispatch_invokev
|
|||||||
} else {
|
} else {
|
||||||
dispIdAsName = new char[256];
|
dispIdAsName = new char[256];
|
||||||
// get the id string
|
// get the id string
|
||||||
itoa (dispID,dispIdAsName,10);
|
_itoa (dispID,dispIdAsName,10);
|
||||||
//continue on mostly as before
|
//continue on mostly as before
|
||||||
buf = CreateErrorMsgFromInfo(hr,&excepInfo,dispIdAsName);
|
buf = CreateErrorMsgFromInfo(hr,&excepInfo,dispIdAsName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,11 +67,11 @@ EventProxy::~EventProxy()
|
|||||||
if (vmConnectionStatus == JNI_EDETACHED){
|
if (vmConnectionStatus == JNI_EDETACHED){
|
||||||
//printf("Unhook: Attaching to current thread using JNI Version 1.2 (%d)\n",vmConnectionStatus);
|
//printf("Unhook: Attaching to current thread using JNI Version 1.2 (%d)\n",vmConnectionStatus);
|
||||||
JavaVMAttachArgs attachmentArgs;
|
JavaVMAttachArgs attachmentArgs;
|
||||||
attachmentArgs.version = JNI_VERSION_1_2;
|
attachmentArgs.version = JNI_VERSION_1_2;
|
||||||
attachmentArgs.name = NULL;
|
attachmentArgs.name = NULL;
|
||||||
attachmentArgs.group = NULL;
|
attachmentArgs.group = NULL;
|
||||||
jvm->AttachCurrentThread((void **)&env, &attachmentArgs);
|
jvm->AttachCurrentThread((void **)&env, &attachmentArgs);
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
} else {
|
} else {
|
||||||
// should really look for JNI_OK versus an error
|
// should really look for JNI_OK versus an error
|
||||||
// started method hooked so no need to attach again
|
// started method hooked so no need to attach again
|
||||||
@@ -144,17 +144,17 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid,
|
|||||||
|
|
||||||
// attach to the current running thread
|
// attach to the current running thread
|
||||||
//printf("Invoke: Attaching to current thread using JNI Version 1.2\n");
|
//printf("Invoke: Attaching to current thread using JNI Version 1.2\n");
|
||||||
JavaVMAttachArgs attachmentArgs;
|
JavaVMAttachArgs attachmentArgs;
|
||||||
attachmentArgs.version = JNI_VERSION_1_2;
|
attachmentArgs.version = JNI_VERSION_1_2;
|
||||||
attachmentArgs.name = NULL;
|
attachmentArgs.name = NULL;
|
||||||
attachmentArgs.group = NULL;
|
attachmentArgs.group = NULL;
|
||||||
jvm->AttachCurrentThread((void **)&env, &attachmentArgs);
|
jvm->AttachCurrentThread((void **)&env, &attachmentArgs);
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
|
|
||||||
if (!eventMethodName)
|
if (!eventMethodName)
|
||||||
{
|
{
|
||||||
// user did not implement this method
|
// user did not implement this method
|
||||||
//printf("Invoke: didn't find method name\n");
|
// printf("Invoke: didn't find method name\n");
|
||||||
ThrowComFail(env, "Event method received was not defined as part of callback interface", -1);
|
ThrowComFail(env, "Event method received was not defined as part of callback interface", -1);
|
||||||
|
|
||||||
// should we detatch before returning?? The old code didn't but I don't see why not.
|
// should we detatch before returning?? The old code didn't but I don't see why not.
|
||||||
@@ -179,7 +179,7 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid,
|
|||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
//printf("Invoke: Made Variant\n");
|
//printf("Invoke: Made Variant\n");
|
||||||
jclass variantClass = env->GetObjectClass(aVariantObj);
|
jclass variantClass = env->GetObjectClass(aVariantObj);
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
|
|
||||||
// create the variant parameter array
|
// create the variant parameter array
|
||||||
// how many params
|
// how many params
|
||||||
@@ -200,7 +200,7 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid,
|
|||||||
VariantCopy(va, &pDispParams->rgvarg[i]);
|
VariantCopy(va, &pDispParams->rgvarg[i]);
|
||||||
// put it in the array
|
// put it in the array
|
||||||
env->SetObjectArrayElement(varr, j, arg);
|
env->SetObjectArrayElement(varr, j, arg);
|
||||||
env->DeleteLocalRef(arg);
|
env->DeleteLocalRef(arg);
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
}
|
}
|
||||||
//printf("Invoke: Filled Array\n");
|
//printf("Invoke: Filled Array\n");
|
||||||
@@ -215,6 +215,8 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid,
|
|||||||
}
|
}
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
// don't need the first variant we created to get the class
|
// don't need the first variant we created to get the class
|
||||||
|
// SF 1689061 change not accepted but put in as comment for later reminder
|
||||||
|
//Java_com_jacob_com_Variant_release(env, aVariantObj);
|
||||||
env->DeleteLocalRef(aVariantObj);
|
env->DeleteLocalRef(aVariantObj);
|
||||||
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
if (env->ExceptionOccurred()) { env->ExceptionDescribe(); env->ExceptionClear();}
|
||||||
|
|
||||||
@@ -225,17 +227,19 @@ STDMETHODIMP EventProxy::Invoke(DISPID dispID, REFIID riid,
|
|||||||
VARIANT *java = extractVariant(env, arg);
|
VARIANT *java = extractVariant(env, arg);
|
||||||
VARIANT *com = &pDispParams->rgvarg[i];
|
VARIANT *com = &pDispParams->rgvarg[i];
|
||||||
convertJavaVariant(java, com);
|
convertJavaVariant(java, com);
|
||||||
|
// SF 1689061 change not accepted but put in as comment for later reminder
|
||||||
|
//Java_com_jacob_com_Variant_release(env, arg);
|
||||||
zeroVariant(env, arg);
|
zeroVariant(env, arg);
|
||||||
env->DeleteLocalRef(arg);
|
env->DeleteLocalRef(arg);
|
||||||
}
|
}
|
||||||
// End code from Jiffie team that copies parameters back from java to COM
|
// End code from Jiffie team that copies parameters back from java to COM
|
||||||
// detach from thread
|
// detach from thread
|
||||||
//printf("Invoke: Detatching\n");
|
//printf("Invoke: Detatching\n");
|
||||||
jvm->DetachCurrentThread();
|
jvm->DetachCurrentThread();
|
||||||
//fflush(stdout);
|
//fflush(stdout);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventProxy::convertJavaVariant(VARIANT *java, VARIANT *com) {
|
void EventProxy::convertJavaVariant(VARIANT *java, VARIANT *com) {
|
||||||
@@ -854,4 +858,3 @@ void EventProxy::convertJavaVariant(VARIANT *java, VARIANT *com) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -562,7 +562,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_fromStringArray
|
|||||||
// GetStringUTFChars() replaced with GetStringChars()
|
// GetStringUTFChars() replaced with GetStringChars()
|
||||||
// (Variant modified in previous report)
|
// (Variant modified in previous report)
|
||||||
const jchar *str = env->GetStringChars(s, NULL);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
CComBSTR bs(str);
|
CComBSTR bs((LPCOLESTR)str); // SR cast SF 1689061
|
||||||
V_VT(&v) = VT_BSTR;
|
V_VT(&v) = VT_BSTR;
|
||||||
V_BSTR(&v) = bs.Copy();
|
V_BSTR(&v) = bs.Copy();
|
||||||
long x = i;
|
long x = i;
|
||||||
@@ -577,7 +577,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_fromStringArray
|
|||||||
// GetStringUTFChars() replaced with GetStringChars()
|
// GetStringUTFChars() replaced with GetStringChars()
|
||||||
// (Variant modified in previous report)
|
// (Variant modified in previous report)
|
||||||
const jchar *str = env->GetStringChars(s, NULL);
|
const jchar *str = env->GetStringChars(s, NULL);
|
||||||
CComBSTR bs(str);
|
CComBSTR bs((LPCOLESTR)str); // SR cast SF 1689061
|
||||||
BSTR bstr = bs.Detach();
|
BSTR bstr = bs.Detach();
|
||||||
long x = i;
|
long x = i;
|
||||||
SafeArrayPutElement(psa,&x,bstr);
|
SafeArrayPutElement(psa,&x,bstr);
|
||||||
@@ -962,7 +962,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_jacob_com_SafeArray_toStringArray
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(&v);
|
BSTR bs = V_BSTR(&v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
env->SetObjectArrayElement(iarr, i, js);
|
env->SetObjectArrayElement(iarr, i, js);
|
||||||
}
|
}
|
||||||
return iarr;
|
return iarr;
|
||||||
@@ -973,7 +973,7 @@ JNIEXPORT jobjectArray JNICALL Java_com_jacob_com_SafeArray_toStringArray
|
|||||||
BSTR bs = NULL;
|
BSTR bs = NULL;
|
||||||
long ix = i;
|
long ix = i;
|
||||||
SafeArrayGetElement(sa, &ix, (void*) &bs);
|
SafeArrayGetElement(sa, &ix, (void*) &bs);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
env->SetObjectArrayElement(iarr, i, js);
|
env->SetObjectArrayElement(iarr, i, js);
|
||||||
}
|
}
|
||||||
return iarr;
|
return iarr;
|
||||||
@@ -1618,7 +1618,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__I
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(&v);
|
BSTR bs = V_BSTR(&v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
// jacob report 1224219
|
// jacob report 1224219
|
||||||
// SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm
|
// SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
@@ -1626,7 +1626,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__I
|
|||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
BSTR bs = NULL;
|
BSTR bs = NULL;
|
||||||
SafeArrayGetElement(psa, &idx, &bs);
|
SafeArrayGetElement(psa, &idx, &bs);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
// jacob report 1224219
|
// jacob report 1224219
|
||||||
// SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm
|
// SafeArrayGetElement memory must be freed http://www.canaimasoft.com/f90VB/OnlineManuals/Reference/TH_31.htm
|
||||||
if (bs) SysFreeString(bs);
|
if (bs) SysFreeString(bs);
|
||||||
@@ -1660,13 +1660,13 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString__II
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(&v);
|
BSTR bs = V_BSTR(&v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
long idx[2] = {i, j};
|
long idx[2] = {i, j};
|
||||||
BSTR bs = NULL;
|
BSTR bs = NULL;
|
||||||
SafeArrayGetElement(psa, idx, &bs);
|
SafeArrayGetElement(psa, idx, &bs);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
ThrowComFail(env, "safearray cannot get string", 0);
|
ThrowComFail(env, "safearray cannot get string", 0);
|
||||||
@@ -1783,7 +1783,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_getStrings
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(&v);
|
BSTR bs = V_BSTR(&v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
env->SetObjectArrayElement(ja, j, js);
|
env->SetObjectArrayElement(ja, j, js);
|
||||||
VariantClear(&v);
|
VariantClear(&v);
|
||||||
}
|
}
|
||||||
@@ -1795,7 +1795,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_SafeArray_getStrings
|
|||||||
{
|
{
|
||||||
long ix = i;
|
long ix = i;
|
||||||
SafeArrayGetElement(sa, &ix, (void*) &bs);
|
SafeArrayGetElement(sa, &ix, (void*) &bs);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
env->SetObjectArrayElement(ja, j, js);
|
env->SetObjectArrayElement(ja, j, js);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -2751,12 +2751,12 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_SafeArray_getString___3I
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(&v);
|
BSTR bs = V_BSTR(&v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
} else if (vt == VT_BSTR) {
|
} else if (vt == VT_BSTR) {
|
||||||
BSTR bs = NULL;
|
BSTR bs = NULL;
|
||||||
SafeArrayGetElement(psa, jIndices, &bs);
|
SafeArrayGetElement(psa, jIndices, &bs);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs)); // SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
ThrowComFail(env, "safearray cannot get string", 0);
|
ThrowComFail(env, "safearray cannot get string", 0);
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_init
|
|||||||
* Method: zeroVariant
|
* Method: zeroVariant
|
||||||
* Signature: ()V
|
* Signature: ()V
|
||||||
*
|
*
|
||||||
* This should only be used on variant objects created by teh
|
* This should only be used on variant objects created by the
|
||||||
* com layer as part of a call through EventProxy.
|
* com layer as part of a call through EventProxy.
|
||||||
* This zeros out the variant pointer in the Variant object
|
* This zeros out the variant pointer in the Variant object
|
||||||
* so that the calling COM program can free the memory.
|
* so that the calling COM program can free the memory.
|
||||||
@@ -272,7 +272,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantStringRef
|
|||||||
// Unicode string (no terminating NULL) provided by GetStringChars
|
// Unicode string (no terminating NULL) provided by GetStringChars
|
||||||
const jsize numChars = env->GetStringLength(s);
|
const jsize numChars = env->GetStringLength(s);
|
||||||
//CComBSTR bs(cStr);
|
//CComBSTR bs(cStr);
|
||||||
CComBSTR bs( numChars, cStr );
|
CComBSTR bs( numChars, (LPCOLESTR)cStr ); // SR cast SF 1689061
|
||||||
|
|
||||||
BSTR *pbs = (BSTR *)CoTaskMemAlloc(sizeof(BSTR));
|
BSTR *pbs = (BSTR *)CoTaskMemAlloc(sizeof(BSTR));
|
||||||
bs.CopyTo(pbs);
|
bs.CopyTo(pbs);
|
||||||
@@ -367,7 +367,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_Variant_getVariantStringRef
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR *bs = V_BSTRREF(v);
|
BSTR *bs = V_BSTRREF(v);
|
||||||
jstring js = env->NewString(*bs, SysStringLen(*bs));
|
jstring js = env->NewString((jchar*)*bs, SysStringLen(*bs)); // SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -656,7 +656,7 @@ JNIEXPORT jlong JNICALL Java_com_jacob_com_Variant_getVariantCurrency
|
|||||||
CY cy;
|
CY cy;
|
||||||
cy = V_CY(v);
|
cy = V_CY(v);
|
||||||
jlong jl;
|
jlong jl;
|
||||||
memcpy(&jl, &cy, 64);
|
memcpy(&jl, &cy, 8); // was 64. should be sizeof(x) SF 1689061
|
||||||
return jl;
|
return jl;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -683,7 +683,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantCurrencyRef
|
|||||||
if (v) {
|
if (v) {
|
||||||
VariantClear(v); // whatever was there before
|
VariantClear(v); // whatever was there before
|
||||||
CY *pf = (CY *)CoTaskMemAlloc(sizeof(CY));
|
CY *pf = (CY *)CoTaskMemAlloc(sizeof(CY));
|
||||||
memcpy(pf, &cur, 64);
|
memcpy(pf, &cur, 8); // was 64. should be sizeof(x) SF 1689061
|
||||||
V_VT(v) = VT_BYREF|VT_CY;
|
V_VT(v) = VT_BYREF|VT_CY;
|
||||||
V_CYREF(v) = pf;
|
V_CYREF(v) = pf;
|
||||||
}
|
}
|
||||||
@@ -739,7 +739,7 @@ JNIEXPORT jstring JNICALL Java_com_jacob_com_Variant_getVariantString
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
BSTR bs = V_BSTR(v);
|
BSTR bs = V_BSTR(v);
|
||||||
jstring js = env->NewString(bs, SysStringLen(bs));
|
jstring js = env->NewString((jchar*)bs, SysStringLen(bs));// SR cast SF 1689061
|
||||||
return js;
|
return js;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -762,7 +762,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantString
|
|||||||
// Unicode string (no terminating NULL) provided by GetStringChars
|
// Unicode string (no terminating NULL) provided by GetStringChars
|
||||||
const jsize numChars = env->GetStringLength(s);
|
const jsize numChars = env->GetStringLength(s);
|
||||||
//CComBSTR bs(cStr);
|
//CComBSTR bs(cStr);
|
||||||
CComBSTR bs( numChars, cStr );
|
CComBSTR bs( numChars, (LPCOLESTR)cStr ); // SR cast SF 1689061
|
||||||
|
|
||||||
V_VT(v) = VT_BSTR;
|
V_VT(v) = VT_BSTR;
|
||||||
V_BSTR(v) = bs.Copy();
|
V_BSTR(v) = bs.Copy();
|
||||||
@@ -795,7 +795,7 @@ JNIEXPORT jlong JNICALL Java_com_jacob_com_Variant_getVariantCurrencyRef
|
|||||||
CY *cy;
|
CY *cy;
|
||||||
cy = V_CYREF(v);
|
cy = V_CYREF(v);
|
||||||
jlong jl;
|
jlong jl;
|
||||||
memcpy(&jl, cy, 64);
|
memcpy(&jl, cy, 8); // was 64. should be sizeof(x) SF 1689061
|
||||||
return jl;
|
return jl;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user