Și, de asemenea:
- Java Native Interface - Java interacțiune cu codul nativ.
- Creați o bibliotecă DLL care utilizează AIMP Remote API.
- Crearea unui modul pentru OwnLang.
- Interacțiunea cu API-ul VK.
Generarea unui fișier antet pentru C
Pentru a interacționa Java cu C, trebuie să determinați semnătura metodelor native și aranjarea clasei. Să presupunem că clasa pentru interacțiunea cu biblioteca Dll va avea numele AIMP, va fi în pachetul aimpremote și va avea metoda curentăTrack, care returnează o matrice. Noi scriem o astfel de clasă.
clasa publica finala AIMP # 123;
String public static nativ # 91; # 93; currentTrack # 40; # 41; ;
Compilați AIMP.java
javac aimpremote \ AIMP.java
Și utilizați utilitarul pentru a crea fișiere header header javah
javah aimpremote.AIMP
Ca rezultat, obținem fișierul aimpremote_AIMP.h cu următorul conținut:
/ * NU EDITA ACEST FIȘIERE - este generat de * /
Scrierea unei Biblioteci Dll
Creați un nou proiect Win32 numit LibAIMPRemote.


Adăugați fișiere antet: obiectivele generate și AmiP.h și apiRemote.h generate din AIMP SDK (puteți descărca de pe site-ul oficial).

Rămâne în setările proiectului să creeze o configurație pentru a compila versiunea pe 64 de biți a bibliotecii și să conecteze fișierele antet din JDK.


Acum implementăm funcția curentăTrack. Creați o serie de trei elemente (artist, titlu, album) și completați-le cu date din MemoryMappedFile.
#define WRITE_TO_STRING_ARRAY (i, x) \
memcpy (charBuffer, pBuff, (x) * 2); \
env-> SetObjectArrayElement (info, (i), env-> NewString (charBuffer, (x)));
JNIEXPORT jobjectArray JNICALL Java_aimpremote_AIMP_currentTrack
# 40; JNIEnv * env, jclass jobj # 41; # 123;
HANDLE hAIMP = OpenFileMapping # 40; FILE_MAP_READ, falsă. AIMPRemoteAccessClass # 41; ;
dacă # 40; hAIMP # 41; # 123;
jobjectArray info = env -> NewObjectArray # 40; 3. env -> FindClass # 40; "java / lang / String" # 41;. 0 # 41; ;
PAIMPRemoteFileInfo aimpFileInfo = # 40; PAIMPRemoteFileInfo # 41;
MapViewOfFile # 40; hAIMP, FILE_MAP_READ, 0. 0. AIMPRemoteAccessMapFileSize # 41; ;
dacă # 40; aimpFileInfo # 41; # 123;
LPWSTR pBuff = # 40; LPWSTR # 41; # 40; # 40; PBYTE # 41; aimpFileInfo + sizeof # 40; TAIMPRemoteFileInfo # 41; # 41; ;
jchar charBuffer # 91; 256 # 93; ;
WRITE_TO_STRING_ARRAY # 40; 2. aimpFileInfo -> AlbumLength # 41; ;
WRITE_TO_STRING_ARRAY # 40; 0. aimpFileInfo -> ArtistLength # 41; ;
pBuff + = aimpFileInfo -> DateLength
+ aimpFileInfo -> FileNameLength
+ aimpFileInfo -> GenulLength;
WRITE_TO_STRING_ARRAY # 40; 1. aimpFileInfo -> TitleLength # 41; ;