1

Bon, imaginons que j'ai fait un programme qui fournit un fichier 89z smile
ca peut arriver.
Imaginons que l'IDE soit fait avec Visual Basic 6.
Je veux pouvoir envoyer ce fichier 89z a la VTI (comme le fait TI-GCC)
comment faire ca en VB???
Tout ce qui passe pas par le port 80, c'est de la triche.

2

Onur :
Bon, imaginons que j'ai fait un programme qui fournit un fichier 89z smile ca peut arriver.

Bah heu ué c'est même plutot normal, sinon tu risques d'avoir du mal à l'envoyer à la Ti grin

Sinon, aucune idée, mais les sources de TIGCC IDE sont dispo, et comme c'est du Delphi tu devrais pas avoir trop de mal à transposer smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

mais jy connais rien à Delphi. je crois savoir que c'est une sorte de visual Pascal. mourn
Tout ce qui passe pas par le port 80, c'est de la triche.

4

Bah c'est du pascal objet, si tu connais à la fois le C et le VB, t'auras aucun problème à lire une source en Delphi.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

TIGCC IDE fait ça en envoyant des appuis de touches. Tu peux le faire aussi avec SendKeys en VB.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Bah c'est du pascal objet
Euh, c'est un abus de langage, parce que le Pascal supportait déjà les objets. (en tous cas Turbo Pascal 5.5 le faisait, y compris héritage, fonctions virtuelles & Cie).

7

Comme l'a dit Kevin, si tu veux exécuter le prog une fois envoyé, tu peux lui envoyer des messages pour lui indiquer les touches à appuyer (virtuellement). Ca pourrait donner un truc du style si tu as les définitions de l'API Windows:
SendMessage(FindWindow(szClasse[,szNom]),WM_KEYDOWN,nTouche,0);
Le nom de la classe et de la fenêtres à passer à FindWindow sont écrites dans le fichier .reg de TIShot sauf erreur. Je pense que tu peux envoyer WM_CHAR pour les caractères simples. N'oublie pas d'envoyer un WM_KEYUP avec la même touche en paramètre après WM_KEYDOWN sinon VTI sera perdue... wink
Mais si ton problème se situe déjà à l'envoi, peut-être que tu devrais te tourner vers un SendMessage(...,WM_DROPFILES,...) de manière à faire croire à VTI que l'utilisateur a glissé et déposé dans la fenêtre le fichier à envoyer depuis l'explorateur (dans ce cas, elle le transférera automatiquement). Mais là je ne peux pas t'aider plus puisque je n'ai jamais essayé.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

8

TIGCC IDE envoie les fichiers avec [F10].
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

-TIGCC -IDE +VTI
avatar
納 豆パワー!
I becamed a natto!!!1!one!

10

[mode=avocat du diable] On peut considérer qu'il décrit la méthode qu'utilise TIGCC IDE et pas celle qu'accepte VTI (sachant qu'il pourrait y avoir d'autres moyens de le faire) [/mode]

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

En effet.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

comment je fais pour utiliser les fonctions de style findWindow, sendMessage avec vb?
faut-il importer une librairie??
Tout ce qui passe pas par le port 80, c'est de la triche.

13

KK> ça utilise le texte de la barre de titre pour trouver VTI (ce qui expliquerait que ça ne marche pas quand on demande l'affichage de la vitesse d'émultation) ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

14

Oui.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

15

Mais on pourrait enlever le paramètre du titre, parce qu'il y a encore celui de la classe qui est différent pour chaque modèle de TI émulée il me semble. Enfin je ne suis pas sûr, ce n'est sûrement pas là pour rien...
comment je fais pour utiliser les fonctions de style findWindow, sendMessage avec vb? faut-il importer une librairie??
Démarrer -> Microsoft Visual Studio 6.0 -> Outils Microsoft Visual Studio 6.0 -> Visionneuse d'API
Ensuite tu cherches les infos sur la fonction dont tu as besoin et tu copies la déclaration qui vient au fond dans ton projet VB. Sinon tu peux également trouver un truc un peu plus complet ici: http://www.allapi.net
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

16

disons que le nom du processus est le mm pour tout calc émulée je pense ...

17

Bon, j'ai réussi à faire trouver la fenetre VTI à mon programme. J'ai lu les sources de TIGCC mais je prefere effectivement DRAG& DROP si c'est possible.
Donc ma nouvelle question c'est...



Comment je décrit WM_KEYDOWN en VB?? comment je sais combien ca vaut??
et puis je mets dans quoi le parametre pour WM_DROPFILES?? (càd le fichier à envoyer)


Sinon merci à tous, surtout à Brunni (un peu en retard mais j'ai programmé qu'hier) wink
Tout ce qui passe pas par le port 80, c'est de la triche.

18

cherche SendKeys pour le 1er
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

19

la visionneuse d'api contient aussi les constantes (ainsi que les types, ca peut aider)

wm_dropfiles attend certainement un pointeur vers une chaine. dans ce cas là :

ptr=varptr(chaine) ou ptr=strptr(chaine) enfin yen a tjs un (voire les 2)qui plante le mieux est de transformer la chaine en tableau de bytes et de prendre le pointeur vers le premier élément du tableau. Attention le dernier octet de la chaine doit être zéro.

cad (pas testé, en live):

dim b as byte() 'il faut que ce soit une variable globale. Essayer avec "static b as byte()"

public function str_ptr_safe(byval s as string)
redim b(0 to len(s))
dim i as integer

for i= 1 to len(s)
b(i-1)=asc(mid(s,i,1))
next i

