|
Débuté par Gerarld, 02 mar. 2004 07:18 - 2 réponses |
| |
| | | |
|
| |
Posté le 02 mars 2004 - 07:18 |
Demande de service à un spécialiste VB et/ou c++ : Je dois interfacer une fonction d'une DLL. J'ai un exemple VB et un exemple c++ qui fonctionne parfaitement, mais en Windev je n'arrive pas a faire fonctionner. (La dll se charge bien, c'est l'appel qui 'fait' rien.)
ci - apres code VB, code C++ et enfin Code Windev que je voudrais voir marcher.
Quelle est mon erreur ???
-------- EN VB La Fonction se definissait en VB de la façon suivante :
Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte)
L'appel de cette fonction est :
Private Sub OnWrite_Click() Dim Value As Long Value = Val(TextValue) If OptionByte Then If Value < 0 Then Value = Value + 256 DlPortWritePortUchar Val(TextAddr), Value
----- EN c++
#define DLPORT_API _stdcall VOID DLPORT_API DlPortWritePortUchar( IN ULONG Port, IN UCHAR Value );
void CPortIODlg::OnWrite() { BOOL bOK = UpdateInternalVariables(); //Get Data
TRACE("m_dwValue %d m_dwAddr %d\n", m_dwValue, m_dwAddr); if (bOK) { switch (m_ioSize) { case BYTEIO: DlPortWritePortUchar(m_dwAddr, (UCHAR)m_dwValue); break;
//-------------------------------------- En Windev j'ai fait :
Port est entier long sans signe ValChar est un caractere Port = 0x200 Valchar = caract(0x01) si Dll_IOCharge=0 Dll_IOCharge=chargedll("dlportio.dll") si Dll_IOCharge = 0 alors erreur("La DLL n'a pas été chargée") fin si Dll_IOCharge=0 alors retour // Ouverture AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) ) multitache(-80) // 0.8 secondes //Fermeture Valchar = caract(0x00) AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) ) |
| |
| |
| | | |
|
| | |
| |
Posté le 02 mars 2004 - 09:52 |
Bonjour,
Je n'ai pas regardé dans le détail ton traitement. Ce qu'il faut savoir en Windev : Toujours utiliser le type ASCIIZ ( Var est chaine ASCIIZ ) >> voir aide sur asciiz. Pour passer ou récupérer une structure ou une adresse : utiliser le & ( &Port, &ValChar )
En espérant avoir un peu aidé, Olivier R.
"Gerarld" <_nospam_aurilog@wanadoo.fr> a écrit dans le message de news: 40443ad9@news.pcsoft.fr...
Demande de service à un spécialiste VB et/ou c++ : Je dois interfacer une fonction d'une DLL. J'ai un exemple VB et un exemple c++ qui fonctionne parfaitement, mais en Windev je n'arrive pas a faire fonctionner. (La dll se charge bien, c'est l'appel qui 'fait' rien.)
ci - apres code VB, code C++ et enfin Code Windev que je voudrais voir
marcher.
Quelle est mon erreur ???
-------- EN VB La Fonction se definissait en VB de la façon suivante :
Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte)
L'appel de cette fonction est :
Private Sub OnWrite_Click() Dim Value As Long
Value = Val(TextValue) If OptionByte Then If Value < 0 Then Value = Value + 256 DlPortWritePortUchar Val(TextAddr), Value
----- EN c++
#define DLPORT_API _stdcall VOID DLPORT_API DlPortWritePortUchar( IN ULONG Port, IN UCHAR Value );
void CPortIODlg::OnWrite() { BOOL bOK = UpdateInternalVariables(); //Get Data
TRACE("m_dwValue %d m_dwAddr %d\n", m_dwValue, m_dwAddr); if (bOK) { switch (m_ioSize) { case BYTEIO: DlPortWritePortUchar(m_dwAddr, (UCHAR)m_dwValue); break;
//-------------------------------------- En Windev j'ai fait :
Port est entier long sans signe ValChar est un caractere Port = 0x200 Valchar = caract(0x01) si Dll_IOCharge=0 Dll_IOCharge=chargedll("dlportio.dll") si Dll_IOCharge = 0 alors erreur("La DLL n'a pas été chargée") fin si Dll_IOCharge=0 alors retour // Ouverture AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) ) multitache(-80) // 0.8 secondes //Fermeture Valchar = caract(0x00) AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) )
|
| |
| |
| | | |
|
| | |
| |
Posté le 04 mars 2004 - 09:11 |
Bjr, Je n'ai pas de chaine dans mes parametres ... Si qq1 a une autre idée Merci. "Olivier" <sarl@elog-eloga.net> a écrit dans le message de news: 40444051@news.pcsoft.fr...
Bonjour,
Je n'ai pas regardé dans le détail ton traitement. Ce qu'il faut savoir en Windev : Toujours utiliser le type ASCIIZ ( Var est chaine ASCIIZ ) >> voir aide
sur
asciiz. Pour passer ou récupérer une structure ou une adresse : utiliser le & ( &Port, &ValChar ) En espérant avoir un peu aidé, Olivier R. "Gerarld" <_nospam_aurilog@wanadoo.fr> a écrit dans le message de news: 40443ad9@news.pcsoft.fr...
Demande de service à un spécialiste VB et/ou c++ : Je dois interfacer une fonction d'une DLL. J'ai un exemple VB et un exemple c++ qui fonctionne parfaitement, mais
en > > Windev je n'arrive pas a faire fonctionner. (La dll se charge bien, c'est
l'appel qui 'fait' rien.)
ci - apres code VB, code C++ et enfin Code Windev que je voudrais voir marcher. Quelle est mon erreur ???
-------- EN VB La Fonction se definissait en VB de la façon suivante :
Public Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port
As
Long, ByVal Value As Byte)
L'appel de cette fonction est :
Private Sub OnWrite_Click() Dim Value As Long
Value = Val(TextValue) If OptionByte Then If Value < 0 Then Value = Value + 256 DlPortWritePortUchar Val(TextAddr), Value
----- EN c++
#define DLPORT_API _stdcall VOID DLPORT_API DlPortWritePortUchar( IN ULONG Port, IN UCHAR Value );
void CPortIODlg::OnWrite() { BOOL bOK = UpdateInternalVariables(); //Get Data
TRACE("m_dwValue %d m_dwAddr %d\n", m_dwValue, m_dwAddr); if (bOK) { switch (m_ioSize) { case BYTEIO: DlPortWritePortUchar(m_dwAddr, (UCHAR)m_dwValue); break;
//-------------------------------------- En Windev j'ai fait :
Port est entier long sans signe ValChar est un caractere Port = 0x200 Valchar = caract(0x01) si Dll_IOCharge=0 Dll_IOCharge=chargedll("dlportio.dll") si Dll_IOCharge = 0 alors erreur("La DLL n'a pas été chargée") fin si Dll_IOCharge=0 alors retour // Ouverture AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) ) multitache(-80) // 0.8 secondes //Fermeture Valchar = caract(0x00) AppelDLL32("dlportio.dll","DlPortWritePortUchar", (Port), (Valchar) )
|
| |
| |
| | | |
|
| | | | |
| | |
|