Olá Pessoal!!
Este é o código da minha DLL em C++://dllmain.cpp
#include "unidll.h"
#include <windows.h>
#include <winbase.h>
bool setDateTime(int year, int month, int day, int hour, int minute, int second) {
SYSTEMTIME time;
time.wYear = year;
time.wMonth = month;
time.wDay = day;
time.wHour = hour + 2;
time.wMinute= minute;
time.wSecond = second;
return SetSystemTime(&time);
}
//unidll.h
#ifndef _UNIDLL_H_
#define _UNIDLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else
# define DLLIMPORT __declspec (dllimport)
#endif
class DLLIMPORT DllClass {
public:
bool setDateTime(int year, int month, int day, int hour, int minute, int second);
private:
};
#endif
import com.sun.jna.Library;
/**
*
* @author eliangela
*/
public interface MySharedLibrary extends Library {
public boolean setDateTime(int year, int month, int day, int hour,
int minute, int second);
}
import com.sun.jna.Native;
/**
*
* @author Eliangela
*/
public class AcessaDLL {
public boolean setDateTime(int year, int month, int day, int hour,
int minute, int second) {
MySharedLibrary lib = (MySharedLibrary) Native.loadLibrary("C:/Users/eliangela/Desktop/testeDll/uni-dll",
MySharedLibrary.class);
return lib.setDateTime(year, month, day, hour, minute, second);
}
public static void main(String[] args) {
AcessaDLL dll = new AcessaDLL();
dll.setDateTime(2008, 6, 1, 1, 0, 0);
}
}
Eu compilei o meu código em C++ pelo Dev-cpp da Borland e gerei minha DLL.
esse código da DLL está funcionando, porque eu já testei num executável, mas não funciona com o JNA.
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'setDateTime': Não foi possível encontrar o procedimento especificado.
at com.sun.jna.Function.<init>(Function.java:128)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:299)
at com.sun.jna.Library$Handler.invoke(Library.java:199)
at $Proxy0.setDateTime(Unknown Source)
at br.com.unimake.nativo.AcessaDLL.setDateTime(AcessaDLL.java:15)
at br.com.unimake.nativo.AcessaDLL.main(AcessaDLL.java:20)
Java Result: 1
O que estou fazendo de errado?
Obrigada!
Normalmente o Brasil está 3 horas atrasado em relação ao horário GMT, mas no horário de verão essa diferença diminui para 2. Então, acho que seria interessante alterar sua DLL para receber exatamente quantas horas é necessário deslocar em relação ao GMT.