b(len(s))=0
str_ptr_safe=varptr(b(0))
end function

pense à sauver ton code à chaque fois avant de lancer l'exécution , quand le programme plante à cause de ça, ca fait planter tout vb happy

20

public function str_ptr_safe(byval s as string) as ?????
Tout ce qui passe pas par le port 80, c'est de la triche.

21

Long, mais cette routine ne m'a pas l'air correcte. Les chaînes de caractères VB sont stockées sous forme de BSTR, je ne suis pas sûr que VarPtr vous donne un pointeur vers le contenu et pas vers le BSTR.

La bonne manière de passer un char * à une routine en C est de mettre ByVal lpstr as String dans la déclaration de cette routine en C. Pour les chaînes de caractères, ByVal dans la déclaration signifie que VB passe un pointeur C à la fonction. Cela fonctionne même si c'est un buffer utilisé en écriture.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

22

oui , tu as raison kevin. Varptr ne donne pas en effet le bon pointeur, m$ recommande et a d'ailleurs créé la fonction StrPtr, qui est censée fonctionner pour les chaînes. En fait j'ai vu quelque part que ces deux fontions correspondaient au même point d'entrée dans la DLL runtime de VB. C'est pour cela que je me suis fait une fonction à ma sauce: les pointeurs vers des tableaux fonctionnent correctement, eux.

J'ai déja utilisé cette routine, elle marche tant que le tableau d'octets est défini dans la portée en cours (ie le bloc qui appelle la conversion). Il n'est pas nécessaire qu'elle soit globale, en fait. Ce qu'il ne faut pas faire (je le précise pas pour toi Kevin) c'est définir le tableau dans la fonction, car cette allocation mémoire sera détruite en quittant la fonction et le pointeur ne sera plus valide.

B refuse de donner un pointeur vers un tableau, on le feinte en lui donnant un pointeur vers le premier élément, ici le n° zéro (en toute rigueur il faudrait écrire VarPtr(b(LBound(b))Petite précision, V
à moins de spécifier quelque part Option Base 0 ou de définir explicitement la borne inférieure à 0.

Le retour est un long bien entendu, pointant vers la chaine à zéro terminal contenue dans b.

23

Tiens toi aussi tu ne sais pas écrire "MS" correctement ? C'est contagieux décidement...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

24

La procédure inverse (ptr->chaine) nécessite un API windows:

la déclaration originale est:
Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

On la modifie pour lui passer des pointeurs:
Declare Sub memcpy Lib "kernel32" Alias "RtlMoveMemory" (pDst As Long, pSrc As Long, ByVal ByteLen As Long)

public function ptr_str(byval p as Long) as String
ptr_str=""

'alloue un bloc de 1k
dim b(0 to 1023) as byte
dim done as boolean
done=false

dim i as integer
i=0

while not done
  memcpy(varptr(b(0)) , p+i, 1024)

  while b(i)<>0
    ptr_str=ptr_str+chr(b(i))
    i=i+1
  wend

  if i<1024 then
    'on est arrivé à la fin du bloc, pas la peine de recommencer
    done=true
  end if

wend

end function



ce code peut paraitre strange, mais il permet d'éviter tout transfert direct de mémoire entre le tableau et la chaine de VB, dont je suppose la structure inconnue.

edit pour Vertyos: il fait beau mais froid, ce matin.

25

Vertyos :
Tiens toi aussi tu ne sais pas écrire "MS" correctement ? C'est contagieux décidement...

ceci dit meme MS prete a confusion, tu devrais ecrire Microsoft espece d'enfoire vtff Est ce qu'on dit RH pour redhat hein ? ou encore FC pour fedora core ? rahh ces jeunes !!!


















dehors
avatar
納 豆パワー!
I becamed a natto!!!1!one!

26

Rahlala mais on va pouvoir faire du VB tranquille oui? grin

27

!!!!
Du quoi ? L'on dit Microsoft Visual Basic [troll flavor=truthful]ça permet d'identifier sans risque de confusion la merde que c'est[/troll]

28

[nosmile]Il y a lstrcpy et lstrlen aussi, d'ailleurs.
Copier un char* (la valeur de retour d'une DLL par exemple, sachant que les DLLs retournant un char* ne sont pas officiellement supportées et que la déclaration "évidente" est compilée correctement, a l'air de marcher, mais plante en quittant le programme) dans un String VB peut se faire de la manière suivante:
Private Declare Sub lstrcpy_Trick Lib "kernel32" Alias "lstrcpyA" (ByVal Dest$, ByVal Src&)
Private Declare Function lstrlen_Trick Lib "kernel32" Alias "lstrlenA" (ByVal lpString&) As Long
Dim A&, B$
A = ...
B = String(lstrlen_Trick(A), 0)
lstrcpy_Trick B, A
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

29

pas mal smile [troll favor=classic]vb rulez même si c'est pas la panacée[/troll]

30

Moi j'ai ca..

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

...

Dim hWnd As Long
hWnd = FindWindow("TEmuWnd", "Virtual TI-89")
If hWnd = 0 Then
    hWnd = FindWindow("TEmuWnd", "Virtual TI-92+")
End If
If hWnd = 0 Then
    MsgBox "Virtual TI is not running!!", vbMsgBoxHelpButton, "Emulation"
End If


vous voulez pas m'écrire le code qu'il me reste à taper (ou à copier-coller smile ) pour envoyer le fichier "C:\test.89z" par exemple???
kiss
Tout ce qui passe pas par le port 80, c'est de la triche.