Il y a 38 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

comment utiliser une dll depuis VBA (excel) ?

 
n°49062
chokko
Posté le 21-09-2006 à 23:35:58  profilanswer
 

Bonjour à tous,
 
tout d'abord je tiens à préciser que mes connaissances en programmation sont assez limitées. Je connais juste le B.A.BA pour réaliser quelques macros simples sous VBA excel. C'est pourquoi, j'ai besoin de votre aide car je cale sur le problème suivant :
je dispose d'un dll qui s'appelle CRKServer.dll

Code :
  1. The CRKServer.dll is a Common Object Model (COM) 32-bit dynamic link library for Microsoft Windows 95 / 98 and Microsoft Windows NT / 2000.


Ce dll permet, grâce à une fonction qui s'appelle CRating, de déterminer les caractéristiques d'un compresseur pour des conditions de fonctionnement données.

Code :
  1. CRating Calculates performance data for a particular compressor at the given conditions. Output are multiple arrays.


Code :
  1. CRating
  2. [in]   BSTR      compModelName
  3. [in]   long      refrigCode
  4. [in]   long      powSupCode
  5. [in]   VARIANT_BOOL    tempMidpoint
  6. [in]   VARIANT_BOOL    suctionSGR
  7. [in]   double     suctionRetGasTemp
  8. [in]   double     subcooling
  9. [in, out]  SAFEARRAY(VARIANT_BOOL)*  requiredOutput
  10. [in, out]  SAFEARRAY(double)*   capacity
  11. [in, out]  SAFEARRAY(double)*   power
  12. [in, out]  SAFEARRAY(double)*   current
  13. [in, out]  SAFEARRAY(double)*   massFlow
  14. [in, out]  SAFEARRAY(double)*   heatReject
  15. [in, out]  SAFEARRAY(long)*    errorCode


La documentation me donne l'exemple suivant

Code :
  1. Select “>Project>References…”.
  2. Check CRKServer Library in list Available References.
  3. Click OK.
  4. Enter code according to the example code given below.
  5. Dim str_compModelName As String
  6. Dim lng_refrigCode, lng_powSupCode As Long
  7. Dim bln_tempMidpoint, bln_suctionSGR As Boolean
  8. Dim dbl_suctionRetGasTemp, dbl_subcooling As Double
  9. Dim bln_requiredOutputArray(5) As Boolean
  10. Dim dbl_capacityArray(10, 7) As Double
  11. Dim dbl_powerArray(10, 7) As Double
  12. Dim dbl_currentArray(10, 7) As Double
  13. Dim dbl_massFlowArray(10, 7) As Double
  14. Dim dbl_heatRejectArray(10, 7) As Double
  15. Dim lng_errorArray(10, 7) As Long
  16. […]
  17. Private Sub cmdCalculate_Click()
  18. Dim myCOMObject As Object
  19. Set myCOMObject = New CRate
  20. Call myCOMObject.CRating(str_compModelName, _
  21.                          lng_refrigCode, _
  22.                          lng_powSupCode, _
  23.                          bln_tempMidpoint, _
  24.                          bln_suctionSGR, _
  25.                          dbl_suctionRetGasTemp, _
  26.                          dbl_subcooling, _
  27.                          bln_requiredOutputArray(), _
  28.                          dbl_capacityArray(), _
  29.                          dbl_powerArray(), _
  30.                          dbl_currentArray(), _
  31.                          dbl_massFlowArray(), _
  32.                          dbl_heatRejectArray(), _
  33.                          lng_errorArray())
  34. End Sub


 
pourriez-vous m'expliquer comment completer/modifier l'exemple donné ci-dessus pour que ça fonctionne ?
 
 
Merci d'avance.


Message édité par chokko le 21-09-2006 à 23:38:33
n°49063
LostSoul
Manieur de hache
Posté le 22-09-2006 à 00:06:56  profilanswer
 

Je vois pas bien quelle est ta question
 
si c'est un problème de dll -> regsvr32 crkserver.dll puis tu devrais pouvoir la réutiliser dans VB ...

n°49064
chokko
Posté le 22-09-2006 à 00:28:46  profilanswer
 

pardon, j'aurais du insister sur le fait que je n'y connais rien.
Donc, j'ai bien exécuté la commande regsvr32 crkserver.dll comme tu l'as conseillé.  
Mais dans VBA, si je fais un copier coller de l'exemple tel quel, j'ai une erreur de compilation au niveau de la ligne Set myCOMObject = New CRate
 
Dim str_compModelName As String  
Dim lng_refrigCode, lng_powSupCode As Long  
Dim bln_tempMidpoint, bln_suctionSGR As Boolean
Dim dbl_suctionRetGasTemp, dbl_subcooling As Double
Dim bln_requiredOutputArray(5) As Boolean
Dim dbl_capacityArray(10, 7) As Double
Dim dbl_powerArray(10, 7) As Double
Dim dbl_currentArray(10, 7) As Double
Dim dbl_massFlowArray(10, 7) As Double
Dim dbl_heatRejectArray(10, 7) As Double
Dim lng_errorArray(10, 7) As Long
 
Private Sub cmdCalculate_Click()
 
Dim myCOMObject As Object
Set myCOMObject = New CRate
Call myCOMObject.CRating(str_compModelName, _
                         lng_refrigCode, _
                         lng_powSupCode, _
                         bln_tempMidpoint, _
                         bln_suctionSGR, _
                         dbl_suctionRetGasTemp, _
                         dbl_subcooling, _
                         bln_requiredOutputArray(), _
                         dbl_capacityArray(), _
                         dbl_powerArray(), _
                         dbl_currentArray(), _
                         dbl_massFlowArray(), _
                         dbl_heatRejectArray(), _
                         lng_errorArray())
 
End Sub
 
Dons les questions que je me pose sont :
1) Faut-il ajouter quelque chose en plus ?
2) Est-ce que le code donné est correct ?
 
En gros, j'aimerais avoir un code qui fonctionne correctement mais comme je n'y connais vraiment pas grand chose, je ne sais pas ce qu'il faut changer, ajouter, modifier.
 
Merci d'avance pour votre aide  :jap:  
 
 

n°49065
LostSoul
Manieur de hache
Posté le 22-09-2006 à 07:19:53  profilanswer
 

Ca fait des lustres que j'ai plus bossé en VB6 y'a certainement une chose à faire pour que VB voie le fameux composant en question mais je sais plus du tout comment ...

n°49066
Harkonnen
Posté le 22-09-2006 à 07:51:20  profilanswer
 

Ce qu'il faut faire est indiqué dans le bout de documentation qu'il a posté : il faut ajouter la réference à la DLL en question pour la rendre visible depuis VB

Citation :


Select “>Project>References…”.
Check CRKServer Library in list Available References.
Click OK.

n°49068
Gwalchmei
Aussi en versions 1/2 & 1/3
Posté le 22-09-2006 à 08:32:45  profilanswer
 

+1  :jap:


---------------
La sagesse commence où finit la crainte de Dieu. (André Gide)
AKA : Super Laïque
Computermsa-Shop Magasin belge de qualité !
n°49078
Harkonnen
Posté le 22-09-2006 à 10:10:23  profilanswer
 

Petite rectification : l'auteur du topic parle de VBA Excel et non de VB6. La solution est toujours la même (ajouter la référence), mais le chemin pour y parvenir est différent : ouvrir l'éditeur VBA d'Excel et ajouter la référence via le menu Outils/Références.


Aller à :
Ajouter une réponse