10 messages in net.java.dev.jna.users[jna-users] Callback doesn't work at ...
FromSent OnAttachments
bao baoJun 14, 2009 8:16 pm 
Timothy WallJun 15, 2009 3:55 am 
bao baoJun 15, 2009 4:43 am 
Timothy WallJun 15, 2009 5:16 am 
bao baoJun 15, 2009 6:35 pm 
Timothy WallJun 16, 2009 3:27 am 
bao baoJun 16, 2009 7:15 am 
bao baoJun 16, 2009 8:14 pm 
Timothy WallJun 17, 2009 3:43 am 
bao baoJun 21, 2009 5:46 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:[jna-users] Callback doesn't work at all.Actions...
From:bao bao (btb8@gmail.com)
Date:Jun 14, 2009 8:16:47 pm
List:net.java.dev.jna.users

Here is my code: // SimpleDll.cpp : Defines the entry point for the DLL application. //

#include "stdafx.h" #include "stdio.h" #include <iostream> #include <cstdlib>

using namespace std;

#ifdef DLLDIR_EX #define DLLDIR __declspec(dllexport) // export DLL information

#else #define DLLDIR __declspec(dllimport) // import DLL information

#endif

// Original C declarations typedef void (*FUNCTION)(); extern "C" __declspec(dllexport) int helloexit(FUNCTION);

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }

void FinalFunction(void) { cout<<"Final function called";

}

extern "C" __declspec(dllexport) int helloexit(FUNCTION c) { atexit(FinalFunction); return 123; }

import com.sun.jna.Callback; import com.sun.jna.Library; import com.sun.jna.Native;

public interface ISimpleDll extends Library { ISimpleDll INSTANCE = (ISimpleDll) Native.loadLibrary("SimpleDll", ISimpleDll.class);

public static interface FUNCTION extends Callback { public void callback(); }

int helloexit(FUNCTION function);

}

public class SimpleDll {

ISimpleDll lib = ISimpleDll.INSTANCE;

/** * */ public SimpleDll() { new Thread() { public void run() { int t = lib.helloexit(new FUNCTION() { public void callback() { System.out.println("exit was called"); } }); System.out.println(t); } }.start(); }

/** * @param args */ public static void main(String[] args) { new SimpleDll(); }

The ouput is: 123 Final function called Now, the callback method never invoked, what's wrong with my code?