// Unmanaged.h:
class UnmanagedClass;
typedef void (UnmanagedClass::*PointerToMember)(void);
class UnmanagedClass
{
public:
void Member();
PointerToMember __thiscall GetPointerToMember();
};
// Unmanaged.cpp:
// compile with "cl /c /MD /EHa Unmanaged.cpp"
#include
#include "Unmanaged.h"
PointerToMember __thiscall UnmanagedClass::GetPointerToMember()
{
std::cout << __FUNCSIG__ << std::endl;
return &UnmanagedClass::Member;
}
void UnmanagedClass::Member()
{
std::cout << __FUNCSIG__ << std::endl;
}
// Managed.cpp:
// build with "cl /clr Managed.cpp /link Unmanaged.obj"
#include "Unmanaged.h"
int main()
{
UnmanagedClass myObject;
PointerToMember myPointerToMember = myObject.GetPointerToMember();
(myObject.*myPointerToMember)();
}
Most common reasons for crashes.
1. User JNI code (most likely)
2. Third party JNI code.
3. VM (least likely)
//Test1.java
class Test1
{
static
{
System.loadLibrary("TestDll");
}
public static void main(String ar[])
{
System.out.println("Hello world from Java");
Test1 t=new Test1();
t.inDll();
}
public native void inDll();
}Go to Project/Settings, on C/C++ tab, go to Project option, insert following lines at the end:/I ":\\include "
/I ":\\include\win32" Now compile and generate your DLL, put newly created DLL in system32 directory and then run your class file. It should work properly. If you receive an error like UnsatisfiedLinkError, then recheck your procedure.
No comments:
Post a Comment