C++ 创建Jvm

| 2007年5月12日星期六

http://it.bbs.tongfu.net/tpc/3/9/16565.htm

有时用户已经安装了自己的jdk或者jre,如果想创建自己想要的版本的jdk会受到影响.
因此改成从自己指定的目录手动加载jvm.dll来创建Java虚拟机.
//通过下面的代码来自定义jvm的路径
HINSTANCE handle = LoadLibrary(L"G:\\VisualProjects\\JNITest\\debug\\jre1.5.0\\bin\\client\\jvm.dll");

if( handle == 0)
{
printf("Failed to load jvm dll\n");
exit(-1);
}
else
{
printf("Load jvm dll success\n");
}

typedef int (__stdcall * CreateJavaVM)(JavaVM**,void **,JavaVMInitArgs *);

CreateJavaVM createJVM = (CreateJavaVM)GetProcAddress(handle,"JNI_CreateJavaVM");


createJVM(&jvm, (void **)&env, &args);

Java应用程序中上传文件到web服务器

| 2007年5月9日星期三

应用HttpClient和UploadFile在应用程序中上传文件:

http://www.theserverside.com/tt/articles/article.tss?l=HttpClient_FileUpload

jstring和wstring的双向转换

| 2007年5月4日星期五

wstring wstr = (wchar_t *)env->GetStringChars(jstr, NULL);

jstring jstr = env->NewString((jchar *)wstr.c_str(), wstr.length());

C++中的Wstring和string的转换

| 2007年5月3日星期四

//Converting a WChar string to a Ansi stringstring WChar2Ansi(LPCWSTR pwszSrc){ int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
if (nLen<= 0) return string("");
char* pszDst = new char[nLen];
if (NULL == pszDst) return string("");
WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL); pszDst[nLen -1] = 0;
string strTemp(pszDst); delete [] pszDst;
return strTemp;}
string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
//Converting a Ansi string to WChar stringwstring Ansi2WChar(LPCSTR pszSrc, int nLen){ int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0); if(nSize <= 0) return NULL;
WCHAR *pwszDst = new WCHAR[nSize+1]; if( NULL == pwszDst) return NULL;
MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize); pwszDst[nSize] = 0;
if( pwszDst[0] == 0xFEFF) // skip Oxfeff for(int i = 0; i < nSize; i ++) pwszDst[i] = pwszDst[i+1];
wstring wcharString(pwszDst); delete pwszDst;
return wcharString;}
wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}