有个历史遗留的程序是用foxpro写的暂且叫他‘legacy’吧,现在要在java中调用着个程序并实现自动登录。
有个解决方案,用vc写个dll,接受3个参数分别是程序的名称、用户名、密码。这个dll在调用 legacy 时可以得到它的窗口的句柄,这样就可以用传入的用户名和密码实现程序的自动登录了。 
我不懂vc,想请大家帮忙写个这样的dll文件,谢谢!!!

解决方案 »

  1.   

    如果java里是这样用:package x1.x2.x3;那么下面那个是vc写的框架:#include "jni.h"
    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");