La transferencia de archivos a través de un disquete fue lenta y ruidosa, y mi entusiasmo no conoció límites cuando encontré el controlador de la unidad de disquete virtual, que le permite crear una "unidad de disquete virtual" y conectarla a la máquina virtual como de costumbre. Desafortunadamente, el interés del autor en su proyecto se desvaneció en 2005, y en 2010 su sitio web y su correo electrónico dejaron de existir. Desde entonces, se han producido muchos cambios en el mundo de Windows:
- El sistema operativo de 64 bits se usa ampliamente, en el que es imposible cargar el controlador de 32 bits compilado en 2005;
- Windows a partir de Vista SP1 comenzó a requerir una firma digital o manipulaciones aburridas que requieren un reinicio del sistema para cargar controladores;
- Un proyecto escrito en Visual C ++ 6 no se crea en las versiones modernas de Visual Studio después de la conversión automática.
Ya en 2011, la lista de correo de desarrolladores de ReactOS discutió la posibilidad de brindar soporte para un proyecto abandonado; pero sin el consentimiento del propio autor, esto no podría suceder, y en ese momento el autor no había dado señales de vida durante varios años. Al mismo tiempo, un tal Andriy G. Tereshchenko creó un espejo no oficial vfd.sourceforge.net con una copia del sitio web del autor desaparecido. SourceForge todavía tiene la versión 2005 allí, y todavía hay quejas de que esta versión no funciona en Windows 7+.
Quería seguir desarrollando VFD en github.com/tyomitch/vfd ; incluso si eres indiferente al VFD en sí, entonces mi historia puede ayudarte a "revivir" otros proyectos abandonados en Windows.
Compilacion
Visual Studio 2019 se compromete a abrir
vfd.dsw
y convertir sus proyectos constituyentes a un formato moderno; pero la conversión es incompleta, por lo que los proyectos convertidos se niegan a compilar.
Encontré los siguientes problemas:
- La llamada de Message Compiler (
mc $(InputName)
) se convirtió incorrectamente , en lugar demc %(Filename)
en VS2019 debería sermc %(FullPath)
. Los nombres de los archivos producidos para el MC ($(InputName).h
y$(InputName).rc
) no se convierten en absoluto; en VS2019, deberían verse como%(Filename).h
y%(Filename).rc
. - Los nombres de archivo producidos para Resource Compiler (
$(IntDir)\$(InputName).res
) tampoco se convirtieron; en VS2019 deberían verse así$(IntDir)\%(Filename).res
. <TargetName>
debe cambiarse de default ($(ProjectName)
)vfd
a projectvfdlib
yvfdwin
projectvfdwin
, de lo contrario, intentan construirlib.dll
ygui.exe
.- Para compilar VFD sin zlib, no solo debe agregar a las definiciones
VFD_NO_ZLIB
, sino también eliminar el#include "zlib.h"
sub#ifndef VFD_NO_ZLIB
- el autor por alguna razón se olvidó de esto; y debe ser eliminadozlibstat.lib
de<AdditionalDependencies>
.
Después de estas correcciones, las versiones de 32 bits
vfd.dll
y vfdwin.exe
; pero para construir versiones de 64 bits, necesita trabajar más.
Adaptación para x64
Primero, el código en sí es incompatible con x64, y debe reemplazarlo
- el tipo de retorno de todo
DlgProc
desdeBOOL
hastaINT_PTR
; - todas las llamadas
GetWindowLong(GWL_USERDATA)
aGetWindowLongPtr(GWLP_USERDATA)
y son similares paraSetWindowLong
y paraDWL_MSGRESULT
yDWL_USER
.
En segundo lugar, no se utiliza en la configuración del proyecto convertido
$(Platform)
, porque en el momento de VC6 solo podía haber una plataforma; y por lo tanto, los archivos de 32 y 64 bits intentan recopilarse en los mismos directorios. Para su raza, deben ser corregidos en los $(IntDir)
valores <AssemblerListingLocation>
, <PrecompiledHeaderOutputFile>
, <ObjectFileName>
, <ProgramDataBaseFileName>
; <OutputFile>
para el enlazador, fije a $(TargetPath)
; y elimine lo inútil <AdditionalLibraryDirectories>
, agregue manualmente dependencias entre proyectos y <PostBuildEvent>
copie manualmente los archivos compilados en el directorio de destino.
En tercer lugar, se
vfdwin
resiste activamente a intentar ejecutarse en Windows de 64 bits, así como a intentar ejecutarse en Windows 95/98 / Me. Para detener esto, debe eliminar la función VfdIsValidPlatform()
y todas las referencias a ella.
Descarga del controlador
No tengo un DDK de Windows a mano, así que tomé uno de 64 bits
vfd.sys
compilado por un crítico0 y preguntédartraidenfírmelo al "estilo chino antiguo". Dicho controlador se carga y funciona correctamente si se vfdwin
inicia con derechos de administrador; para que esto suceda siempre, debe agregar sus opciones de enlace <UACExecutionLevel>RequireAdministrator
.
Otro entusiasta, Igor Levicki, ha dedicado una publicación de blog completa a la compilación
vfd.sys
para x64 y afirma que su versión es vfd.sys
mejor que la crítica0; pero está firmado con un certificado hecho en casa y no se cargará sin gestos adicionales. Además del certificado hecho en casa, el ambicioso Igor Levicki agregó una mención de sí mismo y de su blog al archivo del conductor; critic0 no hizo esas tonterías.
Utilizando
Además de los cambios mencionados, Acabo de cambiar la URL largo muertos en la ventana Acerca de github.com/tyomitch/vfd , y se fija un error en la cáscara, que es perceptible solamente durante la compilación de depuración: la función
VfdGetLocalLink
pasa un parámetro de tipo CHAR
a isalpha()
y vuelca en una línea _ASSERTE(c >= -1 && c <= 255);
en la biblioteca estándar. Como se explica en un habrapost reciente , el comportamiento isalpha()
no está definido para números negativos, pero CHAR
en Windows solo está firmado. A juzgar por el hecho de que se emiten 141 advertencias durante la compilación, todavía puede haber muchos errores de este tipo en el código; así tendré algo que ver con mis tardes libres.
Los binarios listos están en github.com/tyomitch/vfd/tree/master/x64/Debug