SF 1650134 - preliminary VT_Variant support VariantVariant
This commit is contained in:
@@ -1040,7 +1040,7 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantVariant
|
|||||||
* Added 1.12 pre 6
|
* Added 1.12 pre 6
|
||||||
*
|
*
|
||||||
* */
|
* */
|
||||||
JNIEXPORT jobject JNICALL Java_com_jacob_com_Variant_getVariantVariant
|
JNIEXPORT jint JNICALL Java_com_jacob_com_Variant_getVariantVariant
|
||||||
(JNIEnv *env, jobject _this)
|
(JNIEnv *env, jobject _this)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1051,24 +1051,14 @@ JNIEXPORT jobject JNICALL Java_com_jacob_com_Variant_getVariantVariant
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Construct a new Variant
|
|
||||||
jclass variantClass = env->FindClass("com/jacob/com/Variant");
|
|
||||||
jmethodID defaultCon = env->GetMethodID(variantClass, "<init>", "()V");
|
|
||||||
jobject newVariant = env->NewObject(variantClass, defaultCon);
|
|
||||||
|
|
||||||
VARIANT *refVar = V_VARIANTREF(v);
|
VARIANT *refVar = V_VARIANTREF(v);
|
||||||
VARIANT *newV = extractVariant(env, newVariant);
|
|
||||||
|
|
||||||
// we could have made a copy of refV here but we aren't every going to free
|
// we could have made a copy of refV here but we aren't every going to free
|
||||||
// it outside of the scope of the enclosing context so we will just used the
|
// it outside of the scope of the enclosing context so we will just used the
|
||||||
// enclosed. This relies on the java layer to zero out its ref to this
|
// enclosed. This relies on the java layer to zero out its ref to this
|
||||||
// enclosed variant before the gc can come along and free the memory out from
|
// enclosed variant before the gc can come along and free the memory out from
|
||||||
// under this enclosing variant.
|
// under this enclosing variant.
|
||||||
|
return (unsigned int)refVar;
|
||||||
jfieldID jf = env->GetFieldID( variantClass, VARIANT_FLD, "I");
|
|
||||||
env->SetIntField(newVariant, jf, (unsigned int)refVar);
|
|
||||||
|
|
||||||
return newVariant;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -508,9 +508,9 @@ JNIEXPORT void JNICALL Java_com_jacob_com_Variant_putVariantVariant
|
|||||||
/*
|
/*
|
||||||
* Class: com_jacob_com_Variant
|
* Class: com_jacob_com_Variant
|
||||||
* Method: getVariantVariant
|
* Method: getVariantVariant
|
||||||
* Signature: ()Lcom/jacob/com/Variant;
|
* Signature: ()I
|
||||||
*/
|
*/
|
||||||
JNIEXPORT jobject JNICALL Java_com_jacob_com_Variant_getVariantVariant
|
JNIEXPORT jint JNICALL Java_com_jacob_com_Variant_getVariantVariant
|
||||||
(JNIEnv *, jobject);
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -360,7 +360,7 @@ public class Variant extends JacobObject {
|
|||||||
* Added 1.12 pre 6
|
* Added 1.12 pre 6
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException
|
* @throws IllegalArgumentException
|
||||||
* if inVariant = null
|
* if inVariant = null or if inVariant is a Varint
|
||||||
* @param objectToBeWrapped A object that is to be referenced by this variant.
|
* @param objectToBeWrapped A object that is to be referenced by this variant.
|
||||||
* If objectToBeWrapped is already of type Variant, then it is used.
|
* If objectToBeWrapped is already of type Variant, then it is used.
|
||||||
* If objectToBeWrapped is not Variant then <code>new Variant(objectToBeWrapped)</code>
|
* If objectToBeWrapped is not Variant then <code>new Variant(objectToBeWrapped)</code>
|
||||||
@@ -370,10 +370,15 @@ public class Variant extends JacobObject {
|
|||||||
if (objectToBeWrapped == null) {
|
if (objectToBeWrapped == null) {
|
||||||
throw new IllegalArgumentException("Cannot put null in as a variant");
|
throw new IllegalArgumentException("Cannot put null in as a variant");
|
||||||
} else if (objectToBeWrapped instanceof Variant){
|
} else if (objectToBeWrapped instanceof Variant){
|
||||||
putVariantVariant((Variant)objectToBeWrapped);
|
throw new IllegalArgumentException("Cannot putVariant() only accepts non jacob objects.");
|
||||||
} else {
|
} else {
|
||||||
Variant inVariant = new Variant(objectToBeWrapped);
|
Variant inVariant = new Variant(objectToBeWrapped);
|
||||||
putVariantVariant(inVariant);
|
putVariantVariant(inVariant);
|
||||||
|
// This could be done in Variant.cpp
|
||||||
|
if (JacobObject.isDebugEnabled()){
|
||||||
|
JacobObject.debug("Zeroing out enclosed Variant's ref to windows memory");
|
||||||
|
}
|
||||||
|
inVariant.m_pVariant = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,7 +405,9 @@ public class Variant extends JacobObject {
|
|||||||
if (JacobObject.isDebugEnabled()){
|
if (JacobObject.isDebugEnabled()){
|
||||||
JacobObject.debug("About to call getVariantVariant()");
|
JacobObject.debug("About to call getVariantVariant()");
|
||||||
}
|
}
|
||||||
Variant enclosedVariant = getVariantVariant();
|
Variant enclosedVariant = new Variant();
|
||||||
|
int enclosedVariantMemory = getVariantVariant();
|
||||||
|
enclosedVariant.m_pVariant = enclosedVariantMemory;
|
||||||
Object enclosedVariantAsJava = enclosedVariant.toJavaObject();
|
Object enclosedVariantAsJava = enclosedVariant.toJavaObject();
|
||||||
// zero out the reference to the underlying windows memory so that
|
// zero out the reference to the underlying windows memory so that
|
||||||
// it is still only owned in one place by one java object
|
// it is still only owned in one place by one java object
|
||||||
@@ -423,7 +430,7 @@ public class Variant extends JacobObject {
|
|||||||
* Added 1.12 pre 6 - VT_VARIANT support is at an alpha level
|
* Added 1.12 pre 6 - VT_VARIANT support is at an alpha level
|
||||||
* @return Variant one of the VT_Variant types
|
* @return Variant one of the VT_Variant types
|
||||||
*/
|
*/
|
||||||
private native Variant getVariantVariant();
|
private native int getVariantVariant();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get the content of this variant as a short
|
* get the content of this variant as a short
|
||||||
|
|||||||
Reference in New Issue
Block a user