Problème de traduction de code c en visual basic

obeltrando - 19 mars 2013 à 15:50
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 19 mars 2013 à 19:37
Bonjour à tous,
Dans mon programme j'intégre une fonction,



<DllImport("MP300Com.dll", CallingConvention:=CallingConvention.StdCall, EntryPoint:="_MPC_GetMeasureResonanceFrequency@12")> _
Public Shared Function _
MPC_GetMeasureResonanceFrequency(ByVal CplNum As Byte, ByRef pCount As Integer, ByRef pMeasure() As Long) As Integer
End Function

De cette façon je souhaite donc m'en servir pour récupérer le tableau pMeasure de longueur pCount.

La dll importé est écrite en C et la fonction correspond à:


- WORD MPC_GetMeasureResonanceFrequency (BYTE CplNum, DWORD *pCount, long **pMeasure );


Et l'exemple donné correspond à:


WORD err;
DWORD count,i; long *Measure; err=MPC_GetMeasureResonanceFrequency (CPL1, &count, &Measure); for (i=0;i<Count;i++) print (“%ld “,Measure[i]);

J'ai testé d'implémenté le programme mais la fonction de base renvoie (il me semble) l'adresse du tableau. De ce fait, en visual basic, mon tableau est redimensionné à 1 dimension.

Comment pourrais-je faire pour modifier l'adresse de mon tableau en visual basic?

Merci d'avance

1 réponse

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
19 mars 2013 à 19:37
Bonjour,

Le paramètre en question peut être pris comme un pointeur sur le pointeur d'un tableau, donc en gros, un pointeur sur un long*, donc sur un tableau à 1 dimension.
VB.NET ne gère pas nativement ce genre de pratique (il me semble) qui va à l'encontre même de son fonctionnement.

Tu peux contourner cela en observant l'agencement de ton tableau (comment tu passes de 2 à 1 dimension, puis ensuite, faire une fonction qui interrogera la bonne case, par exemple, la case 3,1, sera en fait la case 61 (3*20+1), ou la case 10,5, la case (10*20+5) 205, si ton tableau a des agencements de 20 valeurs en ligne.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rejoignez-nous