Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Acceso Mixto A Librerias EXTERNAS En C

Acceso Mixto A Librerias EXTERNAS En C
Artículo
Responder citando    Descargar mensaje  
Mensaje Acceso Mixto A Librerias EXTERNAS En C 
 
La pregunta va dirigida a todos, pero mas al querido Vuott quien habra picado con la carnada que le puse en el titulo  

Es posible acceder de manera mixta a una libreria que YA este implementada en gambas, pero de manera incompleta?

Por ejemplo tenemos Gb.OpenGL , pero hay funciones de OpenGL que no estan traducidas en gambas. Un ejemplo seria asi:
Lib "libGL"

Extern GLfunNotAvailable(x as float, y as Float)as Boolean


' esto si esta implementado de forma nativa
GL.Viewport(300,400)


Print funNotAvailable(4 , 8)
 
 




 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Sabado, 16 May 2020, 13:03 ]
 


Acceso Mixto A Librerias EXTERNAS En C
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
En términos generales, sí.

Un enorme problema, pero, surge si se tiene que compartir un handle.

Por ejemplo en tu simple caso en efecto no hay handle que compartir en común.



 
última edición por vuott el Sabado, 16 May 2020, 18:10; editado 2 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Sabado, 16 May 2020, 17:29 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
vuott escribió:  
En términos generales, sí.

Un enorme problema, pero, surge si se tiene que compartir un handle.

Por ejemplo en tu simple caso en efecto no hay handle que compartir en común.


supongamos que tenemos que compartir una imagen que esta en memoria o el Device Context donde esta operando GL de Gambas

en fin, habria que hacer alguna prueba.



 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Sabado, 16 May 2020, 18:54 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
tercoIDE escribió:  
Un enorme problema, pero, surge si se tiene que compartir un handle.

Exemplum clarissimum (hace falta activar el Componente gb.cairo):

Library "libcairo:2"

' cairo_t* cairo_create(cairo_surface_t *target)
' Creates a new cairo_t with all graphics state parameters set to default values and with target as a target surface.
Private Extern cairo_create(target As Pointer) As Pointer

Public Sub Main()
 
 Dim png As CairoSvgSurface
 Dim cairo As Pointer

  
' Especifica la superficie gráfica (en mm) a crear para dibujar sobre ella:
  png = New CairoSvgSurface(Null, 210, 297)

  cairo = cairo_create(Object.Address(png))

End




 
última edición por vuott el Sabado, 16 May 2020, 21:39; editado 2 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Sabado, 16 May 2020, 21:35 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
bien hecho, yo he intentado usar el mismo metodo con OpenGL y no lo logre


ahora se me ocurre otro desafio, dibujar una linea en una imagen en memoria, pero sin usar ninguna herramienta como cairo o paint, simplemente escribir en los bytes ARGB que representan la imagen



 
última edición por tercoIDE el Sabado, 16 May 2020, 22:03; editado 1 vez 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Sabado, 16 May 2020, 22:02 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
tercoIDE escribió:  
dibujar una linea en una imagen en memoria, pero sin usar ninguna herramienta como cairo o paint, simplemente escribir en los bytes ARGB que representan la imagen

En general, para leer o escribir en un flujo de memoria hace falta utilizar los recursos de Memory Stream.
En tu caso tienes que usar la Propiedad ".Data" del Objeto "Image" y el recurso Memory Stream para escribir nuevos datos en el flujo de la memoria que contiene los datos de la imagen.

Exemplum maximum (para este ejemplo hace falta activar los Componentes gb.image, gb.image.io, gb.net y gb.net.curl):

Private ht As New HttpClient As "HTTP"
Private stringa As String


Public Sub Main()
  
  With ht
' Envia una petición al Servidor para descargar los datos de la imagen :
    .URL = "https://foro.gambas-es.org/images/avatars/1496952105564e53f13da18.png"
    .Timeout = 15
' Descarga los datos de la imagen:
    .Get(Null, Null)
  End With
  
End

Public Sub HTTP_Read()  
    
 Dim sBuf As String  
    
' Va a leer el flujo de datos de la imagen:
   If Lof(ht) Then  
     Read #ht, sBuf, Lof(ht)
     stringa &= sBuf
   End If

End

Public Sub HTTP_Finished()
  
  Dim im As New Image
  
  Wait
  ht.Close
    
  ManuAgit(im.FromString(stringa))
  
End


Private Procedure ManuAgit(img As Image)
  
  Dim st As Stream
  Dim i As Integer
  
' Para escribir (o leer) en un flujo de datos en memoria, es necesario utilizar el tipo de datos "Stream":
  st = Memory img.Data For Write
  
' Edita la imagen con líneas verticales rojas:
  For i = img.W / 2 To (img.W * img.H * (img.Depth / 8)) - 1 Step img.W
    Seek #st, i
    Write #st, 255 As Byte  '' R
    Write #st, 0 As Byte    '' G
    Write #st, 0 As Byte    '' B
    Write #st, 255 As Byte  '' A
  Next
  
  st.Close
  
  img.Save("/tmp/nueva_imagen.png", 100)
  
End



https://www.gambas-it.org/wiki/inde...i_Memory_Stream



 
última edición por vuott el Domingo, 17 May 2020, 15:47; editado 9 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 17 May 2020, 00:26 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
hice una pequeña app con tu codice
 

captura_de_pantalla_de_2020_05_17_00_04_33



 
tercoIDE - Ver perfil del usuario Enviar mensaje privado  
tercoIDE [ Domingo, 17 May 2020, 04:05 ]
Responder citando    Descargar mensaje  
Mensaje Re: Acceso Mixto A Librerias EXTERNAS En C 
 
vuott escribió:  
En términos generales, sí.

Un enorme problema, pero, surge si se tiene que compartir un handle.


Por ejemplo podemos pasar a funciones externas de C variables, que no sean Objetos "stricto sensu" de Clases de gambas, como las no estructuradas de tipos numérico; y podemos tambien Array, Estructuras, Punteros.

Imposible gestionar handle de librerias especificas, desde gambas a C y viceversa.  



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Lunes, 18 May 2020, 01:10 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 2 invitados
Usuarios registrados conectados: Ninguno


 



 

cron