Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Acceso Mixto A Librerias EXTERNAS En C
Autor Mensaje
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)
 
 

 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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.
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
"Los IF son mas rápidos" - autor anónimo
 
última edición por tercoIDE el Sabado, 16 May 2020, 22:03; editado 1 vez 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
"Los IF son mas rápidos" - autor anónimo
 
tercoIDE - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Error De Acceso Al Foro Ender Sobre Gambas-es 5 Viernes, 22 Enero 2010, 22:45 Ver último mensaje
Capa
No hay nuevos mensajes Acceso Denegado Al Escribir heyplaynow General 4 Miercoles, 10 Octobre 2012, 18:52 Ver último mensaje
heyplaynow
No hay nuevos mensajes Acceso A Librerías Externas jcarloscamargo General 4 Miercoles, 21 Noviembre 2012, 08:16 Ver último mensaje
jcarloscamargo
No hay nuevos mensajes OpenGL A Traves De Las LIBRERIAS EXTERNAS ... tercoIDE General 7 Domingo, 17 May 2020, 23:10 Ver último mensaje
tercoIDE
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron