Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
david
salut,
il n'existe pas de pointeur accessible en VB.
Par contre, le type char*, correspondant à une chaîne de caratères se défini par dim s as String. Le type char* comme tableau d'octets se fait avec dim tb(debut To fin) as Byte début et fin définissent respectivement, le premier et dernier indice du tableau
Pour les char**, s'il s'agit d'un tableau de chaîne de caractères, fait : dim tb(debut to fin) as String s'il s'agit d'un tableau à 2 dimensions d'octets fait, dim tb(debut1 to fin1, debut2 to fin2) as Byte
Voila, jespère avoir été assez clair (encore une chose, les indices de tableau se notent entre parenthèses et pas entre crochets comme en C). Si tu veux des tableaux dynamiques (même à X dimensions), ne déclarent pas leur taille avec le dim et fait : redim tb(debut to fin) dans ton code lorsque tu en a besoin (erase tb() pour libérer la mémoire). Si tu veux garder les anciennes valeurs, ajoute preserve entre le redim et ton identifiant de tableau.
A+, david
salut,
il n'existe pas de pointeur accessible en VB.
Par contre, le type char*, correspondant à une chaîne de caratères
se défini par
dim s as String.
Le type char* comme tableau d'octets se fait avec
dim tb(debut To fin) as Byte
début et fin définissent respectivement, le premier et dernier indice
du tableau
Pour les char**, s'il s'agit d'un tableau de chaîne de caractères,
fait :
dim tb(debut to fin) as String
s'il s'agit d'un tableau à 2 dimensions d'octets fait,
dim tb(debut1 to fin1, debut2 to fin2) as Byte
Voila, jespère avoir été assez clair (encore une chose, les indices
de tableau se notent entre parenthèses et pas entre crochets comme en
C). Si tu veux des tableaux dynamiques (même à X dimensions), ne
déclarent pas leur taille avec le dim et fait :
redim tb(debut to fin)
dans ton code lorsque tu en a besoin (erase tb() pour libérer la
mémoire).
Si tu veux garder les anciennes valeurs, ajoute preserve entre le redim
et ton identifiant de tableau.
Par contre, le type char*, correspondant à une chaîne de caratères se défini par dim s as String. Le type char* comme tableau d'octets se fait avec dim tb(debut To fin) as Byte début et fin définissent respectivement, le premier et dernier indice du tableau
Pour les char**, s'il s'agit d'un tableau de chaîne de caractères, fait : dim tb(debut to fin) as String s'il s'agit d'un tableau à 2 dimensions d'octets fait, dim tb(debut1 to fin1, debut2 to fin2) as Byte
Voila, jespère avoir été assez clair (encore une chose, les indices de tableau se notent entre parenthèses et pas entre crochets comme en C). Si tu veux des tableaux dynamiques (même à X dimensions), ne déclarent pas leur taille avec le dim et fait : redim tb(debut to fin) dans ton code lorsque tu en a besoin (erase tb() pour libérer la mémoire). Si tu veux garder les anciennes valeurs, ajoute preserve entre le redim et ton identifiant de tableau.
A+, david
X
Bonjour,
En complément, j'ai une préférence pour cette écriture:
Dim tabelau (10, 20) As String tableau (i, j) = ...
Dim x As String * 2 = chaine type string de 2 octet (même vide :o) Mais je "crois" avoir lu que "*x" est empilé, et qu'à trop en mettre sans dépiler, on peut avoir une débordement de stake... -------------- Ah le C, y a bien longtemps, x** n'est-ce pas x = pointeur de pointeur ??? Je ne suis plus certain... Bref, en VB, à part pour les fichiers, c'est bien rare d'utiliser des pointeurs :o)
"jean saint jalmes" a écrit dans le message de news: | Bonjour, | | comment déclarer les types char** et char* du C en VB ? | | Merci par avance, Jean
Bonjour,
En complément, j'ai une préférence pour cette écriture:
Dim tabelau (10, 20) As String
tableau (i, j) = ...
Dim x As String * 2
= chaine type string de 2 octet (même vide :o)
Mais je "crois" avoir lu que "*x" est empilé, et qu'à trop en mettre sans
dépiler, on peut avoir une débordement de stake...
--------------
Ah le C, y a bien longtemps, x** n'est-ce pas x = pointeur de pointeur ???
Je ne suis plus certain...
Bref, en VB, à part pour les fichiers, c'est bien rare d'utiliser des
pointeurs :o)
"jean saint jalmes" <jeansaintjalmes@discussions.microsoft.com> a écrit dans
le message de news: 7180876F-9BE9-41C7-8E8B-99B94F9BC656@microsoft.com...
| Bonjour,
|
| comment déclarer les types char** et char* du C en VB ?
|
| Merci par avance, Jean
En complément, j'ai une préférence pour cette écriture:
Dim tabelau (10, 20) As String tableau (i, j) = ...
Dim x As String * 2 = chaine type string de 2 octet (même vide :o) Mais je "crois" avoir lu que "*x" est empilé, et qu'à trop en mettre sans dépiler, on peut avoir une débordement de stake... -------------- Ah le C, y a bien longtemps, x** n'est-ce pas x = pointeur de pointeur ??? Je ne suis plus certain... Bref, en VB, à part pour les fichiers, c'est bien rare d'utiliser des pointeurs :o)
"jean saint jalmes" a écrit dans le message de news: | Bonjour, | | comment déclarer les types char** et char* du C en VB ? | | Merci par avance, Jean
jean saint jalmes
Merci David mais j'ai probablement mal formulé ma question.
Je sais que char* est un pointeur sur une chaîne de caractère en C. Par contre, je ne sais pas ce que signifie le type char** en C.
Ces 2 types apparaissent dans le prototypage des fonctions d'une API que je dois intégrer dans mon application VB et je n'ai malheureusement pas accès aux fichiers .h de l'API.
Exemples en C:
const char* api_getversion(void);
int api_initialize(const char* version, char** Description);
que j'ai traduits en VB :
private declare function api_getversion lib "xxx" () as string
private declare function api_initialize lib "xxx" (byval version as string,byref Description as string) as long
Private sub Test
dim Version as string * 255 dim Description as string dim Result as long
version = api_getversion Result = api_initialize(version,Description) End sub
l'instruction version=api_getversion fonctionne bien mais l'appel à "api_initialize" renvoie une erreur VB (Convention d'appel de DLL incorrecte).
J'ai lu que la traduction de "char* version" devrait plutôt être "byref version as string" mais dans ce cas, quelle est la traduction de char** ?????
Merci pour votre aide, Jean
Merci David mais j'ai probablement mal formulé ma question.
Je sais que char* est un pointeur sur une chaîne de caractère en C.
Par contre, je ne sais pas ce que signifie le type char** en C.
Ces 2 types apparaissent dans le prototypage des fonctions d'une API que je
dois intégrer dans mon application VB et je n'ai malheureusement pas accès
aux fichiers .h de l'API.
Exemples en C:
const char* api_getversion(void);
int api_initialize(const char* version, char** Description);
que j'ai traduits en VB :
private declare function api_getversion lib "xxx" () as string
private declare function api_initialize lib "xxx" (byval version as
string,byref Description as string) as long
Private sub Test
dim Version as string * 255
dim Description as string
dim Result as long
version = api_getversion
Result = api_initialize(version,Description)
End sub
l'instruction version=api_getversion fonctionne bien mais l'appel à
"api_initialize" renvoie une erreur VB (Convention d'appel de DLL incorrecte).
J'ai lu que la traduction de "char* version" devrait plutôt être "byref
version as string" mais dans ce cas, quelle est la traduction de char** ?????
Merci David mais j'ai probablement mal formulé ma question.
Je sais que char* est un pointeur sur une chaîne de caractère en C. Par contre, je ne sais pas ce que signifie le type char** en C.
Ces 2 types apparaissent dans le prototypage des fonctions d'une API que je dois intégrer dans mon application VB et je n'ai malheureusement pas accès aux fichiers .h de l'API.
Exemples en C:
const char* api_getversion(void);
int api_initialize(const char* version, char** Description);
que j'ai traduits en VB :
private declare function api_getversion lib "xxx" () as string
private declare function api_initialize lib "xxx" (byval version as string,byref Description as string) as long
Private sub Test
dim Version as string * 255 dim Description as string dim Result as long
version = api_getversion Result = api_initialize(version,Description) End sub
l'instruction version=api_getversion fonctionne bien mais l'appel à "api_initialize" renvoie une erreur VB (Convention d'appel de DLL incorrecte).
J'ai lu que la traduction de "char* version" devrait plutôt être "byref version as string" mais dans ce cas, quelle est la traduction de char** ?????
Merci pour votre aide, Jean
Jacques93
Bonjour jean saint jalmes, jean saint jalmes a écrit :
Bonjour,
comment déclarer les types char** et char* du C en VB ?
Merci par avance, Jean
Pas le plus simple pour un vendredi soir ... ;-)
VB stocke les chaines de caractère au format BSTR (Unicode avec en-tête). C/C++ au format LPSTR (Ansi) ou LPWSTR (Unicode mais sans en-tête). Avec le passage d'une seule chaine de caractère, VB gère ça de manière automatique :
si l'api en C/C++ est déclarée :
WINAPI api_en_c (char *param)
en VB :
Private Declare Function api_en_c Lib "xxx" _ (ByVal param As String) As Long
et l'appel se fait avec :
Dim Prm as String Dim l as long
Prm = Space (256) l = api_en_c (Prm)
VB s'occupe des conversions nécessaires dans la plupart des cas, à condition d'appeler la bonne version d'API (api_en_cA (Ansi) ou api_en_cW (Unicode)
Dans le cas de tableaux de chaines, qui est le cas de
WINAPI api_en_c (char **param)
l'api attend un pointeur sur un tableau de pointeur, et la c'est selon... On peut utiliser par exemple :
Private Declare api_en_c Lib "xxx" (ByVal Description As Long) As Long
Dim Description() As String Dim i As Integer, dim l as long
ReDim Description(0 To 5) ' à adapter For i = LBound(Description) To UBound(Description) Description(i) = Space(256) Next i l = api_en_c (VarPtr(Description(0))) For i = LBound(Description) To UBound(Description) Description(i) = StrConv(Description(i), vbUnicode) MsgBox Description(i) Next i
Bonjour jean saint jalmes,
jean saint jalmes a écrit :
Bonjour,
comment déclarer les types char** et char* du C en VB ?
Merci par avance, Jean
Pas le plus simple pour un vendredi soir ... ;-)
VB stocke les chaines de caractère au format BSTR (Unicode avec en-tête).
C/C++ au format LPSTR (Ansi) ou LPWSTR (Unicode mais sans en-tête). Avec
le passage d'une seule chaine de caractère, VB gère ça de manière
automatique :
si l'api en C/C++ est déclarée :
WINAPI api_en_c (char *param)
en VB :
Private Declare Function api_en_c Lib "xxx" _
(ByVal param As String) As Long
et l'appel se fait avec :
Dim Prm as String
Dim l as long
Prm = Space (256)
l = api_en_c (Prm)
VB s'occupe des conversions nécessaires dans la plupart des cas, à
condition d'appeler la bonne version d'API (api_en_cA (Ansi) ou
api_en_cW (Unicode)
Dans le cas de tableaux de chaines, qui est le cas de
WINAPI api_en_c (char **param)
l'api attend un pointeur sur un tableau de pointeur, et la c'est selon...
On peut utiliser par exemple :
Private Declare api_en_c Lib "xxx" (ByVal Description As Long) As Long
Dim Description() As String
Dim i As Integer, dim l as long
ReDim Description(0 To 5) ' à adapter
For i = LBound(Description) To UBound(Description)
Description(i) = Space(256)
Next i
l = api_en_c (VarPtr(Description(0)))
For i = LBound(Description) To UBound(Description)
Description(i) = StrConv(Description(i), vbUnicode)
MsgBox Description(i)
Next i
Bonjour jean saint jalmes, jean saint jalmes a écrit :
Bonjour,
comment déclarer les types char** et char* du C en VB ?
Merci par avance, Jean
Pas le plus simple pour un vendredi soir ... ;-)
VB stocke les chaines de caractère au format BSTR (Unicode avec en-tête). C/C++ au format LPSTR (Ansi) ou LPWSTR (Unicode mais sans en-tête). Avec le passage d'une seule chaine de caractère, VB gère ça de manière automatique :
si l'api en C/C++ est déclarée :
WINAPI api_en_c (char *param)
en VB :
Private Declare Function api_en_c Lib "xxx" _ (ByVal param As String) As Long
et l'appel se fait avec :
Dim Prm as String Dim l as long
Prm = Space (256) l = api_en_c (Prm)
VB s'occupe des conversions nécessaires dans la plupart des cas, à condition d'appeler la bonne version d'API (api_en_cA (Ansi) ou api_en_cW (Unicode)
Dans le cas de tableaux de chaines, qui est le cas de
WINAPI api_en_c (char **param)
l'api attend un pointeur sur un tableau de pointeur, et la c'est selon... On peut utiliser par exemple :
Private Declare api_en_c Lib "xxx" (ByVal Description As Long) As Long
Dim Description() As String Dim i As Integer, dim l as long
ReDim Description(0 To 5) ' à adapter For i = LBound(Description) To UBound(Description) Description(i) = Space(256) Next i l = api_en_c (VarPtr(Description(0))) For i = LBound(Description) To UBound(Description) Description(i) = StrConv(Description(i), vbUnicode) MsgBox Description(i) Next i