• Domingo 6 de Julio de 2025, 07:13

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Black_angel

Páginas: [1]
1
Visual C++ / Archivos .h, .idl Y .lib
« en: Martes 14 de Diciembre de 2004, 19:27 »
Hola a todos,


sé que este foro es de sólo código y la cuestión que voy a plantear aquí trata en gran parte de una herramienta de desarrollo, pero sin embargo algunos conceptos creo que se pueden sacar también aparte.
En primer lugar estoy desarrollando una aplicación que tiene que utilizar la API RTC (Real Time Comunication) la cuál viene definida en los siguientes archivos:
Cabeceras: rtcoore.h, rtcoore.idl. (el archivo .idl sé que es un archivo de definición de interfaz, pero no tengo ni idea de qué hace ni para qué sirve, nisiquiera si me hace falta).
Librería a linkear: uuid.lib
Esta API es un objeto COM, cuya inicialización por ejemplo se haría de la siguiente forma (código sacado de microsoft):


_______________________________________________________

HRESULT hr = S_OK;
// RTC Initialization
// Note: Use the apartment threaded model because
// RTC applications are not thread safe.
::CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
// Create the RTC Client COM object.
IRTCClient *pIRTCClient;
hr = CoCreateInstance( CLSID_RTCClient,
NULL,
CLSCTX_INPROC_SERVER,
IID_IRTCClient,
reinterpret_cast<void **> (&pIRTCClient) );
// if (hr != S_OK) process error here.
// Initialize the RTCClient interface.
hr = pIRTCClient->Initialize();
// if (hr != S_OK) process error here.

________________________________________________________


El problema que tengo es el siguiente... esta aplicación la estoy desarrollando en "Embedded Visual C++" (es totalmente igual a "Visual C++" solo que para dispositivos móviles).
En el menú "Tools" -> "Options" en la pestaña de "Directories" incluyo para los archivo .h y .lib la ruta donde se encuentran, y en la ventana donde se encuentra el workspace y todos los archivos fuente, resources y de cabecera.. añado la librería uuid.lib (ésta también la tengo añadida en "Project" -> "Settings" en la pestaña de "Link" en "Object/Library modules").

Si compilo así la aplicación y la prueba me sale el siguiente error:
Linking...
InterfazExternaDlg.obj : error LNK2001: unresolved external symbol _CLSID_RTCClient
InterfazExternaDlg.obj : error LNK2001: unresolved external symbol _IID_IRTCClient
emulatorDbg/InterfazExterna.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Ahora lo que he hecho es probar añadiendo el archivo rtccore.idl al proyecto... y bueno... al probarlo me sale el siguiente error:

Creating Type Library...
rtccore.idl
oaidl.idl
objidl.idl
unknwn.idl
wtypes.idl
basetsd.h
ocidl.idl
oleidl.idl
control.odl
Error executing midl.exe.

InterfazExterna.exe - 1 error(s), 0 warning(s)




¿Qué es el archivo .idl? al ser un archivo de cabecera... ¿con utilizar el .h no valdría?
Como pueden ver tengo muchas dudas con esto de los objetos COM, su funcionamiento y cómo linkarlo todo para que funcione. A cualquier pequeña ayuda les estaría muy agradecido.
Aténtamente, y gracias de antemano por las respuestas:  :hola:


Black_angel.

