Bonjour,
Excusez moi de cette question, mais j'en suis a la deuxième souris mise en pièce en 3 jours.... l'environnement est Mic.Vis.Bas. 2010 Express
Je déclare une fonction dans une DLL: Voici:
Private Declare Function swe_gauquelin_sector Lib "swedll32.dll" _
Alias "_swe_gauquelin_sector@52" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Integer, _
ByVal starname As String, _
ByVal iflag As Integer, _
ByVal imeth As Integer, _
ByRef geopos As Double, _ <--- THE problème ---<<
ByVal atpress As Double, _
ByVal attemp As Double, _
ByRef dgsect As Double, _
ByVal serr As String _
) As Integer
Mon geopos est un tableau contenant 3 'Double': longitude, latitude et hauteur d'observation. Soit. Il est décrit dans la doc comme:
'double *geopos, /* array of three doubles containing
' * geograph. long., lat., height of observer */
Mon tableau:
dim geopos(2) as Double
et, pour sur:
geopos(0) = -123.75, geopos(1)= 33.4 etc.
J'ai tenté aussi d'affecter à partir de geopos(1) après avoir déclaré:
Dim geopos(3) as Double.
J'appelle:
retvalint = swe_gauquelin_sector(tjd_ut, planet, "", iflag, 0, geopos(0), 1013.25, 10, dgsect, serr)
Et j'obtiens des erreurs de violation mémoire (AccessViolation) , PInvoke, déstabilisation de pile, etc.
J'ai tenté de le déclarer ByRef geopos() as double dans la déclaration de fonction pour changer en rajoutant les ()...
J'ai tenté un (... , 0, geopos, ...) dans l'appel
J'ai osé un geopos() dans l'appel
J'ai risqué d'utiliser un tableau transitoire local, puis retenté le global, puis tenté un VarPtrArray(le tableau) avec les variantes. Rien n'y fait...
soit il se plante a la compil en me disant qu'il ne peut convertir un tableau a 1 dimension en double, soit...
Alors que, si je lui envoie, selon le même processus, un appel avec ..., tableau(0), ... dans une autre fonction de la même DLL, fonction identique à l'affectation près ( ..., iflag, x(0), serr) ), tout est OK, je reçois les valeurs.
Dans ce cas-ci, la syntaxe est quasi identique mais je n'attend de réponse que dans mon dgsect.
Bref, les valeurs du tableau doivent être simplement lues, non modifiées. Et, lorsque la compil passe, l'appli semble perplexe un certain temps avec le petit anneau qui tourne, puis c'est le: VBHost.exe a cessé de fonctionné avec les détails:
Nom d’évènement de problème: APPCRASH ( Heu, CRASH, c'est pas bon...)
Nom de l’application: vbexpress.exe
Version de l’application: 10.0.40219.1
Horodatage de l’application: 4d5f2a6c
Nom du module par défaut: vbdebug.dll
Version du module par défaut: 10.0.40219.1
Horodateur du module par défaut: 4d5f2fc9
Code de l’exception: c0000005
Décalage de l’erreur: 0003d9ef
Version du système: 6.1.7601.2.1.0.768.3
Identificateur de paramètres régionaux: 2060
Informations supplémentaires sur le problème*: LCID: 1036
Je me sens stupide, je dois faire une erreur de débutant ou plutôt de sénile, l'appel est tellement trivial. Où me trompais-je? Je n'ai plus d'idée.
Merci et bonne journée à tous, Guy Michel.
Partager