有个历史遗留的程序是用foxpro写的暂且叫他‘legacy’吧,现在要在java中调用着个程序并实现自动登录。
有个解决方案,用vc写个dll,接受3个参数分别是程序的名称、用户名、密码。这个dll在调用 legacy 时可以得到它的窗口的句柄,这样就可以用传入的用户名和密码实现程序的自动登录了。
我不懂vc,想请大家帮忙写个这样的dll文件,谢谢!!!
有个解决方案,用vc写个dll,接受3个参数分别是程序的名称、用户名、密码。这个dll在调用 legacy 时可以得到它的窗口的句柄,这样就可以用传入的用户名和密码实现程序的自动登录了。
我不懂vc,想请大家帮忙写个这样的dll文件,谢谢!!!
extern "C" JNIEXPORT void JNICALL Java_x1_x2_x3_YourFunctionName
(JNIEnv * env, jclass, jbyteArray Exe, jbyteArray User ,jbyteArray Pass)
{
char * szExe = new char[env->GetArrayLength(Exe) + 1];
memcpy(szExe, env->GetByteArrayElements(Exe, &test), env->GetArrayLength(Exe));
szExe[env->GetArrayLength(Exe)] = 0;
char * szUser = new char[env->GetArrayLength(User) + 1];
memcpy(szUser, env->GetByteArrayElements(User, &test), env->GetArrayLength(User));
szUser[env->GetArrayLength(User)] = 0;
char * szPass = new char[env->GetArrayLength(Pass) + 1];
memcpy(szPass, env->GetByteArrayElements(Pass, &test), env->GetArrayLength(Pass));
szPass[env->GetArrayLength(Pass)] = 0;
///////////////////////////////////////////////////////
//分别得到了szExe,szUser,szPass
//下面可以正常使用了
///////////////////////////////////////////////////////
delete[] szExe;
delete[] szUser;
delete[] szPass;
}
java里调用:
byte[] szExe = "xxx";
byte[] szUser = "xxx";
byte[] szPass = "xxx";
YourFunctionName(szExe,szUser,szPass);当然,之前要先:
System.loadLibrary("your_dll_name");