2
VB .NET / Re: Fila Seleccionada De Datagrid
« en: Sábado 24 de Julio de 2004, 15:25 »
Ya he resuelto el problema del Datagrid en tiempo de ejecución, el código lo he sacado del libro Eidos de Visual Basic .NET que además modifica el tamaño de las columnas, pone colores,...

        ' Crear conexión
        Dim oConexion As System.Data.OleDb.OleDbConnection
        oConexion = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.IO.Directory.GetCurrentDirectory & "\persona.mdb")
        ' crear adaptador
        Dim oDataAdapter As System.Data.OleDb.OleDbDataAdapter
        oDataAdapter = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Persona WHERE Edad=20", oConexion)
        ' crear commandbuilder
        Dim oCB As System.Data.OleDb.OleDbCommandBuilder = New System.Data.OleDb.OleDbCommandBuilder(oDataAdapter)
        ' crear dataset
        'Dim odataSet As WindowsApplication2.DataSet1()
        'odataSet = New WindowsApplication2.DataSet1
        oDataAdapter.Fill(DataSet11, "Persona")
        ' asignar dataset al datagrid
        Me.DataGrid1.DataSource = DataSet11
        Me.DataGrid1.DataMember = "Persona"
        ' configurar grid por código
        Me.DataGrid1.Anchor = (AnchorStyles.Bottom + AnchorStyles.Left + AnchorStyles.Right + AnchorStyles.Top)
        Me.DataGrid1.CaptionText = "Datos de personas"
        Me.DataGrid1.CaptionBackColor = Color.Turquoise
        Me.DataGrid1.CaptionForeColor = Color.Black
        ' crear un objeto para estilos del datagrid
        Dim oEstiloGrid As New DataGridTableStyle
        oEstiloGrid.MappingName = "Persona"
        oEstiloGrid.BackColor = Color.LightGoldenrodYellow
        oEstiloGrid.AlternatingBackColor = Color.Aquamarine
        ' crear objetos de columna-grid para cada
        ' columna de la tabla a mostrar en el datagrid
        Dim oColGrid As DataGridTextBoxColumn
        ' configurar cada objeto de columna-grid
        oColGrid = New DataGridTextBoxColumn
        oColGrid.TextBox.Enabled = False
        oColGrid.Alignment = HorizontalAlignment.Center
        oColGrid.HeaderText = "Edad de la persona"
        ' nombre de la columna del dataset que
        ' se mapea hacia esta columna del grid
        oColGrid.MappingName = "Edad"
        oColGrid.Width = 50
        oColGrid.Alignment = oColGrid.Alignment.Left
 
        ' añadir la columna al objeto que contiene
        ' los estilos del datagrid, en concreto,
        ' a la colección de estilos de columna
        ' aquí solo pongo uno de ejemplo
        oEstiloGrid.GridColumnStyles.Add(oColGrid)
        oColGrid = Nothing
   
        ' una vez creadas todas las columnas de
        ' estilos para el grid, añadir el objeto
        ' que contiene el estilo personalizado
        ' a la colección de estilos de tablas
        ' del datagrid
        Me.DataGrid1.TableStyles.Add(oEstiloGrid)







Ahora tan solo me falta saber lo de que la sentencia SELECT te devuelva como máximo X tuplas.
Si alguien lo sabe le estaría muy agradecido si lo dijera.

Un saludo y gracias de nuevo :hola:

3
VB .NET / Re: Fila Seleccionada De Datagrid
« en: Viernes 23 de Julio de 2004, 16:15 »
Otra pregunta más,

   ¿Cómo podría hacer que el SELECT de la consulta SQL me devuelva como máximo un número "X" de tuplas? (por si la BD es muy grande que no esté mucho tiempo)

Gracias de nuevo de antemano por las respuestas :)

4
VB .NET / Re: Fila Seleccionada De Datagrid
« en: Viernes 23 de Julio de 2004, 14:47 »
Hola Seghio,
 
  gracias por contestar, he probado tu código pero no consigo hacer que funcione. Aquí pongo lo que tengo puesto a ver si es que tengo yo algo mal:

    Dim myCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM Persona WHERE Edad=20")
        myCommand.Connection = Me.OleDbConnection1   /*Esto lo he tenido que poner porque sino me daba error en la siguiente linea diciéndome que no estaba establecida la conexión*/
        Me.OleDbDataAdapter1.SelectCommand = myCommand

        'llenando el dataset
        Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Atleta")

        'ahora lo enlazas a la Grilla
        Me.DataGrid1.SetDataBinding(Me.DataSet11, "Atleta")
        Me.DataGrid1.Refresh()  /*Esto lo he puesto por si acaso, pero ni con él ni sin él me va*/



