Fecha actual Jue Mar 28, 2024 1:50 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: Dom Abr 19, 2020 12:42 am 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos

* Me encuentro probando la ultima versión de C3 y me he topado con un problema.
* tengo varias funciones escritas en "c", que en las versiones previas no he tenido mayor problema en convertirlas en un archivo .obj.
* Por ejemplo...este es parte del archivo C, con el que tengo problemas...

#include <windows.h>
#include <mmsystem.h>
#include <extend.api>
#include <item.api>

void _reta( ULONG wArrayLen ); // Éste es el prototipo

CLIPPER CREATE_COMPATIBLE_BITMAP( void )
{
_retnl( (LONG) CreateCompatibleBitmap( ( HDC ) _parnl( 1 ), _parni( 2 ), _parni( 3 ) ) );
}

y lo compilaba con esta instrucción en el archivo .MAK

$(DIROBJ)\obj_C.obj: $(PRG_C)
c:\bcc55\bin\bcc32 -c -M -Ic:\c3\include; -Lc:\bc5\lib; -o$(DIROBJ)\obj_C.obj $(PRG_C) >error.txt

---------------------------------
He confeccionado el archivo NMake, pero... me parece que el compilador "bcc32.exe" ya no va...

En fin... consulta...
¿Como deben confeccionarse las funciones en el archivo "c"?
¿Se sigue manteniendo la misma forma de "redactar"?.
¿Que compilador es el que debe utilizarse? ¿Donde puede bajarse?

Saludos....


Arriba
 Perfil  
Responder citando  
NotaPublicado: Mié Abr 22, 2020 4:53 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos,

* Esperando que todos se encuentren bien en estos dias de pandemia...
*
* Para ir adelantando he bajado el Visual Estudio Express (dificil es conseguir la version que aparece en la seccion Download).
* Deduzco que se debe utilizar el compilador c (el archivo cl.exe).
* Luego de hacer que funcion el "cl.exe" desde la linea de comandos...he intentado compilar el trozo de codigo que mencione en post anterior....
* Por mas que hago combinaciones, enlazo archivos y demases... no logro dar con las instrucciones correctas para obtener un archivo OBJ.


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Abr 23, 2020 5:58 pm 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 75
Hola,

yo uso un Visual Studio Express y compilo así:
32 bits:
cl /nologo /c /Zl /W3 /WX /GR- /GS- /TP /arch:IA32 /IInclude archivo.c

64 bits:
cl /nologo /c /Zl /W3 /WX /GR- /GS- /TP /IInclude archivo.c


Arriba
 Perfil  
Responder citando  
NotaPublicado: Jue Abr 23, 2020 6:29 pm 
Avatar de Usuario

Registrado: Mar Dic 27, 2005 2:58 pm
Mensajes: 75
Se me olvidaba, cuidado con todos los tipos HANDLE de Windows en 64 bits, me refiero a HFONT, HWND, HBITMAP, etc, etc. En 32 bits son 4 bytes y puedes usar las funciones _parnl() y _retnl() ya que el tipo LONG en 32 bits también es de 4 bytes. En 64 bytes los tipos HANDLE de Windows son punteros y ocupan 8 bytes y con esas funciones no te va a funcionar, usa tanto en 32 bits como en 64 bits _parnlp() y _retnlp() para manejar ese tipo de dato y tendrás el mismo código compilable en 32 bits y en 64 bits.

Si dudas del tamaño de un dato, siempre lo puedes comprobar con la función sizeof() de C y verás como se cumple:
32 bits: sizeof( HWND ) -> 4
64 bits: sizeof( HWND ) -> 8 _parnl() y _retnl() no sirven.


Arriba
 Perfil  
Responder citando  
NotaPublicado: Vie Abr 24, 2020 6:49 am 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos
Don Alberto...

* Gracias por la sugerencia..
* Por lo pronto he obtenido "errores", asunto que ya es un adelanto; antes de lo sugerido, obtenía nada.. :).
* Los errores son los siguientes...

TextoTit.c
TextoTit.c(16) : error C2065: 'HDC' : identificador no declarado
TextoTit.c(16) : error C2146: error de sintaxis : falta ')' delante del identificador '_parnlp'
TextoTit.c(16) : error C2059: error de sintaxis : ')'


La linea 16, contiene lo siguiente...

_retnl( (LONG) CreateCompatibleBitmap( (HDC) _parnl( 1 ), _parnip( 2 ), _parnip( 3 ) ) );


y la función completa es..
//----------------------------------------------------
CLIPPER CREATE_COMPATIBLE_BITMAP( void )
{
_retnl( (LONG) CreateCompatibleBitmap((HDC) _parnl( 1 ), _parnip( 2 ), _parnip( 3 ) ) );
}

Acaso... ¿El problema ira por aquello de las "cabeceras"?
* Por lo pronto estos dos archivos, que se referenciaban en las anteriores versiones de C3, ahora no logro ubicarlas, incluso mas, no se si es necesario seguir "incluyéndolas"...

#include <windows.h>
#include <mmsystem.h>

* nuevamente gracias...
* continuare investigando... :)


Arriba
 Perfil  
Responder citando  
NotaPublicado: Dom Abr 26, 2020 12:52 am 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos

* Sigo tratando de migrar a la ultima version de C3.
* Logre ubicar el archivo "windows.h"..
* Acceso a la linea de comandos, con archivo "bat", que viene junto con el visual studio, que configura los "path" y demas variables de entorno.
* Cree un archivo bat, para realizar la compilacion y obtener un OBJ.
* El contenido del bat es..

cl /nologo /c /Zl /W3 /GR- /GS- /TP /arch:IA32 /I"C:\Program Files\Microsoft SDKs\Windows\v7.1A\Include" TextoTit.c >error.txt
type error.txt

* Arriba, en la parte del I/..., lo coloque la ruta entre comillas, de lo contrario daba error.
* en la cabecera del archivo "C" coloque el include <windows.h>
* luego de lo cual obtengo los siguientes mensajes.

TextoTit.c
c:\program files\microsoft sdks\windows\v7.1a\include\sal_supp.h(57) : warning C4005: '__useHeader' : redefinici¢n de macro
C:\Program Files\Microsoft Visual Studio 12.0\VC\INCLUDE\sal.h(2886) : vea la definici¢n anterior de '__useHeader'
c:\program files\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77) : warning C4005: '__on_failure' : redefinici¢n de macro
C:\Program Files\Microsoft Visual Studio 12.0\VC\INCLUDE\sal.h(2896) : vea la definici¢n anterior de '__on_failure'

* Eso si, obtengo el archivo OBJ.
* Luego el archivo OBJ, lo convierto en una LIB .
* Lo proceso para incorporarlo al EXE y... no funciona... lo curioso es que, nada de nada... ni errores... :)
* Las rutinas en C no funcionan...
* Sigo investigando...


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron