FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» select intégrés
Comment utiliser DLL_CALL0 ? Emptypar jjn4 Aujourd'hui à 18:33

» Aide de PANORAMIC
Comment utiliser DLL_CALL0 ? Emptypar leclode Aujourd'hui à 18:23

» PANORAMIC V 1
Comment utiliser DLL_CALL0 ? Emptypar Klaus Aujourd'hui à 9:53

» Je teste PANORAMIC V 1 beta 1
Comment utiliser DLL_CALL0 ? Emptypar Klaus Aujourd'hui à 9:52

» bouton dans autre form que 0
Comment utiliser DLL_CALL0 ? Emptypar leclode Hier à 13:59

» KGF_dll - nouvelles versions
Comment utiliser DLL_CALL0 ? Emptypar Klaus Hier à 11:41

» Gestion d'un système client-serveur.
Comment utiliser DLL_CALL0 ? Emptypar Klaus Hier à 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Comment utiliser DLL_CALL0 ? Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Comment utiliser DLL_CALL0 ? Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Comment utiliser DLL_CALL0 ? Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Comment utiliser DLL_CALL0 ? Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Comment utiliser DLL_CALL0 ? Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Comment utiliser DLL_CALL0 ? Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Comment utiliser DLL_CALL0 ? Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Comment utiliser DLL_CALL0 ? Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -28%
Brandt LVE127J – Lave-vaisselle encastrable 12 ...
Voir le deal
279.99 €

 

 Comment utiliser DLL_CALL0 ?

Aller en bas 
2 participants
AuteurMessage
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyJeu 4 Mar 2010 - 23:15

Bonsoir,

J'essaie d'utiliser DLL_CALL0 et j'ai besoin de vos lumières. J'ai écrit une petite DLL test1 contenant un seul sousprogramme number17 retournant un entier de valeur 17. Le fichier test1.dll est pl&cé dans le répertoire de l'éditeur Panoramic (à cause du chemin relatif).

Voici mon programme Panoramic:

Code:

 dim n%
 
 dll_on "test1.dll"
 n% = dll_call0("number17")
 message(str$(n%))
 dll_off
 
 end
 

Je suis certain que Panoramic appelle bien ma DLL car mon pare-feu m'en demande une autorisation temporaire. Mais Panoramic me rejette avec l'erreur suivante:

Code:

(29) Not Correct Arithmetic Expression: Error in function, line: 4

Quel est le format d'une "expression arithmétique" ? Comment ma routine dans la DLL doit-elle formatter le résultat ?

D'ailleurs, question corollaire, en utilisant DLL_CALL1("fonction",param), je sais que param doit être également le résultat d'une expression arithmétique. Comment cela se présente-t-il ? De la même manière ?

Merci beaucoup de votre aide. J'ai trouvé tout seul comment faire une DLL et l'appeler par PAnoramic, mais là, je sèche.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Invité
Invité




Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 0:35

Salut Klaus
regarde si tu trouves ton bonheur avec ceci:
https://panoramic.1fr1.net/a-l-aide-f6/dll-t203.htm

Salutation
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 1:03

Bonsoir, Cosmos70,

Merci pour ton aide. Mais le problème de devient pas plus clair pour autant, car en résultat des DLL_CALL, il y a tantôt un entier, tantôt un réel simple, et dans les paramètres, il en est de même. Les liens vers les exemples sont morts aussi, alors,cela devient difficile.

Demain, je vais essayer avec la DLL des cartes tel que c'est suggéré par Jack; maintenant,je vais me coucher.

A bientôt Klaus
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 8:06

Bon, frais et reposé, j'ai essayé les examples donnés par Jack concernant la DLL des cartes. Surprise: cela produit la même erreur dès le premier appel de DLL_CALL, soit à la ligne 4 chaque fois !

Là, je pense, c'est pour Jack: est-ce que les DLL_CALL auraient souffert en passant à la nouvelle version ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Invité
Invité




Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 13:55

Tu pourrais en attendant essayer avec une ancienne version, pour voir ce que cela donne.
Revenir en haut Aller en bas
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 18:59

Citation :
est-ce que les DLL_CALL auraient souffert en passant à la nouvelle version ?
Non, pas du tout.

Voici un fichier ZIP qui contient:
- une DLL
- un fichier de test de cette DLL
C'est ce fichier qui me sert à tester les appels de fonctions d'une DLL avant la mise à disposition d'une version de PANORAMIC. Le test est positif quand on visualise des couples de nombres identiques.

http://dl.free.fr/egNPfU4Wb
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyVen 5 Mar 2010 - 23:02

Merci, Jack, pour la mise à disposition du kite de test.

En effet, tout marche bien. Alors, mon problème n'en est que plus mystérieux, car mon message d'erreur indiqué ci-dessus persiste avec ma DLL.

Elle est écrite en Watcom Fortran (norme Fortran 77) et retourne une valeur numérique égale à 17, pour le test. Elle a un seul point d'entrée appelé number17.