Ya he encontrado la función que devuelve la fila seleccionada, es la función CurrentRowIndex():

          MessageBox.Show(Me.DataGrid1.CurrentRowIndex())   te muestra el índice de la fila seleccionada.



Gracias de nuevo :hola:

5
VB .NET / Fila Seleccionada De Datagrid
« en: Jueves 22 de Julio de 2004, 18:06 »
Hola a todos de nuevo,

  Estoy construyendo un formulario el cuál quiero que muestre datos en un DataGrid.  Para ello he incluido un objeto OleDBDataAdapter "OleDBDataAdapter1", un objeto OleDbConnection "OleDbConnection1", un DataSet "DataSet1" y el DataGrid "DataGrid1".
He realizado la conexión de todos estos objetos según indica el libro de Eidos mediante el IDE poniendo como consulta SQL: SELECT * FROM PERSONA.  (La tabla persona contine los campos Clave, Nombre, Edad, Altura)

Hasta aquí todo correcto, doy a depurar y se muestran en el DataGrid todos los campos de la tabla PERSONA con sus correspondientes datos.
Ahora lo que quiero hacer es añadir un botón el cuál al ser pinchado coja el valor contenido en el campo "Clave" de la FILA SELECCIONADA por el usuario.
¿Cómo hago esto? ¿Qué propiedad de estos objetos creados me devuelve el valor de un campo "Clave" de la fila seleccionada?

Y otra pregunta, si en tiempo de ejecución quiero cambiar la consulta SQL por ejemplo poniendo una condición más: SELECT * FROM PERSONA WHERE Edad=20 sería el objeto OleDbDataAdapter el que tendría que utilizar? ¿de qué forma?

Gracias de antemano por las respuestas. Un saludo :hola:

6
VB .NET / Re: Ficheros
« en: Jueves 22 de Julio de 2004, 17:11 »
Hola!
 
  te paso la solución que se presenta en el libro de Eidos que creo que es lo que buscas, en el utilizan la clase StreamReader:



Un objeto StreamReader realiza operaciones de lectura de texto sobre un archivo.
El proceso que debemos llevar a cabo para leer el contenido de un Stream de lectura es muy similar al
de escritura: instanciar el objeto con uno de sus constructores, abriendo un archivo para leer; ejecutar
alguno de los métodos de lectura del StreamReader, y cerrar el objeto con Close( ).
Entre los métodos de lectura de este objeto, tenemos ReadLine( ), que devuelve una línea del archivo;
y ReadToEnd( ), que devuelve el resto del contenido del archivo, desde el punto en el que se
encontrara el Stream al realizar la última lectura. Veamos unos ejemplos en el Código fuente 414:

Dim srLector As StreamReader = New StreamReader("\pruebas\NOTAS.txt")
Console.WriteLine("**Leer una primera línea**")
Dim Linea As String
Linea = srLector.ReadLine()
Console.WriteLine("La línea contiene --> {0}", Linea)
Console.WriteLine()
Console.WriteLine("**Ahora leemos el resto del archivo**")
Dim Texto As String
Texto = srLector.ReadToEnd()
Console.WriteLine("El texto restante contiene --> {0}", Texto)
srLector.Close()
' ***********************************************
' leer línea a línea mediante un bucle
Dim srLector As StreamReader = New StreamReader("\pruebas\Datos.txt")
Dim Linea As String
Dim ContadorLin As Integer = 1
Linea = srLector.ReadLine()
Do While Not (Linea Is Nothing)
Console.WriteLine("Línea: {0} - Contenido: {1}", ContadorLin, Linea)
ContadorLin += 1
Linea = srLector.ReadLine()
Loop





