#include <jni.h>
//#include "IEnumVARIANT.h"
// V^CvJNI(jdk1.2ȍ~)
//#include "jp_0005cne_0005cso_0005fnet_0005cga2_0005cno_0005fji_0005cjcom_0005cIEnumVARIANT.h"
// Â^CvJNI(ȂƂjdk1.2O)
#include "jp_ne_so_0005fnet_ga2_no_0005fji_jcom_IEnumVARIANT.h"
#include "atlbase.h"
#include "atlconv.h"
#include "JCom.h"
/* **********************************************************************
* Class: IEnumVARIANT
* Method: Next
* Signature: ()Ljava/lang/Object;
P̃IuWFNgo܂B
̃IuWFNgȂꍇnullԂ܂B
* **********************************************************************/
//JNIEXPORT jobject JNICALL Java_IEnumVARIANT_Next__(JNIEnv *env, jobject obj)
JNIEXPORT jobject JNICALL Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Next__
(JNIEnv *env, jobject obj)
{
// IEnumVARIANTC^[tF[XoB
jclass cls = env->GetObjectClass(obj);
jfieldID fieldID = env->GetFieldID(cls, "pIUnknown", "I");
IEnumVARIANT* pIEnumVARIANT = (IEnumVARIANT*)env->GetIntField(obj, fieldID);
if(pIEnumVARIANT == NULL) {
// OZbg
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, "IEnumVARIANT not created");
return NULL;
}
// Next\bhĂ
VARIANT vresult;
VariantInit(&vresult);
HRESULT hr = pIEnumVARIANT->Next(1, &vresult, NULL);
if(hr != 0 && hr != S_FALSE) {
// OZbg
char message[256];
sprintf(message, "IEnumVARIANT.Next() failed HRESULT=0x%XL",hr);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
return NULL;
}
// 擾IuWFNgŌ̂Ƃɂ null ԂB
if(hr == S_FALSE) {
return NULL;
}
// 擾IuWFNgJavajava.lang.Objectɕϊ
jobject jresult;
int ret = VARIANT2jobject(env, obj, &vresult, &jresult);
VARIANT_free(&vresult);
if(ret != 0) {
// OZbg
char message[256];
sprintf(message, "cannot convert VT=0x%X",ret);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
return NULL;
}
return jresult;
}
/* **********************************************************************
* Class: IEnumVARIANT
* Method: Next
* Signature: (I)[Ljava/lang/Object;
w肵̃IuWFNgo܂B
c肪Ȃꍇ́Aw肵ȉɂȂꍇ܂B
z̗vfɒӂĉB
celt͂Pȏ̐w肵ĉB
͖̎ɍsȂĂAȂNext()JԂłB
Â`oh͊ĂяoɂI[o[wbh炷߂
pӂĂ̂ŁA邽߁Â`ohpӂĂB
* **********************************************************************/
//JNIEXPORT jobjectArray JNICALL Java_IEnumVARIANT_Next__I(JNIEnv *env, jobject obj, jint celt)
JNIEXPORT jobjectArray JNICALL Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Next__I
(JNIEnv *env, jobject obj, jint celt)
{
int i;
// IEnumVARIANTC^[tF[XoB
jclass cls = env->GetObjectClass(obj);
jfieldID fieldID = env->GetFieldID(cls, "pIUnknown", "I");
IEnumVARIANT* pIEnumVARIANT = (IEnumVARIANT*)env->GetIntField(obj, fieldID);
if(pIEnumVARIANT == NULL) {
// OZbg
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, "IEnumVARIANT not created");
return NULL;
}
// Next\bhĂ
VARIANT* vresult = new VARIANT[celt];
for(i=0; i<celt; i++) {
VariantInit(&vresult[i]);
}
unsigned long celtFetched = 0;
HRESULT hr = pIEnumVARIANT->Next(celt, vresult, &celtFetched);
if(hr != 0 && hr != S_FALSE) {
// OZbg
char message[256];
sprintf(message, "IEnumVARIANT.Next() failed HRESULT=0x%XL",hr);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
// mۂIuWFNgׂĔj
delete[] vresult;
return NULL;
}
// Object̔z쐬B
jclass clsObject = env->FindClass("java/lang/Object");
jobjectArray jresult = env->NewObjectArray(celtFetched, clsObject, NULL);
if(jresult==NULL) {
// OZbg
char message[256];
sprintf(message, "Not enough memory ");
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
// mۂIuWFNgׂĔj
delete[] vresult;
return NULL;
}
// 擾IuWFNgJavajava.lang.Objectɕϊ
for(i=0; i<celtFetched; i++) {
jobject objElem;
int ret = VARIANT2jobject(env, obj, &vresult[i], &objElem);
VARIANT_free(&vresult[i]);
if(ret != 0) {
// OZbg
char message[256];
sprintf(message, "cannot convert VT=0x%X",ret);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
// mۂIuWFNgׂĔj
// evf͔jKvȂBfbB
delete[] vresult;
return NULL;
}
env->SetObjectArrayElement(jresult, i, objElem);
}
delete[] vresult;
return jresult;
}
/* **********************************************************************
* Class: IEnumVARIANT
* Method: Reset
* Signature: ()V
* **********************************************************************/
//JNIEXPORT void JNICALL Java_IEnumVARIANT_Reset(JNIEnv *env, jobject obj)
JNIEXPORT void JNICALL Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Reset
(JNIEnv *env, jobject obj)
{
// IEnumVARIANTC^[tF[XoB
jclass cls = env->GetObjectClass(obj);
jfieldID fieldID = env->GetFieldID(cls, "pIUnknown", "I");
IEnumVARIANT* pIEnumVARIANT = (IEnumVARIANT*)env->GetIntField(obj, fieldID);
if(pIEnumVARIANT == NULL) {
// OZbg
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, "IEnumVARIANT not created");
return;
}
// Reset\bhĂ
VARIANT vresult;
VariantInit(&vresult);
HRESULT hr = pIEnumVARIANT->Reset();
if(hr != 0) {
// OZbg
char message[256];
sprintf(message, "IEnumVARIANT.Reset() failed HRESULT=0x%XL",hr);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
return;
}
}
/* **********************************************************************
* Class: IEnumVARIANT
* Method: Skip
* Signature: (I)V
* **********************************************************************/
//JNIEXPORT void JNICALL Java_IEnumVARIANT_Skip(JNIEnv *env, jobject obj, jint celt)
JNIEXPORT void JNICALL Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Skip
(JNIEnv *env, jobject obj, jint celt)
{
// IEnumVARIANTC^[tF[XoB
jclass cls = env->GetObjectClass(obj);
jfieldID fieldID = env->GetFieldID(cls, "pIUnknown", "I");
IEnumVARIANT* pIEnumVARIANT = (IEnumVARIANT*)env->GetIntField(obj, fieldID);
if(pIEnumVARIANT == NULL) {
// OZbg
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, "IEnumVARIANT not created");
return;
}
// Skip\bhĂ
VARIANT vresult;
VariantInit(&vresult);
HRESULT hr = pIEnumVARIANT->Skip((unsigned long)celt);
if(hr != 0) {
// OZbg
char message[256];
sprintf(message, "IEnumVARIANT.Skip(%d) failed HRESULT=0x%XL",celt, hr);
jclass clsJComException = env->FindClass(CLASS_JCOM_EXCEPTION);
env->ThrowNew(clsJComException, message);
return;
}
}
//======================================================================================
// Java 1.1ȑÕC^[tF[X
JNIEXPORT jobject JNICALL Java_jp_ne_so_1net_ga2_no_1ji_jcom_IEnumVARIANT__1next__
(JNIEnv *env, jobject obj)
{
return Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Next__(env, obj);
}
JNIEXPORT jobjectArray JNICALL Java_jp_ne_so_1net_ga2_no_1ji_jcom_IEnumVARIANT__1next__I
(JNIEnv *env, jobject obj, jint celt)
{
return Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Next__I(env, obj, celt);
}
JNIEXPORT void JNICALL Java_jp_ne_so_1net_ga2_no_1ji_jcom_IEnumVARIANT__1reset
(JNIEnv *env, jobject obj)
{
Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Reset(env, obj);
}
JNIEXPORT void JNICALL Java_jp_ne_so_1net_ga2_no_1ji_jcom_IEnumVARIANT__1skip
(JNIEnv *env, jobject obj, jint celt)
{
Java_jp_0005cne_0005cso_1net_0005cga2_0005cno_1ji_0005cjcom_0005cIEnumVARIANT_Skip(env, obj, celt);
}