Estos wrappers (definiciones de funciones en
una DLL) son necesarios para utilizar VXml en sus programas
basados en Microsoft C#.
C# utiliza las funciones en formato WIDE, por lo que los nombres de las funciones de VXml son distintos, pero simplemente hay que agregar una letra W al final de los nombres de cada función y la funcionalidad y paramétros son los mismos
Para utilizarlos puede crear una clase, para este ejemplo, la clase se puede crear en archivo llamado wrappers.cs.
Copie el contenido mostrado a continuación, que crea una clase de C# llamada "wrappers" e incluya el archivo wrappers.cs en su proyecto, dentro de su programa las funciones se utilizan como métodos de la clase wrappers.
Definir un nuevo Wrapper es muy sencillo, el wrapper de C# se basa en una estructura con 2 componentes por funcion:
Prototipo:
Definición de la función
A continuación deberemos expresar el nombre con el que deseamos llamar a la función dentro de nuestro programa en <nombre funcion>, que puede ser el mismo que el nombre del EntryPoint o puede ser distinto.
Finalmente debemos listar los Parámetros de la función anteponiendo su tipo (IntPtr o String) al nombre de la variable.
Esta estructura deberá repetirse para cada función que se desee utilizar.
Fecha de actualización : 08 de Julio 2024 se añadieron las funciones para Carta Porte 3.1
C# utiliza las funciones en formato WIDE, por lo que los nombres de las funciones de VXml son distintos, pero simplemente hay que agregar una letra W al final de los nombres de cada función y la funcionalidad y paramétros son los mismos
Para utilizarlos puede crear una clase, para este ejemplo, la clase se puede crear en archivo llamado wrappers.cs.
Copie el contenido mostrado a continuación, que crea una clase de C# llamada "wrappers" e incluya el archivo wrappers.cs en su proyecto, dentro de su programa las funciones se utilizan como métodos de la clase wrappers.
Definir un nuevo Wrapper es muy sencillo, el wrapper de C# se basa en una estructura con 2 componentes por funcion:
Prototipo:
[DllImport(<nombre del DLL>, CharSet = CharSet.Unicode, EntryPoint = "<función VXmlW>")]El prototipo de la funcion define la ubicacion de la DLL en <nombre del DLL>, el juego de caracteres que se utilizan, que siempre sera de tipo Unicode y el "EntryPoint" que es el nombre de la función dentro de la DLL, en este caso, por ser funciones tipo WIDE, su nombre termina con una letra W mayúscula <función VXmlW>.
Definición de la función
public static extern <Valor devuelto> <nombre función> ( <tipo><param1>, <tipo><param2> ... <tipo><paramN> );La definción de la funcion comienza con las palabras reservadas public static extern. seguido del tipo de valor que devuelve la funcion en <valor devuelto>, si la función devuelve un valor numerico entonces tendra el valor de IntPtr, si el valor de retorno es una cadena de caracteres tendrá el valor de String y si la función no devuelve nada tendra el valor de void.
A continuación deberemos expresar el nombre con el que deseamos llamar a la función dentro de nuestro programa en <nombre funcion>, que puede ser el mismo que el nombre del EntryPoint o puede ser distinto.
Finalmente debemos listar los Parámetros de la función anteponiendo su tipo (IntPtr o String) al nombre de la variable.
Esta estructura deberá repetirse para cada función que se desee utilizar.
Fecha de actualización : 08 de Julio 2024 se añadieron las funciones para Carta Porte 3.1
Wrapper:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace cfdi40_csharpNET
{
public class wrappers
{
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_NewW")] pubLic static extern IntPtr VXML_New ( String szVersion );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_FreeW")] public static extern void VXML_Free ( IntPtr p );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_NewWithLogW")] public static extern IntPtr VXML_NewWithLog ( String szVersion, String cNombreLog );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetLogFileW")] public static extern void VXML_SetLogFile ( IntPtr p, String NombreLog );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetUserInfoW")] public static extern void VXML_SetUserInfo ( IntPtr hXml, String szUser, String servidor );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_ProcesaDocumentoW")] public static extern IntPtr VXML_ProcesaDocumento ( IntPtr hXml, String csd, String key, String keypwd, String outfile );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_ProcesaDocumentoSSLW")] public static extern IntPtr VXML_ProcesaDocumentoSSL ( IntPtr hXml, String csd, String key, String keypwd, String outfile );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_AddCfdiRelacionados_cfdi40W")] public static extern void VXML_AddCfdiRelacionados_cfdi40 ( IntPtr p, String TipoRelacion, String UUID1, String UUID2, String UUID3, String UUID4, String UUID5, String UUID6, String UUID7, String UUID8, String UUID9, String UUID10 );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_AddCfdiRelacionado_cfdi40W")] public static extern void VXML_AddCfdiRelacionado_cfdi40 ( IntPtr p, String UUID );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetComprobanteInfo_cfdi40W")] public static extern void VXML_SetComprobanteInfo_cfdi40 ( IntPtr p, String Serie, String Folio, String Fecha, String FormaDePago, String CondicionesDePago, String SubTotal, String Descuento, String Moneda, String TipoCambio, String Total, String TipoDeComprobante, String MetodoDePago, String LugarExpedicion, String Confirmacion, String Exportacion );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetEmisorInfo_cfdi40W")] public static extern void VXML_SetEmisorInfo_cfdi40 ( IntPtr p, String RFC, String Nombre, String RegimenFiscal, String FacAtrAdquirente );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetReceptorInfo_cfdi40W")] public static extern void VXML_SetReceptorInfo_cfdi40 ( IntPtr p, String RFC, String Nombre, String ResidenciaFiscal, String NumRegIdTrib, String UsoCFDI, String DomicilioFiscalReceptor, String RegimenFiscalReceptor );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_AddConcepto_cfdi40W")] public static extern void VXML_AddConcepto_cfdi40 ( IntPtr p, String ClaveProdServ, String NoIdentificacion, String Cantidad, String ClaveUnidad, String Unidad, String Descripcion, String ValorUnitario, String Importe, String Descuento, String ObjetoImp );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_AddConceptoTraslado_cfdi40W")] public static extern void VXML_AddConceptoTraslado_cfdi40 ( IntPtr p, String Base, String Impuesto, String Tipofactor, String TasaOCuota, String Importe );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_SetImpuestosInfo_cfdi40W")] public static extern void VXML_SetImpuestosInfo_cfdi40 ( IntPtr p, String totalImpuestosTrasladados, String totalImpuestosRetenidos );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_AddTraslado_cfdi40W")] public static extern void VXML_AddTraslado_cfdi40 ( IntPtr p, String Impuesto, String TipoFactor, String TasaOCuota, String Importe, String Base );
[DllImport("VXML_x86.dll", CharSet = CharSet.Unicode, EntryPoint = "VXML_GetValueW")] public static extern String VXML_GetValue ( IntPtr hXml, IntPtr value );
}
}