Espero que te haya sido de ayuda.  Un saludo :hola:

7
VB .NET / Re: Error Al Acceder A La Bd
« en: Miércoles 14 de Julio de 2004, 19:48 »
Muchas gracias Amilius, me ha ayudado mucho tu respuesta.
     
    Ya solucioné el problema. Pongo aquí la solución por si a alguien algún día le hace falta.

        Dim MiCultura As System.Globalization.CultureInfo
        Dim MiFormato As System.Globalization.NumberFormatInfo = New System.Globalization.CultureInfo(MiCultura.CurrentCulture.ToString(), False).NumberFormat
        MiFormato.NumberDecimalSeparator = "."
        Dim dec1 As Decimal
        dec1 = dataReader("altura")
        Me.textboxaltura.Text = dec1.ToString("N", MiFormato)



Con esto creamos una clase MiFormato a la cuál indicamos cuál queremos que sea nuestro separador decimal.  Luego utilizamos este formato para convertir los números.

Os dejo aquí la página de donde he sacado el código:

http://www.microsoft.com/spanish/msdn/comu...ices/art116.asp


    Saludos y gracias :hola:

8
VB .NET / Error Al Acceder A La Bd
« en: Miércoles 14 de Julio de 2004, 16:50 »
Hola a todos,

  Estoy realizando una aplicación en VB.NET la cuál trabaja con una base de datos Acces .mdb.  Tengo una base de datos de personas en la cuál un campo (altura) está puesto de tipo "Doble" en Acces.
Dos de las funcionalidades de mi aplicación son añadir personas y modificar.
En el formulario de añadir tengo varios textbox de donde cojo los datos introducidos por el usuario: Nombre, Apellidos, Altura,... y los añade a la BD con una intrucción INSERT.
En el formulario de modificar, al cargar hay un combobox donde seleccionas la persona de la cuál quieres modificar sus datos y te aparecen los datos almacenados en la BD para que tú puedas cambiar el que quieras.
El problema es que en el formulario Modificar cuando te muestra los datos de las personas los valores reales en Acces separan la parte entera de la decimal con COMAS y claro, al hacer un UPDATE con el valor que está en ese textbox:
   UPDATE Atleta SET Nombre= 'Pepito', Apellido= 'Grillo', Altura=" & Me.textboxaltura.text & WHERE Nombre='Pepito'

da error de sintaxis UPDATE (Si altura es 1.80 ahí aparece en vez de con punto con coma y se confunde)


¿Hay alguna forma de pasar un String que represente un número con coma (Ej: 3.47 <con COMA entre el 3 y el 47>) a otro String o Double con punto (Ej: 3.47 <con PUNTO entre el 3 y el 47>)   ?

Gracias de antemano por las respuestas.

9
VB .NET / Re: Variables Globales A Un Proyecto
« en: Lunes 12 de Julio de 2004, 23:52 »
Muchas gracias Serghio por tu respuesta,

   El fichero Global.asa se utiliza en ASP.NET y con Assembly no he encontrado nada.

  De todas formas he solucionado mi problema más o menos de la siguiente forma:

En cada formulario, menos en el principal, he puesto dos variables Public cuyos nombres les he puesto "atras" y "principal" y en la acción del botón creo un nuevo formulario y le paso en los atributos "atras" y "principal" el formulario actual y el principal respectivamente. Al dar al botón "Atrás" de cada formulario hago un Me.close() que cierra SOLO ese formulario, y si doy al botón "Salir" de cada formulario hago un Me.principal.Close() que cierra todo.
Al no tener muchos formularios seguidos (como máximo en mi aplicación se pueden generar 3 formularios seguidos) tan solo están a la vez como máximo 3 ventanas, que no es un exceso grande de memoria.

10
VB .NET / Variables Globales A Un Proyecto
« en: Domingo 11 de Julio de 2004, 12:05 »
Hola a todos,

  Estoy intentando desarrollar una aplicación en VB.NET la cuál consta de varios formularios (unos 15 más o menos) de los cuales se pasa cuando se hace click en un botón.
