10 messages in net.java.dev.jna.usersRe: [jna-users] Callback doesn't work...
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:Re: [jna-users] Callback doesn't work at all.Actions...
From:bao bao (btb8@gmail.com)
Date:Jun 15, 2009 4:43:25 am
List:net.java.dev.jna.users

in fact i have extracted some code from my project. but i really don't how to use callback in JNA. Can you modify my code or give me an example? Thanks, sir. Regards

On Mon, Jun 15, 2009 at 6:55 PM, Timothy Wall <twal@dev.java.net>wrote:

On Jun 14, 2009, at 11:17 PM, bao bao wrote:

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?

Why would you expect your callback to be called? When would you expect it to be called?