PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → HELP : Appel d'une DLL
HELP : Appel d'une DLL
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) )