PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  22421 - COMO HACER QUE CODIGO C NO SEA INTERRUMPIDO POR OTRA APLICA.
Autor:  Fabio Zorzan
Estoy programando con Builder C++ bajo windows98 un sistema de adquisicion de datos, y necesito saber alguna forma de ejecutar parte del codigo del sistema sin que sea interrumpido por alguna otra tarea que se este ejecutando en ese momento.
  Respuesta:  Boyo
Prueba a crear un thread que se encargue de capturar esos datos, y a continuación le das una prioridad máxima con valor THREAD_PRIORITY_TIME_CRITICAL

    Pregunta:  22464 - LLAMAR A UN ACTIVE X DLL DE VISUAL BASIC DESDE UNA DLL EN C
Autor:  Miguel Angel Cortes Diaz
Hola a tod@s! Tengo una Dll Acive X desarrollada con Visual Basic 6.0 a la que necesitan acceder desde un programa C consola, de tal manera, que no permite instanciar controles Active X, pero sí hacer llamadas a Dll's.
Había pensado montar una Dll Windows32 (no Dll MFC) que instancie el control, llame a los métodos de este, y retorne el resultado a través del punto de entrada de la Dll.
Quisiera saber si esto es posible, y de ser así, como hacerlo. Porque lo que he conseguido hacer es una Dll MFC y utilizar el Wizard para instanciar el control, pero esto me da luego problemas al compilar el programa y creo que es porque la Dll tiene que ser Windows32 y no MFC.
Gracias anticipadas.!!!
  Respuesta:  Javier Muñoz
