Ș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.
![Difuzare redată în muzică aimp în starea vkontakte (vk api) Difuzarea poate fi redată în muzica aimp în starea vkontakte](https://images-on-off.com/images/196/translyatsiyaproigrivaemoyvaimpmuzikivst-b0620426.png)
![Difuzare redată în muzică aimp în starea vkontakte (interfață nativă java) Difuzarea poate fi redată în muzica aimp în starea vkontakte](https://images-on-off.com/images/196/translyatsiyaproigrivaemoyvaimpmuzikivst-06ee0f9f.png)
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).
![Difuzarea poate fi redată în muzică aimp în starea vkontakte (ownlang) Difuzarea poate fi redată în muzica aimp în starea vkontakte](https://images-on-off.com/images/196/translyatsiyaproigrivaemoyvaimpmuzikivst-3fb2d256.png)
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.
![Difuzare redată în muzica aimp în starea vkontakte (aimp) Difuzarea poate fi redată în muzica aimp în starea vkontakte](https://images-on-off.com/images/196/translyatsiyaproigrivaemoyvaimpmuzikivst-846d88d7.png)
![Difuzare redată în muzica aimp în starea vkontakte (aimp) Difuzarea poate fi redată în muzica aimp în starea vkontakte](https://images-on-off.com/images/196/translyatsiyaproigrivaemoyvaimpmuzikivst-3ba84427.png)
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; ;