java代码如下:
public   class   NativeTest{
      public String result="";
      public   static   void   main(String[]   args){
          System.out.println("hello");
      }
      
      public  static String init(String[]   args){
          System.out.println(args.length);
           System.out.println(args[0]);
           return "成功";
      }        
  }
c++代码如下:#include "stdafx.h"
#include <jni.h> 
#include <stdio.h>   
#include <stdlib.h>
#include <windows.h>
#include "string.h"   
 
#define JNI_VERSION_1_4 0x00010004 
#pragma comment (lib,"jvm.lib") 
typedef jint (JNICALL *JNICreatePROC)(JavaVM **, void **, void *);char* jstringToWindows( JNIEnv *env, jstring jstr )
{
int length = (env)->GetStringLength(jstr );
const jchar* jcstr = (env)->GetStringChars(jstr, 0 );
char* rtn = (char*)malloc( length*2+1 );
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL );
if( size <= 0 )
return NULL;
(env)->ReleaseStringChars(jstr, jcstr );
rtn[size] = 0;
return rtn;
} jstring WindowsTojstring( JNIEnv* env, char* str )
{
jstring rtn = 0;
int slen = strlen(str);
unsigned short* buffer = 0;
if( slen == 0 )
rtn = env->NewStringUTF(str); 
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
buffer =(unsigned short*) malloc( length*2 + 1 );
if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
rtn = env->NewString((jchar*)buffer, length );
}
if( buffer )
free( buffer );
return rtn;
}
int main(){JavaVM *jvm; 
JNIEnv *env; 
JavaVMInitArgs vm_args; 
JavaVMOption options[3]; 
vm_args.version=JNI_VERSION_1_4; options[0].optionString = "-Djava.compiler=NONE"; 
options[1].optionString   =   "-Djava.class.path=."; 
options[2].optionString = " "; 
vm_args.nOptions =3; 
vm_args.options = options; 
vm_args.ignoreUnrecognized = JNI_TRUE; 
//------------------------------加载jvm: 
HINSTANCE jvmDll = LoadLibrary("C:\\Program Files\\Java\\jdk1.6.0_03\\jre\\bin\\client\\jvm.dll");
if (jvmDll == NULL) printf("加载JVM动态库错误%l", ::GetLastError()); 
//查找JNI_CreateJavaVM过程。 
JNICreatePROC jvmCreateProc = (JNICreatePROC)GetProcAddress(jvmDll, "JNI_CreateJavaVM"); 
if (jvmCreateProc == NULL) 

FreeLibrary(jvmDll); 
printf("查找JNI_CreateJavaVM过程错误%l", ::GetLastError()); 

//创建JVM: int res = (jvmCreateProc)(&jvm, (void **)&env, &vm_args); 
if (res < 0 || jvm == NULL || env == NULL) 

FreeLibrary(jvmDll); 
printf( "创建JVM发生错误"); 
}  
jclass   mainClass   =   env->FindClass("NativeTest"); 
 
jmethodID   method   =   env->GetStaticMethodID(mainClass,"init","([Ljava/lang/String;)V");
jclass   stringClass   =   env->FindClass("java/lang/String");   
jobjectArray   args   =   env->NewObjectArray(1,stringClass,NULL);
env->SetObjectArrayElement(args,0,WindowsTojstring(env,"今天")); 
env->CallStaticObjectMethod(mainClass,method,args); //运行到这里就出错, 
FreeLibrary(jvmDll); 
return 0;

int init(const char * path){
return 0;
}
每次运行到env->CallStaticObjectMethod(mainClass,method,args);就出错,如果改为:
jmethodID   method   =   env->GetStaticMethodID(mainClass,"main","([Ljava/lang/String;)V");就没错请叫高手救急啊!