Charger dynamiquement une dll [Résolu]

rocknbananas 16 Messages postés mardi 13 septembre 2005Date d'inscription 16 novembre 2006 Dernière intervention - 14 nov. 2006 à 12:56 - Dernière réponse : rocknbananas 16 Messages postés mardi 13 septembre 2005Date d'inscription 16 novembre 2006 Dernière intervention
- 16 nov. 2006 à 18:06
Bonjour,

Dans mon projet, j'ai besoin de charger une dll. J'ai fait le test en utilisant DllImpor, et ca marche sans problème. Mais comme je ne sais pas à l'avance où sera installé mon projet, et que DllImport fonctionne avec des chemins en dur, j'ai décidé d'appeler LoadLibrary depuis Kernel32.dll, et d'utiliserer GetProcAddress, ainsi que Marshal.GetDelegateForFunctionPointer.

Je passe à LoadLibrary le même chemin que celui prédemment utilisé, mais LoadLibrary me retourne tout le temps un HModule égal à IntPtr.Zero . Sauf sur un appel au milieu de tout. Sachant que tout les appels sont faits de la même manière, et que l'appel qui fonctionne une fois échoue pour toute ses autres occurences. De plus je libére bien la dll chargée ...

Je ne comprend vraiment pas ce qui ne marche pas.

Merci par avance de votre aide.

Yann.
Afficher la suite 

3 réponses

Répondre au sujet
rocknbananas 16 Messages postés mardi 13 septembre 2005Date d'inscription 16 novembre 2006 Dernière intervention - 14 nov. 2006 à 14:16
+3
Utile
Finalement j'ai trouvé la solution. C'est tellement simple que j'ai presque honte de n'y avoir pas pensé avant . Par contre ca n'explique pas les problèmes décrits dans mon message précédent.

En fait j'ai juste besoin de copier mes dll dans le répertoire de mon application (solution largement suffisante pour mon projet), et dans le code d'utiliser DllImport tout simplement :
[DllImport("MaDll.dll", CharSet = CharSet.Auto)]
private static extern bool MaMethode();

vala.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de rocknbananas
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 15 nov. 2006 à 09:37
0
Utile
Salut, pour GetDelegateForFunctionPointer, regardes le code de Coq  :

http://www.csharpfr.com/codes/PINVOKE-DYNAMIQUE_36080.aspx
Commenter la réponse de Lutinore
rocknbananas 16 Messages postés mardi 13 septembre 2005Date d'inscription 16 novembre 2006 Dernière intervention - 16 nov. 2006 à 18:06
0
Utile
Merci lutinore. Je me suis basé là dessus à l'origine. Mais le problème que j'avais se produisait sur le LoadLibrary (qui échouait mais pas tout le temps), avant d'appeler GetDelegateForFunctionPointer.

@+
Commenter la réponse de rocknbananas

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.