Estoy desarrollando un demo de ESC/POS utilizando una librería vieja que conseguí. La ventaja de la librería es que ya tiene muchos métodos como el de corte de papel, efectos de texto, y que permite utilizar diferentes medios de comunicación (USB, Com y Ethernet) y que proveen de un demo en Visual Studio para .Net 2.0.
Mi problema particular es que estoy desarrollando en WPF, para lo que necesito un framework más actualizado. Intenté con .Net 3.5, pero dependía de System.Windows.Controls.Grid, y me daba un error de que grids no estaba implementado en esa versión del framework (?) aunque la documentación dice que sí.
Y la verdad es que el problema original era algo relacionado con las signature de las funciones de las funciones, y de la manera cómo pinvoque las estaba utilizando. Una búsqueda en google del error (pinvoque imbalance) arrojó apenas 2500 resultados.
Como siempre, StackOverflow salió al rescate, y ofreció una sugerencia. Al parecer el método de llamado (Pinvoque?) de las funciones cambió la manera que operaba a partir de VS2010, por lo que es necesario incluir CallingConvention = CallingConvention.Cdecl
como uno de los argumentos de DllImport().
En total llegar a esta solución del Pinvoque me tomó un sábado, y por eso estoy escribiendo esta entrada. Espero que al menos sirva para empujar más arriba la entrada de stackoverflow en los motores de búsqueda xD
Mi problema fue que había tocado mucho el código y cuando por fin di con la solución, igual me estaba arrojando otros problemas. Tuve que iniciar con otro proyecto desde cero, e ir probando ideas de una a la vez.
Espero que esto le sirva a alguien.