Nada más me interesa tener un solo formulario visible.
En el código del botón tengo puesto lo siguiente:

        Dim atletas1 As Atletas
        atletas1 = New Atletas
        atletas1.Show()
        atletas1.Location() = Me.Location
        Me.Close()

pero claro, al estar utilizando una variable local propia del formulario, al hacer Me.Close() finalizan los 2 formularios.
He intentado crear un módulo de código y declarar las variable públicas ahí llamándolas luego de esta manera:

        MiModulo.atletas1= new Atletas
        MiModulo.atletas1.Show()
        MiModulo.atletas1.Location()=Me.Location
        Me.Close()

pero sigue pasando lo mismo.



También había pensado en  inicializar todos los formularios de que consta la aplicación en el formulario inicial poniendo luego todos en no visible menos con el que quiera trabajar en ese momento. Pero esto no supondría un uso excesivo de memoria?

Gracias de antemano por las respuestas.

11
C# / Re: Programación De Medios (audio)
« en: Martes 25 de Mayo de 2004, 10:01 »
Muchas gracias Juank,

  me pondré a investigar sobre lo que me has dicho. :)

12
C# / Programación De Medios (audio)
« en: Lunes 24 de Mayo de 2004, 21:01 »
Hola a todos,

  Me gustaría saber si con .NET es posible acceder a los dispositivos de sonido (micrófono) para grabar audio, codificarlo, decodificarlo, comprimirlo y descomprimirlo.
Quiero desarrollar una aplicación de telefonía IP para Windows y me encuentro en la fase de búsqueda de entornos de desarrollo y tecnologías con las que lo pueda desarrollar.
.NET me interesa debido a que luego esta aplicación tiene que ser portable y aque me gustaría iniciarme con esta arquitectura.

Java tiene un entorno de desarrollo que es el Java Media Framework que según me han dicho hace todas estas cosas, sin embargo, también me han dicho que dependiendo del S.O. no es totalmente portable.

Gracias a todos de antemano, un saludo:


   Black_angel. :hola:

13
Java / Re: Directorios Y Jar
« en: Martes 30 de Marzo de 2004, 00:07 »
Muchas gracias Juank.  Aunque sigue sin funcionarme.

  No sé que pasará, pero bueno... de todas formas tengo que formatear dentro de poco:)

14
Java / Re: Directorios Y Jar
« en: Sábado 27 de Marzo de 2004, 22:28 »
el problema más grande es que no consigo hacer poner la variable de entorno path ni classpath bien.
Tengo instalado el JDeveloper y me tengo que meter en la carpeta OraHome\jdk\bin (donde está el jar.exe) y poner ahí las clases.
En Windows--> variables de entorno, pongo la ruta en path de mi directorio de trabajo pero cuando voy a ejecutar el comando jar si no estoy en la carpeta OraHome\jdk\bin me dice que "jar" no se reconoce como un comando interno o externo.

Acabo de probar a poner el comando que me has dado desde mi directorio de trabajo donde está la carpeta "classes" y "audio":
   set classpath=;.;.\classes;I:\\OraHome1\jdk\lib
pero me sigue dando el error de que no reconoce el jar.

15
Java / Re: Directorios Y Jar
« en: Sábado 27 de Marzo de 2004, 21:54 »
Ya he conseguido que funcione, aunque para ello he tenido que poner todo en el mismo directorio y hacer el jar desde ese directorio (sin meter ningún subdirectorio)

jar cvfm practica.jar miPractica.mf \*

Yo creo que de la otra forma el .mf lo cogería mal.

Muchas gracias por la respuesta Juank :)

16
Java / Directorios Y Jar
« en: Sábado 27 de Marzo de 2004, 20:20 »
Hola a todos.

Mi problema es que tengo una práctica en una carpeta "carpeta" en la cual están la carpeta "classes" y la carpeta "audio"
En la carpeta "audio" se encuentra un archivo .wav
En la carpeta "classes" se encuentran todas las clases y el archivo miPractica.mf que identifica a la clase principal de esta forma:
    Main-Class: mmcc

"mmcc.class" es la clase que contiene el main.


Para hacer el jar ejecuto esta instrucción en la linea de comandos desde el directorio "carpeta":
    jar cvfm practica.jar miPractica.mf classes\* audio

El jar me lo hace, pero cuando ejecuto el jar:
    java -jar practica.jar

me da el siguiente error:
     Exception in thread "main" java.lang.NoClassDefFoundError: mmcc


Alguien sabe qué puedo estar haciendo mal? yo creo que el problema lo da el archivo .mf pero no sé cómo resolverlo.

   Les agradezco de antemano su ayuda.  Atentamente:

      Black_angel :)

17
C/C++ / Re: Valor Por Referencia
« en: Lunes 29 de Diciembre de 2003, 20:46 »
ey, muchas gracias plaf, hemos contestado casi a la vez, jeje. El * que dices del malloc al parecer no me da error, pero tienes razón, creo que sobra.
Muchas gracias!!

18
C/C++ / Re: Valor Por Referencia
« en: Lunes 29 de Diciembre de 2003, 20:42 »
Problema resuelto. El problema residía en el manejo de los apuntadores debido a que C pasa los parámetros por valor, hay que trabajar con apuntadores de apuntadores
  Por si acaso alguien alguna vez tiene el mismo problema dejo aquí el código correcto:

void Programa(void)
{
nodo_ref *dec_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref *));
una_funcion(&dec_listaerrores);
}


void una_funcion(nodo_ref **dec_listaerrores)
{
nodo_ref *dec1_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref));
nodo_ref *dec2_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref));
nodo_ref *aux=(nodo_ref *)malloc(sizeof(nodo_ref));
aux=NULL;
if (!strcmp(lookahead->cadena,"hola"))
{
   otra_funcion(&dec1_listaerrores);
   una_funcion(&dec2_listaerrores);
   aux= UNIR(dec1_listaerrores, dec2_listaerrores);
}

*dec_listaerrores= aux;
}


Un saludo para todos :hola:

19
C/C++ / Valor Por Referencia
« en: Lunes 29 de Diciembre de 2003, 10:11 »
Hola a todos, esta es la primera vez que entro en este foro, a ver si me pueden ayudar.
  Tengo un programa que trabaja llamando a funciones con argumentos que son apuntadores a estructuras, les pongo la parte de código que me interesa:

void Programa(void)
{
   nodo_ref *dec_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref *));
  una_funcion(dec_listaerrores);
}


void una_funcion(nodo_ref *dec_listaerrores)
{
   nodo_ref *dec1_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref));
   nodo_ref *dec2_listaerrores=(nodo_ref *)malloc(sizeof(nodo_ref));
  if (!strcmp(lookahead->cadena,"hola"))
    {
      otra_funcion(dec1_listaerrores);
      una_funcion(dec2_listaerrores);
      dec_listaerrores= UNIR(dec1_listaerrores, dec2_listaerrores);
    }
  else
   dec_listaerrores= NULL;
}


nodo_ref esta definido de la forma:
typedef struct e_nodo {
  int ref;
  struct e_nodo *sig;
} nodo_ref;



     El problema es que por ejemplo, si entro a "una_funcion" y lookahead->cadena no es "hola" se va por la parte del else asignando NULL a dec_listaerrores, pero cuando vuelve al procedimiento Programa dec_listaerrores ya no apunta a NULL.
  Espero haberme explicado bien. Les estaría muy agradecido si me explicasen porqué pasa esto y qué tengo que hacer para solucionarlo.
Muchas gracias de antemano. :hola:

Páginas: [1]