Bonjour,
Je dois utiliser avec windev une DLL fournie par un client. Pour cela
je dois construire une structure (SMI_IO) contenant entre autre un
tableau de structures (ALARMREC) et la passer en paramètre.
J'obtiens toujours -1 comme résultat du passage de la structure, ce qui
signifie que la fonction n'a pas pu être effectuée.
Pourriez-vous me dire si mes déclarations de structures en Windev sont
équivalentes aux structures en C ?
Où ai-je fait une bétise ?
Merci d'avance de votre aide éventuelle.
Je vous joins les modèles ci après:
typedef struct ALARMREC
{
int Flag;
int AlarmType;
int AlarmUnitNum;
int AlarmUnitWing;
int AlarmLocation;
int AlarmDelayFlag;
char AlarmTime[20];
}alarmRec;
Traduit par:
alarmRec est une structure
Flag est un entier sans signe sur 4 octet
AlarmType est un entier sans signe sur 4 octet
AlarmUnitNum est un entier sans signe sur 4 octet
AlarmUnitWing est un entier sans signe sur 4 octet
AlarmLocation est un entier sans signe sur 4 octet
AlarmDelayFlag est un entier sans signe sur 4 octet
AlarmTime est une chaîne fixe sur 20
FIN
SmiIo est une structure
ErrorCode est un entier sur 1 octet
DisplaySegmentStatus est un tableau fixe de 50 entier sur 1 octet
AuxiliarySensorStatus est un tableau fixe de 60 par 3 entier sur 1
octet
PMTamperStatus est un tableau fixe de 8 entier sur 1 octet
LUTamperStatus est un tableau fixe de 9 entier sur 1 octet
RMTamperStatus est un tableau fixe de 20 entier sur 1 octet
DisplaySegmentAlarmState est un tableau fixe de 50 entier sur 1
octet
AuxiliaryAlarmState est un tableau fixe de 60, 3 entier sur 1 octet
PMTamperAlarmState est un tableau fixe de 8 entier sur 1 octet
LUTamperAlarmState est un tableau fixe de 9 entier sur 1 octet
RMTamperAlarmState est un tableau fixe de 20 entier sur 1 octet
CableAFaultState est un tableau fixe de 8 entier sur 1 octet
CableBFaultState est un tableau fixe de 8 entier sur 1 octet
PMComFailState est un tableau fixe de 8 entier sur 1 octet
RMComFailState est un tableau fixe de 20 entier sur 1 octet
AlarmData est un tableau fixe de 10 alarmRec
FIN
Et le code d'exécution en C++
...
SmiIo* arrayI;
char mapstring[250];
strcpy(mapstring,comPort.m_strMapName);
int
err=SMIAPI_Init(comPort.m_iCom,mapstring,comPort.m_iPCAddress,&arrayI);
...
Traduit par
ResuChargeDll est un entier
ResuDLL est un entier
DllTPI est une chaîne="win32dll.dll"
NomMap est une chaîne fixe sur 250
SmiIo est un tableau de 8 Smi_Io
ResuChargeDll=ChargeDLL(DllTPI)
SI ResuChargeDll = 0 ALORS
Erreur(ErreurInfo())
Ferme
FIN
NomMap="C:\Cartes\Test.SMP"
comTPI est un entier=1
ComPC est un entier =1
ResuDLL=AppelDLL32(DllTPI,"SMIAPI_Init",comTPI,NomMap,ComPC,&SmiIo)
SI ResuDLL<=0 ALORS
Trace("Erreur sur 'SMIAPI_Init' ")
Ferme
FIN
--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Pourriez-vous me dire si mes déclarations de structures en Windev sont équivalentes aux structures en C ? Où ai-je fait une bétise ?
Pour les "int" (structure), traduis-les plutôt par des "entiers sur 2 octets" (ou "entiers" tout court).
A+
-- Romain PETIT http://cerbermail.com/?O16kfXOFcq (cliquez sur le lien ci-dessus pour me contacter en privé)
Eric Laurent
Après mure réflexion, Romain PETIT a écrit :
Pour les "int" (structure), traduis-les plutôt par des "entiers sur 2 octets" (ou "entiers" tout court).
A+
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux. Je crois que le problème vient du passage d'une structure contenant elle même une structure. Des idées ?
-- Eric Laurent
(enlever nospam.)
Après mure réflexion, Romain PETIT a écrit :
Pour les "int" (structure), traduis-les plutôt par des "entiers sur 2 octets"
(ou "entiers" tout court).
A+
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux.
Je crois que le problème vient du passage d'une structure contenant
elle même une structure.
Des idées ?
--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Pour les "int" (structure), traduis-les plutôt par des "entiers sur 2 octets" (ou "entiers" tout court).
A+
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux. Je crois que le problème vient du passage d'une structure contenant elle même une structure. Des idées ?
-- Eric Laurent
(enlever nospam.)
Romain PETIT
Eric Laurent a couché sur son écran :
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux. Je crois que le problème vient du passage d'une structure contenant elle même une structure. Des idées ?
Je crois que je m'en étais sorti avec "tableau statique". Cf : http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
-- Romain PETIT http://cerbermail.com/?O16kfXOFcq (cliquez sur le lien ci-dessus pour me contacter en privé)
Eric Laurent a couché sur son écran :
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux.
Je crois que le problème vient du passage d'une structure contenant elle même
une structure.
Des idées ?
Je crois que je m'en étais sorti avec "tableau statique".
Cf :
http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Merci de ton aide mais j'ai essayé aussi et cela ne marche pas mieux. Je crois que le problème vient du passage d'une structure contenant elle même une structure. Des idées ?
Je crois que je m'en étais sorti avec "tableau statique". Cf : http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
-- Romain PETIT http://cerbermail.com/?O16kfXOFcq (cliquez sur le lien ci-dessus pour me contacter en privé)
Eric Laurent
Romain PETIT a couché sur son écran :
Je crois que je m'en étais sorti avec "tableau statique". Cf : http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
Cela ne marche pas non plus. J'ai comparé la taille des structures en C++ et en Windev et j'obtiens les mêmes résultats (44 pour Alarmrec et 1020 pour Smi_Io). Je ne vois vraiment pas ce qui cloche !
-- Eric Laurent
(enlever nospam.)
Romain PETIT a couché sur son écran :
Je crois que je m'en étais sorti avec "tableau statique".
Cf :
http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
Cela ne marche pas non plus.
J'ai comparé la taille des structures en C++ et en Windev et j'obtiens
les mêmes résultats (44 pour Alarmrec et 1020 pour Smi_Io).
Je ne vois vraiment pas ce qui cloche !
--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Je crois que je m'en étais sorti avec "tableau statique". Cf : http://www.windasso.org/cgi-bin/gesmod.exe?exec=VISU&NUMRUBRIQUEA8&MDP=&TYPE=TRUC
A+
Cela ne marche pas non plus. J'ai comparé la taille des structures en C++ et en Windev et j'obtiens les mêmes résultats (44 pour Alarmrec et 1020 pour Smi_Io). Je ne vois vraiment pas ce qui cloche !
-- Eric Laurent
(enlever nospam.)
Sécurité Pointage & Biométrie
Bonjour,
Normalement le code de vos structures devrait être :
alarmRec est une structure Flag est un entier AlarmType est un entier AlarmUnitNum est un entier AlarmUnitWing est un entier AlarmLocation est un entier AlarmDelayFlag est un entier AlarmTime est une chaîne fixe sur 20 FIN
SmiIo est une structure ErrorCode est un caractère DisplaySegmentStatus est une chaîne fixe sur 50 AuxiliarySensorStatus est une chaîne fixe sur 60 PMTamperStatus est une chaîne fixe sur 8 LUTamperStatus est une chaîne fixe sur 9 RMTamperStatus est une chaîne fixe sur 20 DisplaySegmentAlarmState est une chaîne fixe sur 50 AuxiliaryAlarmState est une chaîne fixe sur 60 PMTamperAlarmState est une chaîne fixe sur 8 LUTamperAlarmState est une chaîne fixe sur 9 RMTamperAlarmState est une chaîne fixe sur 20 CableAFaultState est une chaîne fixe sur 8 CableBFaultState est une chaîne fixe sur 8 PMComFailState est une chaîne fixe sur 8 RMComFailState est une chaîne fixe sur 20 AlarmData est un entier sur 10 octets // (à VERIFIER) FIN
A vérifier toutefois.
Sincères salutations -- Jean-Claude FLAJOULOT
Bonjour,
Normalement le code de vos structures devrait être :
alarmRec est une structure
Flag est un entier
AlarmType est un entier
AlarmUnitNum est un entier
AlarmUnitWing est un entier
AlarmLocation est un entier
AlarmDelayFlag est un entier
AlarmTime est une chaîne fixe sur 20
FIN
SmiIo est une structure
ErrorCode est un caractère
DisplaySegmentStatus est une chaîne fixe sur 50
AuxiliarySensorStatus est une chaîne fixe sur 60
PMTamperStatus est une chaîne fixe sur 8
LUTamperStatus est une chaîne fixe sur 9
RMTamperStatus est une chaîne fixe sur 20
DisplaySegmentAlarmState est une chaîne fixe sur 50
AuxiliaryAlarmState est une chaîne fixe sur 60
PMTamperAlarmState est une chaîne fixe sur 8
LUTamperAlarmState est une chaîne fixe sur 9
RMTamperAlarmState est une chaîne fixe sur 20
CableAFaultState est une chaîne fixe sur 8
CableBFaultState est une chaîne fixe sur 8
PMComFailState est une chaîne fixe sur 8
RMComFailState est une chaîne fixe sur 20
AlarmData est un entier sur 10 octets // (à VERIFIER)
FIN
Normalement le code de vos structures devrait être :
alarmRec est une structure Flag est un entier AlarmType est un entier AlarmUnitNum est un entier AlarmUnitWing est un entier AlarmLocation est un entier AlarmDelayFlag est un entier AlarmTime est une chaîne fixe sur 20 FIN
SmiIo est une structure ErrorCode est un caractère DisplaySegmentStatus est une chaîne fixe sur 50 AuxiliarySensorStatus est une chaîne fixe sur 60 PMTamperStatus est une chaîne fixe sur 8 LUTamperStatus est une chaîne fixe sur 9 RMTamperStatus est une chaîne fixe sur 20 DisplaySegmentAlarmState est une chaîne fixe sur 50 AuxiliaryAlarmState est une chaîne fixe sur 60 PMTamperAlarmState est une chaîne fixe sur 8 LUTamperAlarmState est une chaîne fixe sur 9 RMTamperAlarmState est une chaîne fixe sur 20 CableAFaultState est une chaîne fixe sur 8 CableBFaultState est une chaîne fixe sur 8 PMComFailState est une chaîne fixe sur 8 RMComFailState est une chaîne fixe sur 20 AlarmData est un entier sur 10 octets // (à VERIFIER) FIN
A vérifier toutefois.
Sincères salutations -- Jean-Claude FLAJOULOT
Eric Laurent
Après mure réflexion, Sécurité Pointage & Biométrie a écrit :
Bonjour,
Normalement le code de vos structures devrait être :
Merci de votre aide mais les structures que vous me suggérez sont erronées. Regardez bien le code en C, il utilise des tableaux dont un tableau faisant référence à la structure AlarmRec.
Merci quand même,
Cordialement.
-- Eric Laurent
(enlever nospam.)
Après mure réflexion, Sécurité Pointage & Biométrie a écrit :
Bonjour,
Normalement le code de vos structures devrait être :
Merci de votre aide mais les structures que vous me suggérez sont
erronées.
Regardez bien le code en C, il utilise des tableaux dont un tableau
faisant référence à la structure AlarmRec.
Merci quand même,
Cordialement.
--
Eric Laurent
nospam.laurent.systel@wanadoo.fr
(enlever nospam.)
Après mure réflexion, Sécurité Pointage & Biométrie a écrit :
Bonjour,
Normalement le code de vos structures devrait être :
Merci de votre aide mais les structures que vous me suggérez sont erronées. Regardez bien le code en C, il utilise des tableaux dont un tableau faisant référence à la structure AlarmRec.