Hay algo muy molesto en todo esto del usb, digamos que uno quiere implementar su propio driver, no una clase HID, entonces hay que usar la DLL que MCHIP te da, asi cerrada sin posibilidades de cambiar o utilizar el DDK de XP sin saber por donde empezar.
La verdad que en el 90% de los proyectos veo que se usa el driver HID, cosa que es poco practica, teclados y josticks ya hay muchos, creo que la mayoria de nosotros tiene en mente cosas mas interesantes.
Dado que todas las rutinas de bajo nivel estan adentro de la DLL creo que conviene usar visual basic, pero como ya es obsoleto hay que usar .net con los malditos marshallers y esas cosas de interop para que el managed code de .net pueda hablar con la DLL echa en C o dios sabe que pero seguro que hay que lidiar con muchas idas y vueltas.
Un compilador que siempre me gusto es el LCC-WIN32 y el PELLEC, ambos son compiladores C.
Las MFC tienen una gran desventaja, MS no le va a dar mucho soporte de aca en mas, sobre todo en windows Vista donde la framework opera en managed code, MFC ya es parte del pasado, ademas hay que cargar con la DLL a todos lados y en el mejor de los casos compilar estaticamente y hacer un exe de 5 megas con 300 dependencias.
Osea en pocas palabras conviene usar C# o .NET no por que sea mejor sino por que en windows vista y en el futuro de windows, VC y VB no existen mas...
Por otro lado la opcion de linux con GCC y LIBUSB es simple y prolija, LIBUSB es compatible entre windows y unix, una buena opcion para los que quieren sacar mas jugo.
Visual Basic no es cosa del pasado, después de la versión 6 sufrió un gran cambio con soporte completo para .NET.
Visual C++ también ha sido adaptado al código administrado, que personalmente no me gusta mucho, pero es C++ y lo puedo entender
. En el tema del proyecto PicUSB de J1M coloqué la adaptación de su código a C++ en una aplicación de consola (no MFC como la de 5GTT, tampoco me gusta
).
¿Usar C# o .NET? Mmmh, uno es un lenguaje y otro el "framework/librería/plataforma", C# es el lenguaje "insignia" de MS para .NET.