IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Pointeur tableau vers DLL VB 2010 Express


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut Pointeur tableau vers DLL VB 2010 Express
    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.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par guymichela Voir le message
    Je me sens stupide, je dois faire une erreur de débutant ou plutôt de sénile , l'appel est tellement trivial.
    Aucun appel dumonde managé vers le monde non managé ne peut être considéré vraiment comme trivial.

    Essayer en faisant précéder le paramétre litigieux par l'attribut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [MarshalAs(UnmanagedType.R8)]
    R8 n'est pas forcément la bonne valeur mais dans tous les cas, la réponse va faire appel à la classe MarshalAsAttribute. Voir la doc de cette classe :

    http://msdn.microsoft.com/en-us/libr...attribute.aspx

    Sinon, un poste sur SOF où il est question d'une signature de fonction similaire à la tienne (avec du pointeur sur double).

    http://stackoverflow.com/questions/7...ory-corruption

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut A perdre son latin
    Bien, cela marche. J'ai doublé le nombre d'éléments du tableau, référencé tous les arguments en variables locales et supprimé la chaîne Null (Nothing en VB) en l'initialisant à Antares. Comme la majorité des joueurs d'échecs ont une planète par là....

    Et cela tourne. Merci.

    Guy Michel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Tableau en Vb 2010 Express
    Par MedVal dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/01/2012, 13h52
  2. compilation C vers DLL
    Par duche17 dans le forum Windows
    Réponses: 13
    Dernier message: 22/11/2005, 17h35
  3. compilation C vers DLL
    Par duche17 dans le forum C++
    Réponses: 3
    Dernier message: 17/11/2005, 11h08
  4. Réponses: 11
    Dernier message: 24/07/2003, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo