Créer une dll avec purebasic pour gamemaker

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Créer une dll avec purebasic pour gamemaker

Message par blendman »

salut

j'aimerai créer une dll pour gamemaker (pour pouvoir utiliser la tablette wacom avec). J'ai trouvé un code, mais je ne parviens pas à convertir la première ligne, je ne sais pas si c'est possible en purebasic d'ailleurs.

Code : Tout sélectionner

#define GMEXPORT extern "C" __declspec (dllexport)

GMEXPORT double SampleFunction(double a, double b) {
return a * b;
}
Une idée de ce que je dois mettre à la place de la 1ère ligne dans purebasic ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer une dll avec purebasic pour gamemaker

Message par G-Rom »

Rien , la macro GMEXPORT sert surtout pour que la fonction ne soit pas décorée par le compilateur lors de la compilation, ex: SampleFunction@16 deviens SampleFunction , ou avec du mangling ( regarde sur google ). n'oublie pas que la plupart du temps , les macro en C sont des directives pour le compilateur

Pb ne décore pas les fonctions, donc pas de problème ta fonction deviens tout simplement :

Code : Tout sélectionner

ProcedureDLL SampleFunction(a.d, b.d)
procedurereturn a*b
endProcedure
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Créer une dll avec purebasic pour gamemaker

Message par falsam »

Je ne sais pas si c'est toujours vrai : GM supporte uniquement les variable doubles et les strings.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Créer une dll avec purebasic pour gamemaker

Message par blendman »

salut

Merci pour les infos. J'ai testé, mais ça ne marche pas toujours comme il faudrait.
J'ai testé plusieurs fonctions :

Code : Tout sélectionner

; This procedure is called once, when the program loads the library
; for the first time. All init stuffs can be done here (but not DirectX init)
ProcedureDLL AttachProcess(Instance)
; juste pour voir si ça marche
  If OpenWindow(0,50,50,500,200,"Window test",#PB_Window_SystemMenu)
    CreateMenu(0,WindowID(0))
    MenuTitle("Files")
  EndIf
EndProcedure

; Called when the program release (free) the DLL
ProcedureDLL DetachProcess(Instance)
  CloseWindow(0)
EndProcedure

; Both are called when a thread in a program call or release (free) the DLL
ProcedureDLL AttachThread(Instance)
EndProcedure

ProcedureDLL DetachThread(Instance)
EndProcedure

; Real code start here..
ProcedureDLL EasyRequester(Title.s,Message.s)  
  MessageRequester(Title, Message)  
EndProcedure

ProcedureDLL SampleFunction(a.d, b.d)
  ProcedureReturn a*b
EndProcedure
La fenêtre avec menu s'ouvre correctement.
Par contre, la fonction easyRequester m'affiche un texte en chinois au lieu du texte en français que je mets dans GameMAker ^^.
Et la fonction SampleFunction ne me renvoie rien dans GM.

Dans GM, je crée ce script que je lance (pour initialiser la dll) :

Code : Tout sélectionner

//InitDLL script:
global.foo = external_define("puredll.dll", "SampleFunction", dll_cdecl, ty_real, 2, ty_real, ty_real);
global.EasyReq = external_define("puredll.dll", "EasyRequester", dll_cdecl, ty_real, 2, ty_string, ty_string);
Puis, je crée ce script pour interroger une des fonctions (SampleFunction())

Code : Tout sélectionner

show_message("Start result")
result = external_call(global.foo, argument0, argument1)
show_message(string(result))
return result
Mais le 2ème show_message() (une sorte de message_requester()) ne se lance pas, on dirait que ça s'arrête juste après External_call(), mais qu'il n'y a rien en retour.
Bref, ça marchouille si on ne veut rien recevoir en retour, mais si on attend de recevoir une valeur, ça ne marche pas.
Dommage ^^.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Créer une dll avec purebasic pour gamemaker

Message par G-Rom »

Essaye peu etre de compilé en unicode ?
Et la fonction SampleFunction ne me renvoie rien dans GM.
j'ai oublié le .d après procedureDLL :

Code : Tout sélectionner

ProcedureDLL.d
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Créer une dll avec purebasic pour gamemaker

Message par blendman »

Yes !
J'ai enlevé le support Unicode et pour le texte c'est nickel .
J'ai aussi ajouté le .d de la procédure et ça marche superaussi désormais !

Un grand merci, je vais voir ce que je peux faire avec le code pb que j'ai trouvé pour les tablettes graphiques (wacom), mais je ne crois que j'arriverai à en faire une dll ^^. On verra bien.
Peut-être que je devrais prendre wintablet.dll et essayer de l'utiliser directement.

Encore merci ;).
Répondre