Recursos -servidor OLE para usar con 32 bits

Actualizado: 26/May/97
Bajate los listados y el ejecutable (recursos.zip 6.10 KB)


Los recursos del sistema, (System, GDI y User), sólo se pueden obtener con aplicaciones de 16 bits, usando el API de Windows, por supuesto.

Este "servidor OLE" es un ejecutable de 16 bits (VB4) que expone una clase con un método que nos informa de la cantidad de recursos libres.
Se puede usar tanto en aplicaciones de 16 como de 32 bits, aunque en 16 bits no tiene demasiado "interés" ya que se pueden obtener directamente, sin necesidad de tanta "sobrecarga".

La forma de usar este servidor OLE es bien sencilla:

  • En primer lugar deberás ejecutar (o compilar, si tienes el VB4 de 16 bits) el archivo recursos.exe, de esta forma se creará el servidor OLE y se registrará para usarlo en cualquier proyecto VB4.
  • Una vez registrado podrás "referenciarlo" en cualquier proyecto y sólo deberás hacer una referencia a la clase cRecursos y usar el método Recursos para obtener los "idem" del Sistema, GDI y User.

No te preocupes, que aquí está el código del "servidor OLE" y un ejemplo de cómo usarlo.

recursos.vbp

Este proyecto consta de un módulo BAS, para usarlo como punto de entrada y una clase que es la que se encarga de proporcionar el método que nos interesa para saber los recursos libres.
El módulo es "super simple" ya que sólo tiene un procedimiento: MAIN que es el punto de entrada al ejecutable.

'--------------------------------------------------
'OLEMain.bas                            (11/Jun/96)
'©Guillermo Som, 1996
'
'Módulo genérico para Librerías OLE
'--------------------------------------------------
Option Explicit
Sub Main()
    '
    'Sub Main es necesario para in-process OLE server
    '
End Sub

La clase es la siguiente:

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "cRecursos"
Attribute VB_Creatable = True
Attribute VB_Exposed = True
'----------------------------------------------------------------
'Clase para obtener los recursos del sistema        (26/May/97)
'
'La intención de esta clase es crear una librería OLE de 16 bits
'(realmente debe ser un EXE, ya que no tiene un form modal)
'que devuelva los recursos del sistema en aplicaciones de 32 bits
'----------------------------------------------------------------
Option Explicit

'Función de 16 bits del API de Windows
Private Declare Function GetFreeSystemResources Lib "User" (ByVal fuSysResource As Integer) As Integer


Public Sub Recursos(iSystem%, iGDI%, iUser%)
    'Constantes para usar con GetFreeSystemResources()
    Const GFSR_SYSTEMRESOURCES = &H0
    Const GFSR_GDIRESOURCES = &H1
    Const GFSR_USERRESOURCES = &H2
    
    'Obtener los Recursos...
    ' SYSTEM = 0, GDI = 1, USER = 2
    iSystem = GetFreeSystemResources(GFSR_SYSTEMRESOURCES)
    iGDI = GetFreeSystemResources(GFSR_GDIRESOURCES)
    iUser = GetFreeSystemResources(GFSR_USERRESOURCES)

End Sub

Como puedes comprobar tampoco es demasiado complicada. Y la única función es, precisamente la que debe tener, devolver los recursos; para ello se usa el método Recursos, como parámetros se usan las variables en las que se almacenarán los valores.

A continuación te muestro el form de prueba. Este deberás hacerlo en VB4 de 32 bits.
Aquí tienes el listado y una "instantánea" del mismo.

'-------------------------------------------------------
'Prueba de recursos en 32 bits usando OLE de 16 bits
'
'El archivo Recursos.exe deberá estar registrado, para
'hacerlo sólo es necesario ejecutar el programa para que
'se registre en el sistema.
'
'(c)Guillermo Som, 26/May/1997
'-------------------------------------------------------
Option Explicit


Private Sub cmdActualizar_Click()
    'leer los recursos de la clase cRecursos
    Dim info16 As New cRecursos
    
    Dim iSystem%, iGDI%, iUser%
    
    info16.Recursos iSystem, iGDI, iUser
    
    lblRecursos(3) = iSystem & "%"
    lblRecursos(4) = iGDI & "%"
    lblRecursos(5) = iUser & "%"

End Sub


Private Sub Form_Load()
    cmdActualizar_Click
End Sub


Private Sub Form_Unload(Cancel As Integer)
    Set Form1 = Nothing
End Sub

Y esto es todo. Dicen que lo bueno si breve, dos veces bueno... 8-)

Nota: Al compilarlo con VB5, sólo me ha funcionado en p-code, no en código nativo.


ir al índice