Maison  >  Article  >  tutoriels informatiques  >  Méthode d'implémentation VC pour écrire une DLL appelée par JAVA

Méthode d'implémentation VC pour écrire une DLL appelée par JAVA

PHPz
PHPzavant
2024-01-22 16:57:16870parcourir

Méthode dimplémentation VC pour écrire une DLL appelée par JAVA

Comment utiliser VC pour écrire une DLL que JAVA doit appeler

}(2) Compilez le fichier java, puis compilez et générez le fichier d'en-tête (pour une utilisation vc) javac GB2PY.java //Compilez et générez la classe (3) Créez le dossier com/bw/gb2py dans le dossier actuel, et ajoutez GB2PY.class Mettez-le dans le dossier, revenez au dossier actuel et appelez la commande javah pour générer le fichier d'en-tête. javah com.bw.gb2py.GB2PY //Générer un fichier d'en-tête, le nom du fichier est com_bw_gb2py_GB2PY.h Notez que le contenu du fichier d'en-tête ne peut pas être modifié, sinon la DLL générée ne peut pas être utilisée (4) Créez une nouvelle DLL Win32. projet nommé GB2PY dans VC, copiez com_bw_gb2py_GB2PY.h dans le répertoire du projet et ajoutez-le au projet. Copiez ensuite %JAVA_HOME%/include/jni.h et %JAVA_HOME%/include/win32/jni_md.h dans le répertoire du projet et ajoutez-le au projet. (5) Implémentez la méthode déclarée dans com_bw_gb2py_GB2PY.h : Java_com_bw_gb2py_GB2PY_GetPY. Faites attention à la conversion de la chaîne Java et du caractère en c. Les chaînes de Java sont codées en Unicode (double octet), tandis que char est codé sur un seul octet. int (*GetPY)(char* szGBString,PY &oPY);JNIEXPORT jstring JNICALL Java_com_bw_gb2py_GB2PY_GetPY

(JNIEnv * env, jclass, jstring name){static HMODULE hModle = LoadLibrary("PYconvert.dll" //Dll tierce

);

GetPY = (LPFUN)GetProcAddress(hModle,"GBToPY");int len;char charName[128];

char charPY[512];

len = env->GetStringLength(name) * 2 + 1; //Convertissez la longueur sur deux octets en longueur sur un octet, ajoutez 1 pour ajouter le terminateur

memset(charName, 0, len);

const wchar_t * w_buffer = env->GetStringChars(name, 0);

int wlen = wcslen(w_buffer);

len = WideCharToMultiByte(CP_ACP, 0, w_buffer, wcslen(w_buffer) + 1, charName, len, NULL, NULL);

env->ReleaseStringChars(name, w_buffer); //Le code ci-dessus copie le contenu du nom de la chaîne Java dans le tableau char charName... //Omettez certains codes de fonction et convertissez les caractères chinois en pinyin en appelant une DLL tierce. fonction, stockée dans le tableau charPY int slen = strlen(charPY);

jchar * buffer = nouveau jchar[slen];

len = MultiByteToWideChar(CP_ACP, 0, charPY, strlen(charPY), buffer, slen);

si (len > 0 & len

buffer[len] = 0; //Le code ci-dessus convertit la chaîne de type char en chaîne de type jchar jstring js = env->NewString(buffer, len);

delete [] buffer; return js;} (6) Compilez et générez un fichier dll, qui peut être appelé en java (vous devez utiliser la classe générée dans la deuxième étape) ! :)

Comment écrire un fichier DLL pour un fichier EXE écrit par VC et laisser cet EXE appeler la DLL

Vous voulez dire comment écrire une DLL ? , ou comment appeler la DLL que vous avez écrite ?

Comment écrire dll:vc++6.0 ? Lors de la création d'un nouveau projet, vous choisissez généralement l'une des options suivantes :

MFC AppWizard[dll] peut utiliser la bibliothèque de liens dynamiques du framework MFC

Fenêtre de la bibliothèque de liens dynamiques Win32Bibliothèque dynamique standard 32 bits

Sélectionnez ensuite le framework dont vous avez besoin, puis complétez, la dll de base est prête.

Si vous avez vs2003 et supérieur (vs2010 n'a pas été utilisé, donc je n'en parlerai pas), créez-en un nouveau

Il existe deux types couramment utilisés en ingénierie :

MFC -> MFC Dll

Win32->Tout->Sélectionnez l'option Dll dans la boîte de dialogue contextuelle

Les autres options dépendent de vos besoins. Ensuite, c'est fait et la DLL de base est prête.

Appelez la DLL que vous avez écrite : utilisez LoadLibrary("xxx.dll");

là où vous devez l'appeler

xxx.dll est la DLL que vous avez écrite, alors si vous l'avez écrite dans xxx.dll

Pour l'interface, vous pouvez utiliser la méthode suivante pour appeler la méthode dans la dll :

1. Incluez le fichier d'en-tête d'interface de la dll dans votre projet exe. Par exemple, la fonction d'interface est void FunName(int a);

2. typedef void(*Func)(int); //Définir l'interface

3. Utiliser là où c'est nécessaire :

........................

HMOUDLE hMyDll = LoadLibrary("xxx.dll");

if (hMyDll != NULL)

{

Func *pDllFun=(Func *)::GetProcAddress(hMyDll,"FunName");//FunName est la fonction d'interface dans votre Dll

if (pDllFun != NULL)

{

pDllFun(1); //Appeler la fonction dans Dll

}

}

4. Désinstallez la DLL lorsqu'elle n'est plus nécessaire. Bibliothèque gratuite (hMyDll);

///////////////////////////////////////////// /// /////

Votre Dll a-t-elle été générée dans le répertoire où se trouve l'exe ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer