大家好!有一个C#写的DLL,然后要用JAVA去调。我是使用JNI调C++(托管代码与非托管代码转换),C++再调C#我的Tomcat是直接解压就用的,Tomcat6.0.20我在MyEclipse 7.0中配置了这个Tomcat,然后我在MyEclips中启动这个Tomcat时,程序能够正常运行。但是我直接在外面用Startup启动Tomcat就出错了。在XP上打印返回的值是?????下面是我的代码片断:==========================================
C#代码    public class Class1
    {
        public long getLongNumber(long a)
        {
            return a + 1;
        }
    }====================================================C++代码JNIEXPORT jlong JNICALL Java_com_jni_JniClassTest_getLongNumber
  (JNIEnv *env, jobject o, jstring name)
{
__int64 num = 10;
Class1 ^c = gcnew Class1();
num = c->getLongNumber(10);
return num;
}====================================================JAVA代码public class JniClassTest { public native long getLongNumber(String name);
static {
System.loadLibrary("testjnireturn");
}
public String getValue() {
long num = getLongNumber("mike");
return String.valueOf(num);
}
}=====================================================我在Servlet里面调JniClassTest里的getValue(),显示到JSP=====================================================运行结果是这样的:在MyEclips里启动Tomcat,JSP页面上显示的是11
                  通过startup启动Tomcat,就出异常

这里的Tomcat是同一个Tomcat,这样两种方式运行Tomcat有什么区别吗?=====================================================当我只读C++的DLL不调C#的话是没有错误的!谢谢大家!

解决方案 »

  1.   

    代码应该没有问题,不知道你在外面启动tomcat的时候,dll是放在哪里的?是不是C#的dll没有找到呢?
      

  2.   


    #using "testjnicsdll.dll"
    using namespace testjnicsdll;C++里是这样写的,C#的DLL和C++的放在同一目录下,在JDK的BIN目录下。在写代码的时候把C#的DLL放在cpp的文件同一目录,放在其他地方不能通过编译。不知道这样有没有问题。郁闷的是我要是用MyEclipse启动Tomcat就不会出错!
      

  3.   


    我在Vista的环境下Tomcat就直接关闭了,XP的环境下JSP直接显示500错误,在Tomcat上打印出的调用返回结果是???????(这个是不是乱码?如果是乱码的话那么Vista为什么Tomcat直接关闭了),但是在MyEclipse里启动Tomcat就是没错的,问题在这!
      

  4.   


    你好,我在MyEclips里启动Tomcat就没有错误。
      

  5.   


    工具配置的当然不会报错了,我想问的是你在外部启动的.bat批处理文件的名字是什么
      

  6.   


    不好意思,我不太懂你的意思。我的情况是这样的:有一个C#写的DLL,我现在想用JAVA去调它,然后通过JNI->C++->Managed C++->C#的方式。
    1,我在MyEclips里启动Tomcat没有错误
    2,在外面用startup.bat启动tomcat就出错了(错误是在访问Servlet时调用DLL时发生),JAVA调DLL返回的值在Tomcat上打印是一串问号以上两种方式所用的Tomcat是同一个,只是启动的地方不同,为什么会有两种不同结果
      

  7.   

    在外部启动我记得不是stratup.bat这个文件的啊,好像是netstart开头的一个bat文件