Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Utilisation de PANORAMIC.DLL avec FreeBASIC | |
| | Auteur | Message |
---|
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Utilisation de PANORAMIC.DLL avec FreeBASIC Mar 5 Juin 2012 - 10:17 | |
| J'ai mis sur mon site une archive contenant : - la liste des sous-programmes exportés par la DLL panoramic.dll - la bibliothèque d'importation pour FreeBASIC : libpanoramic.dll.a http://www.unilim.fr/pages_perso/jean.debord/panoramic/fbpano.zipPour utiliser la DLL avec FreeBASIC, il faut : - placer panoramic.dll dans WINDOWS\SYSTEM (ou équivalent) - placer libpanoramic.dll.a dans le sous-répertoire LIB\WIN32 de FreeBASIC Voici un exemple d'utilisation (pour le moment, je n'ai réussi qu'à afficher une fenêtre) : - Code:
-
#inclib "panoramic"
declare sub pn_form cdecl alias "pn_form" ( byval num as integer ) declare sub pn_left cdecl alias "pn_left" ( byval num as integer, byval p_left as integer ) declare sub pn_width cdecl alias "pn_width" ( byval num as integer, byval p_width as integer ) declare sub pn_top cdecl alias "pn_top" ( byval num as integer, byval p_top as integer ) declare sub pn_height cdecl alias "pn_height" ( byval num as integer, byval p_height as integer )
pn_form 1 pn_left 1, 200 pn_width 1, 500 pn_top 1, 200 pn_height 1, 500
sleep
La fenêtre s'affiche bien, mais je n'arrive pas à y placer des objets (boutons ...) Et quand je donne à la fenêtre le numéro zéro, cela provoque un plantage ! | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Utilisation de PANORAMIC.DLL avec FreeBASIC Mar 5 Juin 2012 - 10:51 | |
| Bravo pour tes essais, tu es dans la bonne voie. Mais pour utiliser panoramic.dll, il faut passer par une application Windows en FreeBasic avec en particulier une "pompe à message", sinon FORM0 ne réagira pas. D'autre part, la DLL doit être initialisée par l'appel de pn_init, puis terminée par pn_close. pn_init crée la fenêtre de numéro 0 (FORM0), et c'est pour cela que tu ne peux pas la créer par ta méthode.
Tu me demandais le .bi dans un autre message, mais comme tu le vois, il n'y a pas de bibliothèque. A la traduction, un seul source se construit automatiquement, en fonction des mots-clés trouvés dans le source. Il n'y a pas besoin de bibliothèque d'appels.
Dans le source utilisé pour la démo, les mots-clés trouvés sont: width height picture full_space color 2d_circle 2d_flood caption et il n'y a donc dans le source FreeBasic des déclarations que pour ces mots-clés.
Attention: panoramic.dll a volontairement été limitée à 5 objets. En la limitant, j'empêche ainsi toute utilisation véritable, car cette DLL n'est que le résultat d'un essai de faisabilité et rien de plus. Je ne sais pas encore si j'utiliserai une DLL ou un exécutable avec le code compilé.
Dernière édition par Jack le Mar 5 Juin 2012 - 20:55, édité 1 fois | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Utilisation de PANORAMIC.DLL avec FreeBASIC Mar 5 Juin 2012 - 17:13 | |
| Merci pour cet exemple Jack. Je vais l'étudier attentivement. Mon but est de transformer mes applications qui pour le moment utilisent un programme principal en Panoramic et une DLL en FreeBASIC. Je préférerais faire l'inverse (programme principal en FB avec appels de PANORAMIC.DLL). Cela éviterait les limitations dues à la syntaxe des fonctions DLL_CALL ou à la difficulté d'utiliser plusieurs DLLs en Panoramic. Et comme tu as parlé de faire du calcul matriciel en Panoramic, j'ai toute une bibliothèque en FB que je pourrais mettre à disposition. Donc tu vois c'est bien pour la bonne cause | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Utilisation de PANORAMIC.DLL avec FreeBASIC Mer 6 Juin 2012 - 9:54 | |
| Voici donc mon programme modifié. Il se contente d'afficher un seul bouton. - Code:
-
#include once "windows.bi"
'=============================================================================== ' DECLARATION DES PROCEDURES DE LA DLL ' (ceci pourrait aller dans un fichier *.bi) '===============================================================================
#inclib "panoramic"
declare sub pn_init cdecl alias "pn_init" ( byval h as handle ) declare sub pn_close cdecl alias "pn_close" ( )
declare sub pn_button cdecl alias "pn_button" ( byval num as integer ) declare sub pn_left cdecl alias "pn_left" ( byval num as integer, byval p_left as integer ) declare sub pn_width cdecl alias "pn_width" ( byval num as integer, byval p_width as integer ) declare sub pn_top cdecl alias "pn_top" ( byval num as integer, byval p_top as integer ) declare sub pn_height cdecl alias "pn_height" ( byval num as integer, byval p_height as integer ) declare sub pn_caption cdecl alias "pn_caption" ( byval num as integer, byval p_caption as string )
'=============================================================================== ' LANCEMENT WINDOWS '===============================================================================
declare function WinMain ( byval hInstance as HINSTANCE, _ byval hPrevInstance as HINSTANCE, _ byval szCmdLine as string, _ byval iCmdShow as integer ) as integer
WinMain( GetModuleHandle( null ), null, Command( ), SW_NORMAL )
'-------------------------------------------------------------------------------
function WndProc (byval hWnd as HWND, _ byval wMsg as UINT, _ byval wParam as WPARAM, _ byval lParam as LPARAM ) as LRESULT function = 0
select case( wMsg )
case WM_CREATE exit function case WM_KEYDOWN if (lobyte(wParam ) = 27) then PostMessage(hWnd, WM_CLOSE, 0, 0 ) end if
case WM_DESTROY pn_close() sleep 100 ' DyLibFree( library ) PostQuitMessage( 0 ) exit function
end select function = DefWindowProc( hWnd, wMsg, wParam, lParam ) end function
' ------------------------------------------------------------------------------
function WinMain (byval hInstance as HINSTANCE, _ byval hPrevInstance as HINSTANCE, _ byval szCmdLine as string, _ byval iCmdShow as integer ) as integer dim wMsg as MSG dim wcls as WNDCLASS dim hWnd as HWND function = 0 with wcls .style = CS_HREDRAW or CS_VREDRAW .lpfnWndProc = @WndProc .cbClsExtra = 0 .cbWndExtra = 0 .hInstance = hInstance .hIcon = LoadIcon( NULL, IDI_APPLICATION ) .hCursor = LoadCursor( NULL, IDC_ARROW ) .hbrBackground = GetStockObject( WHITE_BRUSH ) .lpszMenuName = NULL .lpszClassName = @"HelloWin" end with if (RegisterClass( @wcls ) = FALSE ) then MessageBox( null, "Failed to register wcls", "Error", MB_ICONERROR ) exit function end if hWnd = CreateWindowEx(0, _ @"HelloWin", _ "ESSAI_DLL", _ WS_OVERLAPPEDWINDOW, _ 200, _ ' LEFT 200, _ ' TOP 500, _ ' WIDTH 500, _ ' HEIGHT NULL, _ NULL, _ hInstance, _ NULL ) ShowWindow( hWnd, iCmdShow ) UpdateWindow( hWnd )
'=============================================================================== ' SOURCE PANORAMIC '===============================================================================
pn_init(hWnd)
pn_button 1 pn_left 1, 50 pn_width 1, 450 pn_top 1, 50 pn_height 1, 50 pn_caption 1, "Un gros bouton"
'=============================================================================== ' BOUCLE ACTIVE DE TRAITEMENT D'EVENEMENTS '===============================================================================
while( GetMessage( @wMsg, NULL, 0, 0 ) <> FALSE ) TranslateMessage( @wMsg ) DispatchMessage( @wMsg ) wend function = wMsg.wParam
end function
A noter qu'on a 2 fenêtres : une intitulée "PANORAMIC V 1.0 alpha" et une intitulée "ESSAI_DLL". | |
| | | Contenu sponsorisé
| Sujet: Re: Utilisation de PANORAMIC.DLL avec FreeBASIC | |
| |
| | | | Utilisation de PANORAMIC.DLL avec FreeBASIC | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |