* NOT PART OF TBOX BUILD *

java uses general syntax for return values.
   (idl: void test0([retval] out long l); will be
    java: long test0(); intead of
    java   void test0(long[] l);
   )
author=sdv@sparc.spb.su


git-svn-id: svn://10.0.0.236/trunk@80566 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
idk%eng.sun.com
2000-10-06 08:19:53 +00:00
parent 85c42f0bbc
commit 9cd4f9d962
21 changed files with 776 additions and 111 deletions

View File

@@ -74,15 +74,20 @@ void bcJavaStub::Dispatch(bcICall *call) {
nsXPTMethodInfo* info;
interfaceInfo->GetMethodInfo(mid,(const nsXPTMethodInfo **)&info);
PRUint32 paramCount = info->GetParamCount();
args = env->NewObjectArray(paramCount, objectClass,NULL);
printf("\n**[c++]hasRetval: %d\n", HasRetval(paramCount, info));
if (HasRetval(paramCount, info))
// do not pass retval param
paramCount--;
args = env->NewObjectArray(paramCount, objectClass,NULL);
bcJavaMarshalToolkit * mt = new bcJavaMarshalToolkit(mid, interfaceInfo, args, env,1, call->GetORB());
bcIUnMarshaler * um = call->GetUnMarshaler();
bcIUnMarshaler * um = call->GetUnMarshaler();
mt->UnMarshal(um);
jobject jiid = bcIIDJava::GetObject(&iid);
bcJavaGlobal::GetJNIEnv()->CallStaticObjectMethod(utilitiesClass, callMethodByIndexMID, object, jiid, (jint)mid, args);
jobject retval = bcJavaGlobal::GetJNIEnv()->CallStaticObjectMethod(utilitiesClass, callMethodByIndexMID, object, jiid, (jint)mid, args);
//nb return value; excepion handling
bcIMarshaler * m = call->GetMarshaler();
mt->Marshal(m);
bcIMarshaler * m = call->GetMarshaler();
// mt->Marshal(m);
mt->Marshal(m, retval);
//nb memory deallocation
delete m; delete um; delete mt;
return;
@@ -109,8 +114,12 @@ void bcJavaStub::Init() {
}
}
PRBool bcJavaStub::HasRetval(PRUint32 paramCount, nsXPTMethodInfo *info)
{
for (unsigned int i = 0; i < paramCount; i++) {
nsXPTParamInfo param = info->GetParam(i);
if (param.IsRetval())
return PR_TRUE;
}
return PR_FALSE;
}