Hola Miguel.
Es totalmente posible acceder una libreria ActiveX desde un programa consola, solo que necesitas usar un poco de C++ y las librerias COM.
Los objetos ActiveX son un subset de las librerias COM de windows (con COM me refiero a las tecnologias DCOM y COM+ tambien).
Me imagino que estas usando Visual C++ (por tus comentarios acerca de MFC) lo que hace muy facil el trabajo. Lo que tienes que hacer es utilizar el la directiva de preprocesador propietaria de Microsoft "#import"
busca en google para que sepas como se usa (ejem: #import "c:\WINDOWS\system32\WINHTTP5.DLL"). Añades tus cabezeras "windows.h" y preparate a usar COM.
La directiva #import creara por ti los archivos de cabezera necesarios para usar la libreria (a partir de los Typelibs), por lo que luego puedes incluirlas directamente y eliminar la directiva #import si quieres desligar la estructura de directorio (el C:\Windows... etc..)

Lo primero que debes hacer para usar COM es iniciar la libreria con la funcion, ::CoInitialize();
Luego creas instancias de los objetos llamado la funcion:
::CoCreateInstance(...);
Y terminas el programa con una llamada a:
::CoUnintialize();
.. para limpiar todo.

te recomiendo que busques tutoriales y/o informacion acerca del COM. Es muy util saber esto sobre todo cuando usas VB para programar. Es muy util para crear librerias COM en C++ para las cosas de bajo nivel y utilizarlas desde VB para el UI y demas operaciones comunes.

Otro dato importante es que trates siempre de utilizar SmartPointers (lo veras en los tutoriales de COM, es casi el standart-de-facto) y maneja todo tu codigo COM dentro de una estructura de manejo de Excepciones tipo try-catch (mucho mas facil que el manejo tipo C de los ejemplos M$).

Hay 2 libros muy buenos sobre la materia, uno es "C++ for VB Programmers" por Jonathan Morrison (ISBN 1-893115-76-3) excelente para todos los aspectos de la integracion entre VB y C++, y el otro el "INSIDE COM" por Microsoft Press, que considero como la Biblia del COM.

Mucha suerte. Javier

    Pregunta:  22533 - PROCESOS CARGADOS EN MEMORIA
Autor:  Richard Franco
Estoy haciendo un programa en C que debe mostrar los procesos cargados en memoria. Me he enterado que se debe utilizar el servicio 52h, junto con la instruccion int86x o intdosx.
Quisiera saber un poco mas .....
  Respuesta:  David Cañadas
Hola.

Existen multitud de referencias al respecto de las interrupciones de la arquitectura Intel x86. Simplemente es necesario buscar un poco en la red.

Existe una muy buena llamada Help PC, donde además vienen ayudas para muchas más cosas. Busca en Google.

También es muy posible que encuentres información al respecto en www.programmersheaven.com.

Salu2.

    Pregunta:  22552 - PROGRAMACION DEL ALGORITMO DE DESC
Autor:  royman quintero perez
Primera vez que consulto en internet y les agradezco como programo el desc que es un algoritmo de criptografia o sino donde lo consigo el archivo fuente y el ejecutable.

muchas gracias por su atencion prestada y les agradezco por favor pueden enviarmelo lo mas pronto posible es urgente( ojala que sea antes del lunes).
  Respuesta:  Hernan Berguan
http://www.eskimo.com/~weidai/cryptlib.html

    Pregunta:  22562 - BITMAP DESDE UN RECURSO EN VISUAL C++
Autor:  Maria Encarnacion Navarro Gomez
Hola a todos,
Estoy intentando pegar un Bitmap a un documento para luego imprimirlo, el documento esta creado y ya funciona pero intento insertar el bitmap y me da errores. La implementacion que utilizo es la siguiente:

void PrintBitmap (CDC* pDC)
{
CDC* pDisplayMemDC = new CDC;
Cbitmap* pBitmap = new Cbitmap;
PBitmap->LoadBitmap(IDB_LEAVES);
PDisplayMemDC->CreateCompatibleDC(pDC);
Cbitmap* pOldBitmap = (Cbitmap*)
PDisplayMemDC->SelectObject (pBitmap);
PDC-> BitBlt (100,100,200,150, pDisplayMemDC, 0, 0, SRCCOPY);
Delete pDisplayMemDC->SelectObject (pOldBitmap);
Delete pDisplayMemDC;
}

En todo el documento trabajo con el manejador tipo HDC y en este caso trabajo con la clase CDC, no se como arreglarlo. Al compilar me dice que CDC, Cbitmap, etc. no existe.
Muchas gracias.
Mari

  Respuesta:  Alvaro Salvatierra Salas
Hola Mari
Te indico el código necesario para insertar un mapa de bits en el área cliente de una aplicación Visual C, como respuesta a un click en el menu

1.- el proyecto consta de 4 archivos: bitmap.h , resource.h , bitmap.rc y bitmap.cpp

2.- lineas a agregar en bitmap.rc ( se supone que está definido un recurso MENU):
MENUITEM "Insertar Bitmap" IDM_INSBM
IDR_BM1 BITMAP "C:\\MISDOC\\ARCHIVO.BMP"

3.- incluir esta linea en resource.h
#define IDM_INSBM 103 // u otro numero vacante

4.- en archivo bitmap.h, donde se definen las clases ,agregar las siguientes lineas en la definición de clase de ventana CMainWin:
CBitmap m_bm1;
afx_msg void OnInsertBM() // manejador de mensaje

5.- en archivo bitmap.cpp incluir:
#include <afxwin.h> // para usar clases MFC: CDC, CBitmap, etc
#include "bitmap.h"
#include "resource.h"
ON_COMMAND (IDM_INSBM , OnInsertBM) // esta linea dentro del mapa de mensajes.
afx_msg void CMainWin::OnInsertBM() // def. de funcion
{
m_bm1.LoadBitmap(" IDR_BM1") ;
CClientDC DC(this);
CDC memDC ;
memDC. CreateCompatibleDC ( &DC) ;
memDC. SelectObject ( & m_bm1) ;
DC. BitBlt ( 10 , 10, 64 , 64 , &memDC , 0 , 0 , SRCCOPY );
}

(Nota: El contenido de la ventana se pierde al minimizar y restaurar la ventana. Para solucionar eso se debe usar ventana virtual y copiarla a la ventana física cada vez que se reciba mensaje WM_PAINT )
Espero que el ejemplo te sea de utilidad.
Saludos.


    Pregunta:  22649 - ACCEDER A LAS INTERRUPCIONES DEL PC CON ENSAMBLADOR EN C
Autor:  john carlos gonzalez
Hola mi pregunta es como puedo observar los procesos cargados en la memoria, utilizando interrupciones en assembler bajo los comandos de C. Necesito entrar a la memoria en el momento de ejecucion encontrar las direcciones de los procesos y traerlos a la pantalla.

Gracias
  Respuesta:  jon saz
Puedes declarar funciones public extern en un documento en ensamblador y aqui invocar los servicios para las interrupciones, seguido llamarlas desde c++,
Otra forma más rudimentaria es usar el ensamblador en linea
ens {
// instrucciones en ensamblador

}

    Pregunta:  22773 - COMO DECLARAR VARIABLES GLOBALES
Autor:  Lucio quirino rodriguez
Quisiera saber como puedo declara variables globales para ser utilizadas en diferentes dialog Base. Si es posible explicar por medio de un ejemplo le estare muy agradecido.
Gracias.
  Respuesta:  carlos ernesto zavala lópez
Bueno Lucio yo te puedo decir como declarar variables globales pero en c/c++, espero que esto te de una idea.
En c/c++ vos declaras variables globales antes de cualquier función inclusive antes del main, de esta manera el compílador leerá esta variable donde sea que la ocupes.
ej:
#include<stdio.h>
float test;
main( )

    Pregunta:  22814 - ALGORITMO PARA EL CALCULO DE LA MATRIZ INVERSA
Autor:  Luis garcia
alguien sabe el algoritmo para resolver una matriz inversa, partiendo de gauss y usando la matriz identidad, y que aparte obtenga los resultados de las incognitas.
Se los agradecer mucho.
Gracias.
  Respuesta:  Fredy Diaz

//Aqui el codigo fuente para calcular la inversa de la matriz
void MtrizInvrsa(float vfMtriz[][], BOOL &bError)
{
int i, j, k;

float fPbte1 = 0.0f, fPbte2 = 0.0f;

float vfInvrsa[20][20];

// Asignar unos (1) a su Diagonal - Matriz Identidad.

for (i = 0; i < 20; i++) // Asignar unos.
vfInvrsa[i][i] = 1.0f;

// Calcular la Inversa de la matriz.

for (j = 0; j < 20; j++) // Para cada Columna.
for (i = 0; i < 20; i++) // Para cada Fila.
{
if (i == j || vfMtriz[i][j] == 0)
continue;

fPbte1 = vfMtriz[j][j];
fPbte2 = vfMtriz[i][j];

for (k = 0; k < 20; k++)
{
vfInvrsa[i][k] = vfInvrsa[i][k] * fPbte1 - vfInvrsa[j][k] * fPbte2;
vfMtriz[i][k] = vfMtriz[i][k] * fPbte1 - vfMtriz[j][k] * fPbte2;
}
}
  Respuesta:  Victor Juquila
pones la matriz identidad al lado derecho de la matriz de la cual quieres encontrar la inversa (matriz aumentada con identidad), reduces la nueva matriz de tal forma que la matriz de la izquierda quede en su forma escalonada reducida, la matriz inversa ocupara el lugar de donde pusiste originalmente la matriz identidad.

    Pregunta:  22846 - COMO AGREGAR UN DIA A LA FECHA ACTUAL
Autor:  Roberto Garcia
Como agregar un dia a la fecha actual, sin el uso de clases.
Existe alguna funcion en Visual C++ ?
  Respuesta:  Javier Allende
q es ño q kieres realmente hacer pq no pruebas con la funcion getdate de la libreria dos.h de alli sacas la fecha del sistema pero pa modificarla no se si puedes usar la funcion settime

    Pregunta:  23025 - ERROR EN LA CREACIÓN DE UNA CLASE
Autor:  marta leal polo
Hola!! me gustaria saber como reservar memoria para una matriz, yo en la clase lo he declarado asi:

class CGraf¨{
int *array;
a la hora de hacer el constructor por defecto he hecho:
array = new int[0,0];
en el constructor por parametros:
array = new int [i ,i];
y en el destructor :
delete [] array;
pero peta, alguien me podria decir otra forma de hacerlo o lo que estoy haciendo mal, me urge un poco.
Ah! se me olvidaba, alguien sabe sobrecargar el operador '()'??
Gracias a todos.
  Respuesta:  Claudio Tessone
Tendrias que hacerlo asi (no se si es un typo de tu mensaje los errores que aparecen)

class CGraf
{
int **array;
public:
CGraf(int i=0)
{
array = new (int *)[i];
for(int j=0;jarray[j]= new (int)[j];
}
~CGraf()
{
delete [] array;
}
const int &operator (int a, int b)
{
return array[i][j];
}
}

Eso si querés que el operator() te regrese el valor de array en los subindices indicados (al estilo fortran o (puajjjjjjj) basic)

Creo que no me olvide de nada

Suerte!

|<  <<  40 41 42 43 44 45 46 47 48 49 50  >>  >|