CallFonctionFast et Memory

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

CallFonctionFast et Memory

Message par lionel_om »

Bonjour à tous.
J'ai qq questions à vous poser :

1) Y-t-il un moyen de contrôler si l'adresse de la fonction que l'on passe à CallFonctionFast() est correct, car quand ce n'ai pas le cas, le programme plante... :?

2) Y'a t'il une autre manière de connaitre la taille d'une zone mémoire que de passer par l'API (cf, je ne sais plus quel post récent : BufferSize_() ou qqchose du genre)

Merci d'avance...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

En principe, IsFunction() te retourne le pointeur vers la fonction de la dll, ou 0 si la fonction n'existe pas, et donc, il ne peut, normalement, pas y avoir de plantage.

Je n'ai, pour ma part, jamais eu de problème avec ces fonctions.

Pour la question 2, je ne sais pas
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

LocalSize peut être

Dri
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dr. Dri a écrit :LocalSize peut être

Dri
C'est ce que j'avais donné sur un autre post, mais c'est de l'Api, et il en veut pas :lol:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ah oué il en veut pas :lol:
j'ai cherché dans le library descriptor mais la lib memory n'est pas décrite
comme freememory(-1) libère toute la mémoire allouée il doit y avoir moyen d'accéder à la liste des zones allouées mais comme on a rien dans le descriptor faut demander à Fred...

Dri
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

@Chris
IsFunction() ne marche qu'avec des fonctions d'une librairie (DLL). Mais ca ne marche pas avec une function interne ?!

@Dri
ah oué il en veut pas :lol:
:lol:


Merci pour vos réponses.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

lionel_om a écrit :@Chris
IsFunction() ne marche qu'avec des fonctions d'une librairie (DLL). Mais ca ne marche pas avec une function interne ?!
Parce que tu l'utilises avec quoi d'autre que les fonctions des dll, le CallFunctionFast() ? 8O
Parce que, selon l'aide, CallFunctionFast() ne fonctionne qu'avec ça!
Appelle une fonction en librairie en utilisant son pointeur obtenu par IsFunction() ou par LibraryFunctionAddress().
Ou alors, il y a quelque chose que je n'ai pas pigé, mais c'est interessant si ça peut être utilisé d'une autre manière que celle décrite dans l'aide.

Qu'est-ce que tu appelles, les "fonctions internes".
Pour moi, ce sont les fonctions qui sont codées dans le programme, et celle des librairies de PureBasic, (Lib utilisateur, et natives).
Je me trompes?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Code : Tout sélectionner

Procedure truc()
  Procedurereturn 1
EndProcedure

Debug CallFunctionFast(@truc())
; Doit débugger '1' (ms j'ai pas pu vérifier)
Voilà, je l'utilise comme ça CallFunctionFast et ça marche très bien. :wink:

Par contre si je lui passe une valeur autre que l'adresse d'une fonction, ça plante... :?
Ex :

Code : Tout sélectionner

CallFunctionFast(666)
-> Plantage sévère de l'application.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

lionel_om a écrit :

Code : Tout sélectionner

Procedure truc()
  Procedurereturn 1
EndProcedure

Debug CallFunctionFast(@truc())
; Doit débugger '1' (ms j'ai pas pu vérifier)
Voilà, je l'utilise comme ça CallFunctionFast et ça marche très bien. :wink:
J'ai encore appris quelque chose. J'avais j'amais essayé ça :lol:

Par contre, quel est l'interêt par rapport à la manière standard d'appeler la procédure?

CallFunctionFast() demande une adresse pour lancer la fonction, c'est normal que ça plante si tu lui met 666. Il va cherche la fonction à cette adresse, et il ne la trouve pas. En plus, tu dois certainement appeler dans un espace mémoire reservé, et ça, windows n'apprécie pas plus que ça, et il te le dit!
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

C'est pour une librairie :wink:
Dans ma LibVector (on peut faire des tris, recherches, etc) j'ai besoin d'une procédure de comparaison de :
* entiers (fait)
* strings (fait)
* structure (c'est l'utlisateur qui passe l'adresse de la procédure qui va faire les comparaisons en relation avec sa structure).

Sinon en effet, je crois qu'il n'y a pas d'intérêt :lol:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre