Declaration de bibliothèque LPSOLVE

canardav77 Messages postés 7 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 22 février 2013 - 17 avril 2012 à 09:00
canardav77 Messages postés 7 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 22 février 2013 - 18 avril 2012 à 13:31
Bonjour à tous et j'espère que vous arriverez à me venir en aide ... C'est la première fois que je poste sur un forum et j'espère que je me suis placé dans le bon thème et au bon endroit...

Voici mon problème : Pour résoudre un problème d'optimisation combinatoire je fais appel à la librairie lpsolve depuis XL. Mon problème c'est que je n'arrive pas à donner un chemin relatif ( utilisable par tous les ordinateurs ) à ma librairie :

Voici le code de déclaration:

Private Declare Sub lpslink Lib "E:\datas\lpslink57.dll" _
(ByRef direction As Long, ByRef xCount As Long, ByRef objOut As Double, _
ByRef constCount As Long, ByRef constVec As Double, ByRef intCount As Long, _
ByRef intVec As Long, ByRef binCount As Long, ByRef binVec As Long, _
ByRef numBinSolns As Long, ByRef objVal As Double, ByRef solution As Double, _
ByRef presolve As Long, ByRef computeSens As Long, ByRef sensFrom As Double, _
ByRef sensTo As Double, ByRef duals As Double, ByRef dualsFrom As Double, _
ByRef dualsTo As Double, ByRef scalex As Long, ByRef useDense As Long, _
ByRef denseCol As Long, ByRef denseVal As Double, ByRef denseConstNrow As Long, ByRef denseCtr As Long, _
ByRef useRW As Long, ByRef useRWFile As String, ByRef status As Long)

Qui est un Path relatif . Avec cette déclaration tout fonctionne ( il me trouve la bibli)
Cependant j'aimerai plutot utiulisé une déclaration du type ( j'ai enlevé tous les paramètres de la fonction pour lisibilité )

Private Declare Sub lpslink Lib "datas\lpslink57.dll" ( si le dll est dans le dossier datas )

ou encore plus simplement :

Private Declare Sub lpslink Lib "lpslink57.dll" ( si mon fichier .dll est dans le path de mon Wbook)

ce qui selon moi semble tout à fait faisable mais ne fonctionne PAS : message d'erreur : Lp_Solve link failed error 53: fichier introuvable

J'ai déjà passé plus de 3 heures à essayer de trouver une solution mais sans succès.
PS: J'aimerai si possible evité de mettre la library dans le dossier de windows ( pour des raisons de droits d'admin )

Merci beaucoup par avance

David Lanchos

7 réponses

Utilisateur anonyme
17 avril 2012 à 19:24
Bonjour,

Je ne suis pas un spécialiste de l'API, mais il me vient l'idée de deux autres voies. Comme je n'ai pas cette bibliothèque chez-moi, et que j'ai abandonné VB6 depuis longtemps, je ne peux pas te donner de procédure exacte, mais bon je me lance.

1) Le chemin d'accès de la bibliothèque en question se trouverait-il à quelque part dans le registre ?

2) Cela pourrait être long, mais peut-être avec WMI ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 avril 2012 à 20:06
Bonjour,
réponse simple :
lpslink57.dll n'est pas une librairie de l'Api de Windows.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 avril 2012 à 20:53
Je ferais à ta place des tentatives à l'aide de la fonction LoadLibrary de l'Api de Windows (en déclaration tardive, donc). Et j'installerais cette librairie dans un répertoire que je définirais dans l'utilisation de LoadLibrary (en conjonction avec les fonctions GetProcAddress, CallWindowProc, et FreeLibrary de l'Api de Windows)
Mais ignorant tout du type de ta fonction et de la librairie qui l'abrite, je ne peux en dire plus valablement. Tu devrais interroger son créateur.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
canardav77 Messages postés 7 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 22 février 2013
17 avril 2012 à 22:24
Bonjour et encore merci pour vos réponse : voici quelques précisions :

ma library lpslink57.dll se trouve bien dans le même dossier que ma macro excel, je l'ai téléchargée car effectivement pas présente de base sur windows.

Sinon à propos de WMI j'ai du mal à comprendre.

Et j'installerais cette librairie dans un répertoire que je définirais dans l'utilisation de LoadLibrary (en conjonction avec les fonctions GetProcAddress, CallWindowProc, et FreeLibrary de l'Api de Windows)

J'ai vraiment du mal à saisir ( peut etre parce que ça fait juste 1 mois que je fais du vb )?

Ma librairie fait le lien entre excel et un solver de problèmes linéaires. Sinon peut etre que ça pourra vous aider mais j'ai une piste avec SetDllDirectory mais je n'arrive pas à utiliser la fonction donc si vous avez des connaissances à ce sujet , ça serait vraiment sympa de les partager :)

Merci encore


David Lanchos
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
18 avril 2012 à 03:06
Bonjour,

Concernant WMI c'est l'abréviation de Windows Management Instrumentation, une collection de bibliothèques utilisables à partir de certains logiciels de programmation pour réaliser plusieurs type d'action avec Windows.

Ceci dit, puisque cette bibliothèque est une macro-comnplémentaire d'Excel, il me semble important de demander une précision. Travailles-tu avec le VB d'Excel, alors il faudrait plutôt parler de VBA, ou avec le VB6 complet ?

Parce que si tu utilises VBA, tu pourrais explorer une autre voie; soit utiliser la bibliothèque "Extensibility" de VBA et sa méthode AdfromGUID.

Tu peux avoir quelques exemples sur cette page; les quelques macros qui parlent des références.
0
canardav77 Messages postés 7 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 22 février 2013
18 avril 2012 à 13:28
J'ai finalement réussi c'était pas très compliqué en fait il fallait juste savoir utiliser la fonction SetDllDirectory

Encore merci à tous pour les réponses et , vu que mon stage de ne fait que commencer, je vais surement revenir vous solliciter très prochainement :D

Cordialement,


David Lanchos
0
canardav77 Messages postés 7 Date d'inscription mardi 17 avril 2012 Statut Membre Dernière intervention 22 février 2013
18 avril 2012 à 13:31
J'ai finalement réussi c'était pas très compliqué en fait il fallait juste savoir utiliser la fonction SetDllDirectory que je connaissais pas vraiment

il fallait déclarer : Public Declare Function SetDllDirectoryA Lib "kernel32" (ByVal lpPathName As String) As Boolean

et ensuite dans le sub :

SetDllDirectoryA (ThisWorkbook.Path & "\datas")

Encore merci à tous pour les réponses et , vu que mon stage de ne fait que commencer, je vais surement revenir vous solliciter très prochainement :D

Cordialement,



David Lanchos
0
Rejoignez-nous