APXHANDLE apxCreateJava(APXHANDLE hPool, LPCWSTR szJvmDllPath) { APXHANDLE hJava; LPAPXJAVAVM lpJava; jsize iVmCount; JavaVM *lpJvm = NULL; struct APX_JDK1_1InitArgs jArgs1_1; if (!__apxLoadJvmDll(szJvmDllPath)) return NULL; /* */ if (DYNLOAD_FPTR(JNI_GetCreatedJavaVMs)(&lpJvm, 1, &iVmCount) != JNI_OK) { return NULL; } if (iVmCount && !lpJvm) return NULL; hJava = apxHandleCreate(hPool, 0, NULL, sizeof(APXJAVAVM), __apxJavaJniCallback); if (IS_INVALID_HANDLE(hJava)) return NULL; hJava->dwType = APXHANDLE_TYPE_JVM; lpJava = APXHANDLE_DATA(hJava); lpJava->lpJvm = lpJvm; lpJava->iVmCount = iVmCount; /* Guess the stack size */ AplZeroMemory(&jArgs1_1, sizeof(jArgs1_1)); jArgs1_1.version = JNI_VERSION_1_1; DYNLOAD_FPTR(JNI_GetDefaultJavaVMInitArgs)(&jArgs1_1); if (jArgs1_1.javaStackSize < 0 || jArgs1_1.javaStackSize > (2048 * 1024)) jArgs1_1.javaStackSize = 0; lpJava->szStackSize = (SIZE_T)jArgs1_1.javaStackSize; if (!_st_sys_jvm) _st_sys_jvm = lpJvm; return hJava; }
LPTSTR apxMultiSzStrcat(LPAPXMULTISZ lpmSz, LPCTSTR szSrc) { DWORD l = lstrlen(szSrc); LPTSTR p; if (lpmSz->dwInsert + l + 2 > lpmSz->dwAllocated) { if ((lpmSz = (LPAPXMULTISZ )apxRealloc(lpmSz, QSTR_ALIGN(lpmSz->dwInsert + l))) == NULL) return NULL; lpmSz->dwAllocated = QSTR_SIZE(lpmSz->dwInsert + l); AplZeroMemory(QSTR_DATA(lpmSz) + lpmSz->dwInsert + l, lpmSz->dwAllocated - (lpmSz->dwInsert + l)); } p = (LPTSTR)QSTR_DATA(lpmSz) + lpmSz->dwInsert; AplMoveMemory(p, szSrc, l); lpmSz->dwInsert += (l + 1); return p; }