Je sais que je rentre bien dans la DLL, mais c'est la valeur au retour qui est rejeté par Panoramic. Qu'est-ce qu'un attend ? Une valeur binaire entière ou flottante, 16 ou 32 bits, ou une adresse pointant vers... quoi ? La documentation dit simplement "résultat arithmétique".

J'ai peut-être manqué quelque chose d'évident, mais la structure d'un "résultat arithmétique" dépend peut-être du langage dans lequel la DLL a été écrite.

Cordialement Klaus
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptySam 6 Mar 2010 - 9:09

Je m'aperçois que je n'ai donné aucune explication sur les fonctions de la DLL MyTestDLL.dll.

Les voici:
---------------------------------------------------
fonction TstCall0
paramètres : aucun
retour : 153
---------------------------------------------------
fonction TstCall1
paramètres : Nb1
retour : Nb1 * Nb1
---------------------------------------------------
fonction TstCall2
paramètres : Nb1, Nb2
retour : Nb1 + Nb2
---------------------------------------------------
fonction TstCall3
paramètres : Nb1, Nb2, Nb3
retour : Nb1 + Nb2 + Nb3
---------------------------------------------------
fonction TstCall4
paramètres : Nb1, Nb2, Nb3, Nb4
fetour : Nb1 + Nb2 + Nb3 + Nb4
---------------------------------------------------
fonction TstCall5
paramètres : Nb1, Nb2, Nb3, Nb4, Nb5
retour : Nb1 + Nb2 + Nb3 + Nb4 + Nb5
---------------------------------------------------
fonction TstCall6
paramètres : Nb1, Nb2, Nb3, Nb4, Nb5, Nb6
retour : Nb1 + Nb2 + Nb3 + Nb4 + Nb5 + Nb6
---------------------------------------------------

Toutes ces fonctions retournent une valeur entière.

Une DLL peut être écrite dans n'importe quel langage, pourvu qu ce langage respecte certaines convention pour le passage des paramètres.
PANORAMIC respecte le standard le plus répandu car utilisé par le C++: il suppose que la fonction appelée est en mode STDCALL.

Voici la partie essentielle du code de DLL_CALL0():
Code:
  CALL [Adr_Fonct]
  MOV Res_Int, EAX
Adr_Fonct est l'adresse de la fonction appelée dans la DLL par DLL_CALL0(), le registre EAX contient la valeur entière retournée par la fonction appelée. Je remplis la variable Res_Int avec ce registre et c'est cette valeur qui sera utilisée dans l'expression arithmétique comme résultat de l'appel de la fonction DLL_CALL0().

j'appelle "expression arithmétique" une expression telle que:
24+DLL_CALL0("TstCall0")*3-SQR(19)
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 0:14

Bonsoir, Jack,

J'ai pris soin d'assurer le mode STDCALL, et je charge les valeurs en retour de ma fonction dans EAX, comme tu le demandes. J'ai vérifié cela dans un debuggeur hexa, et ma valeur est bien dans EAX, juste avant le return.

Or, Panoramic ne veut toujours pas de ma valeur, avec le message indique dans mon post précédent. Je suis un peu perdu...

Ceci dit, il n'y a pas le feu à la maison, alors, quand tu auras un moment...

Cordialement Klaus

P.S. Est-ce que ta DLL a été faite avec Delphi ? J'ai essayé d'utiliser Delphi et je me suis heurté à un problème de taille. J'ai téléchargé la version gratuite de Delphi, mais à l'installation, il me demande un code licence que je peux obtenir gratuitement via un lien afiiché, mais ce lien est mort ! Donc, impossible d'installer. C'est pour cette raison que jeme suis rabattu sur Fortran...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Invité
Invité




Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 0:26

