我正在做一个jni调用c#,先是一个cpp调用c#,再用jni调那个cpp,但运行就抛出一个异常,代码如下:
c#:
using System;
public class Class1
{public Class1(){};
public void Display(){Console.WriteLine("Hello from c# console");}}
cpp:
#using <mscorlib.dll>
#using "Class1.netmodule"
#using namespace System;
__gc class HelloWorldC {
public:
Class1 __gc *t;
HelloWorldC() {
t = new Class1();
}
void method() {
t -> Display();
}};
jni:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
#include <windows.h>
#include "HelloWorld.cpp"
#using "helloWorld.dll"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{   printf("Helloaa world!\n");
    HelloWorldC* t = new HelloWorldC();
    t->method();
    return;}
java:
class HelloWorld {
    public native void displayHelloWorld();
    static {
     System.loadLibrary("hello");
    }
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }}

解决方案 »

  1.   

    异常如下:
    An unexpected exception has been detected in native code outside the VM.
    Unexpected Signal : unknown exception code occurred at PC=0x7C59BBF3
    Function=RaiseException+0x56
    Library=C:\WINNT\system32\KERNEL32.DLLCurrent Java thread:
    at HelloWorld.displayHelloWorld(Native Method)
    at HelloWorld.main(HelloWorld.java:10)Dynamic libraries:
    0x00400000 - 0x00406000  C:\j2sdk1.4.1_01\bin\javaw.exe
    0x77F80000 - 0x77FFD000  C:\WINNT\system32\ntdll.dll
    0x7C2D0000 - 0x7C332000  C:\WINNT\system32\ADVAPI32.dll
    0x7C570000 - 0x7C623000  C:\WINNT\system32\KERNEL32.DLL
    0x77D30000 - 0x77DA1000  C:\WINNT\system32\RPCRT4.DLL
    0x77E10000 - 0x77E6F000  C:\WINNT\system32\USER32.dll
    0x77F40000 - 0x77F7B000  C:\WINNT\system32\GDI32.dll
    0x78000000 - 0x78045000  C:\WINNT\system32\MSVCRT.dll
    0x75E60000 - 0x75E7A000  C:\WINNT\system32\IMM32.DLL
    0x6CA60000 - 0x6CA68000  C:\WINNT\system32\LPK.DLL
    0x66650000 - 0x666A4000  C:\WINNT\system32\USP10.dll
    0x6D330000 - 0x6D45A000  C:\j2sdk1.4.1_01\jre\bin\client\jvm.dll
    0x77570000 - 0x775A0000  C:\WINNT\system32\WINMM.dll
    0x6D1D0000 - 0x6D1D7000  C:\j2sdk1.4.1_01\jre\bin\hpi.dll
    0x6D300000 - 0x6D30D000  C:\j2sdk1.4.1_01\jre\bin\verify.dll
    0x6D210000 - 0x6D229000  C:\j2sdk1.4.1_01\jre\bin\java.dll
    0x6D320000 - 0x6D32D000  C:\j2sdk1.4.1_01\jre\bin\zip.dll
    0x10000000 - 0x10009000  C:\WINNT\system32\hello.dll
    0x7C370000 - 0x7C40A000  C:\WINNT\system32\MSVCR80.dll
    0x7C4C0000 - 0x7C53E000  C:\WINNT\system32\msvcm80.dll
    0x77A50000 - 0x77B3F000  C:\WINNT\system32\ole32.dll
    0x78800000 - 0x78840000  C:\WINNT\system32\mscoree.dll
    0x70A70000 - 0x70AD6000  C:\WINNT\system32\SHLWAPI.dll
    0x796C0000 - 0x79C02000  C:\WINNT\Microsoft.NET\Framework\v2.0.50512\mscorwks.dll
    0x788B0000 - 0x7932E000  C:\WINNT\assembly\NativeImages_v2.0.50512_32\mscorlib\96abf055209fb5369c4e866a0ae40d6f\mscorlib.ni.dll
    0x782F0000 - 0x78535000  C:\WINNT\system32\shell32.dll
    0x71710000 - 0x71794000  C:\WINNT\system32\COMCTL32.dll
    0x78850000 - 0x788A2000  C:\WINNT\Microsoft.NET\Framework\v2.0.50512\mscorjit.dll
    0x77920000 - 0x77943000  C:\WINNT\system32\imagehlp.dll
    0x72A00000 - 0x72A2D000  C:\WINNT\system32\DBGHELP.dll
    0x690A0000 - 0x690AB000  C:\WINNT\system32\PSAPI.DLL