Salut Klaus.
J'ai installé Delphi gratuitement et je travaille dessus. Pour l'installation, il demande bien de s'enregistrer, mais effectivement le lien est mort. Tu as la possibilité d'ignorer cet enregistrement, et il installe quant même. Revérifie.
Par contre tu ne peux pas utiliser deux version de Delphi. Si tu changes de version, il faut désinstaller l'autre.
A+
Je rajoute que la version Delphi7 (excusez moi, on est ici en Panoremic, mais c'est pour la bonne cause) si tu as Avast, il trouve régulièrement un Trojan sur tes programmes. J'ai fini par désinstaller Avast pour mettre Aviva Antivir. Au moins on peut travailler. Avec Delphi 6 il n'y a pas ce problème.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 0:42

Merci, cosmos70, pour ces infos sur Delpi. J'essayerai dès demain.

Juste pour info:

Concernant l'antivir, j'ai Antivir de Avira depuis longtemps, associé à SpywareTerminator avec CLAM Antivirus intrégré - je n'ai plus été infecté depuis longtemps, et SpywareTerminator ayant un mode "apprentisage", il finit par connaître les programmes et ne bloque que les intrusions venant par internet.

Allez, ça suffit pour aujourd'hui. Bonne nuit Klaus

EDIT
===

J'ai essayé ce matin: à l'installation, il demande le numéro de série et la clé d'autorisation. On ne peut pas passer outre - on a toujours le message "L" numéro de série ou la clé d'autorisation est incorrect". Pas moyen de continuer. Il s'agit de Delphi 6 par le fichier Delphi6PersoFR.exe.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Invité
Invité




Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 9:03

Je me souviens, c'est info sont sur la page de téléchargement. Regarde bien, c'est pas très gros.
Salutation.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 10:32

OK, j'ai réussi ! Merci !

Je vais commencer à explorer le produit.

Ceci dit, cela n'enlève rien au fait que je n'arrive pas à comprendre pourquoi les valeurs arithmétiques retournées pas ma DLL Fortran ne sont pas acceptées pas Panoramic !

Cordialement Klaus
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Jack
Admin
Jack


Nombre de messages : 2386
Date d'inscription : 28/05/2007

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 16:35

La DLL MyTestDLL.dll est écrite en Delphi 6.
Si cela peut t'aider, voici le source:
Code:
library MyTestDLL;
uses
  SysUtils,
  Classes;

var
// variables locales (ne sont pas utilisées)
I1: integer;
I2: integer;

// -----------------------------------------------------------------------------
function TstCall0 : integer; stdcall;
begin
Result := 153;
end;
// -----------------------------------------------------------------------------
function TstCall1(Nb1 : integer) : integer; stdcall;
// on élève au carré
begin
Result := Nb1 * Nb1;
end;
// -----------------------------------------------------------------------------
function TstCall2(Nb1, Nb2 : integer) : integer; stdcall;
// on additionne
begin
Result := Nb1 + Nb2;
end;
// -----------------------------------------------------------------------------
function TstCall3(Nb1, Nb2, Nb3 : integer) : integer; stdcall;
// on additionne
begin
Result := Nb1 + Nb2 + Nb3;
end;
// -----------------------------------------------------------------------------
function TstCall4(Nb1, Nb2, Nb3, Nb4 : integer) : integer; stdcall;
// on additionne
begin
Result := Nb1 + Nb2 + Nb3 + Nb4;
end;
// -----------------------------------------------------------------------------
function TstCall5(Nb1, Nb2, Nb3, Nb4, Nb5 : integer) : integer; stdcall;
// on additionne
begin
Result := Nb1 + Nb2 + Nb3 + Nb4 + Nb5;
end;
// -----------------------------------------------------------------------------
function TstCall6(Nb1, Nb2, Nb3, Nb4, Nb5, Nb6 : integer) : integer; stdcall;
// on additionne
begin
Result := Nb1 + Nb2 + Nb3 + Nb4 + Nb5 + Nb6;
end;
// -----------------------------------------------------------------------------
exports
TstCall0,
TstCall1,
TstCall2,
TstCall3,
TstCall4,
TstCall5,
TstCall6;

begin
  // juste pour montrer qu'on peut utiliser des variables locales
  I1 := 0;
  I2 := 0;
end.
Revenir en haut Aller en bas
https://panoramic.1fr1.net
Klaus

Klaus


Nombre de messages : 12293
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? EmptyDim 7 Mar 2010 - 17:22

Salut, Jack,

JE VIENS DE TROUVER !

Voici le code me ma première DLL:
Code:

library SimpleMessageDLL;

uses SysUtils, Classes, Dialogs;

function DllMessage:integer ; export;

begin

  ShowMessage('Hello world from a Delphi DLL') ;

  Result := 17;

end;

exports DllMessage;

begin

end.

Et puis, en revenant sur le site pour poster mon HEUREKA, j'ai trouvé ton post qui confirme ma supposition: la DLL est écrite en Delphi.

J'ai installé un Delphi 6 Personnal Franançais et j'ai fait une première DLL qui peut parfaitement retourner des valeurs. J'ai trouvé le code de base sur un forum et je l'ai adapté pour retourner ma valeur 17.

Mais dans la DLL, on définit chaque fonction avec le type de valeur qu'elle doit retourner (chez toi: ":integer"). Ca marche aussi avec d'autres types de données, à condition de ne pas utiliser des strings longs.

Je pense donc que la DLL retourne en fait un pointeur vers un déscripteur, de type ptr-->[adresse/longueur] ou ptr-->[type/adresse/longueur] ou simpilaire. Ceci expliquerait que ma valeur chargée dans EAX ne soit pas acceptée. Probablement, EAX contient en fait un pointeur vers un déscripteur ou vers la donnée en mémoire temporaire.

Quoi qu'il en soit, puisque ça marche avec Delphi, j'en resterai avec Delphi et ferai mes DLL avec ça.

Merci beaucoup de ton aide, et pardon pour le dérangement occasionné.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html En ligne
Contenu sponsorisé





Comment utiliser DLL_CALL0 ? Empty
MessageSujet: Re: Comment utiliser DLL_CALL0 ?   Comment utiliser DLL_CALL0 ? Empty

Revenir en haut Aller en bas
 
Comment utiliser DLL_CALL0 ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment utiliser SHOW_MODAL ?
» Utiliser key_up_code et key_down_code en mode direct
» Utiliser Tableur.dll comme un tableau d'abaque
» Comment utiliser Notepad+ à la place de l'editeur panoramic
» Où utiliser la commande DISPLAY ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: