如何使用C#和其他DLL创建COM/OCX/DLL包装

如何使用C#和其他DLL创建COM/OCX/DLL包装,c#,dll,com,ocx,C#,Dll,Com,Ocx,大家好: 这是我的第一篇文章。 我是一名ERP程序员,在一家小型企业的旧版本中使用Dynamics NAV。 我正在尝试集成Redsys的TPV-PC(使用信用卡向Verifone P400付款),以便ERP将数据发送到TPV(金额)并收集响应。Redsys提供了一个COM/OCX库,我可以调用TPV的属性和方法。到目前为止一切都很好。问题是,我的ERP在返回TPV的响应中有一个限制,因为它返回一个字符串形式的XML,我的ERP有1024个字符的限制,不能用它清除。 所以我想在C#创建一个调用D

大家好:

这是我的第一篇文章。 我是一名ERP程序员,在一家小型企业的旧版本中使用Dynamics NAV。 我正在尝试集成Redsys的TPV-PC(使用信用卡向Verifone P400付款),以便ERP将数据发送到TPV(金额)并收集响应。Redsys提供了一个COM/OCX库,我可以调用TPV的属性和方法。到目前为止一切都很好。问题是,我的ERP在返回TPV的响应中有一个限制,因为它返回一个字符串形式的XML,我的ERP有1024个字符的限制,不能用它清除。 所以我想在C#创建一个调用DLL书店的库,处理XML并返回一个数组或几个字符串,其中包含我感兴趣的数据,以便ERP可以处理它。通过这种方式,我将调用新创建的DLL/OCX/COM,并获取已处理的数据。(原始dll在PC上正确注册为TPV Verifone P400)

事实上,我不知道C#或如何正确注册创建的库,使其显示为我的ERP可见的COM/OCX。 对于调用库的任何其他方法,它都是类似的方法 我有一个旧版本的VisualStudio2008,我正试图用它来做 我详细介绍了代码,这显然不起作用,我还详细介绍了文档中指示的调用示例

如有任何指示,请联系好港口,非常感谢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; 
using DLLTPVPCLATENTELib;

namespace WrapperTPVCSharp{

class WrappTPVPC {
    public string OperTPV(String cImporte, String cFactura, String cTipoOper, String FakeXML, int iTamResp) {
        string ResultadoTPV = new string [6];}
        public static extern int fnDllOperPinPad(String cImporte,
        String cFactura, String cTipoOper, String cXMLResp,
        int iTamMaxResp);
}
        if (fnDllOperPinPad(String cImporte,
        String cFactura, String cTipoOper, String cXMLResp,
        int iTamMaxResp) = 0 ) {
         XmlDocument RespXML =new XmlDocument();
         RespXML.LoadXml(cXMLResp);
         ResultadoTPV[1]:='0'; // Ya he verificado que la operación ha sido procesada
         foreach(XmlNode nodo in RespXML.DocumentElement.ChildNodes{
          if nodo.Name == "pedido" {
            RespXML[2] = nodo.InnerText;
            }
          if nodo.Name == "identificadorRTS" {
            RespXML[3] = nodo.InnerText;
            }
          if nodo.Name == "estado" {
            RespXML[4] = nodo.InnerText;
            }
          if nodo.Name == "resultado" {
            RespXML[5] = nodo.InnerText;
            }
         if nodo.Name == "codigoRespuesta" {
            RespXML[6] = nodo.InnerText;
            }
        ResultadoTPV = RespXML;
    }
        Return ResultadoTPV;

}
**文件: 使用 针板装置 输入/输出参数:

**Cimporte,XXXXXXXXX.XX格式的交易金额。 示例:1.23、33.05、0.01等。 CFactura,购买参考。此值可以由 交易以帮助您识别交易。 cTipoOper,表示要执行的操作类型。可能值: “付款”->将进行付款。 “预自动化”->将进行预授权

cxmresp,缓冲区,它将存储包含 支付或预授权操作。此XML的格式 有关详细信息,请参阅文档“通过与TPVPC的连接” “Web服务”6.0版

itammaxresp表示缓冲区的最大大小,其中 存储包含操作结果的XML链。我知道 建议大小至少为1024字节

返回值: 值0表示操作已正确处理。 必须强调的是,该结果并不表明 操作是授权的,这只是其 过程 非0的值,指示故障原因的错误代码。 附件三详细说明了这些错误。 无论何时返回代码-2,都需要执行 由行业执行的最后一次操作的咨询, 看看这次行动是否得到授权

int    fnDllOperPinPad(LPCTSTR    cImporte,    LPCTSTR    cFactura,
LPCTSTR cTipoOper, LPTSTR cXMLResp, int iTamMaxResp);
Ejempo de llamada en C#

[DllImport(“dllTpvpcLatente.dll”)] 公共静态外部输入fnDllOperPinPad(字符串cImporte, 字符串cFactura、字符串Ctipoper、字符串生成器cXMLResp、, int iTamMaxResp)

XML响应示例(cxmresp)


帕戈
1.01
978
************0018
************0018
2.
1210
777888991
1.
10549
黛布
070001070319153828378272
拉滕特学院
2007-03-19 15:38:28.484
F
自动导航
080922
不退款
664AD45F54C3EB4D06A354E3158A17966012A1B8
真的
001391
00
A0000000043060
00
0800208000

您是否试图将某段C#代码公开为COM对象,供其他(非.NET)客户端使用?在这种情况下,请遵循官方文件:
<Operaciones version="6.0">
<resultadoOperacion>
<tipoPago>PAGO</tipoPago>
<importe>1.01</importe>
<moneda>978</moneda>
<tarjetaComercioRecibo>************0018</tarjetaComercioRecibo>
<tarjetaClienteRecibo>************0018</tarjetaClienteRecibo>
<marcaTarjeta>2</marcaTarjeta>
<caducidad>1210</caducidad>
<comercio>777888991</comercio>
<terminal>1</terminal>
<pedido>10549</pedido>
<tipoTasaAplicada>DEB</tipoTasaAplicada>
<identificadorRTS>070001070319153828378272</identificadorRTS>
<factura>FAC-LATENTE</factura>
<fechaOperacion>2007-03-19 15:38:28.484</fechaOperacion>
<estado>F</estado>
<resultado>Autorizada</resultado>
<codigoRespuesta>080922</codigoRespuesta>
<Literales>
<literal>NO REFUND</literal>
</Literales>
<firma>664AD45F54C3EB4D06A354E3158A17966012A1B8</firma>
<operacionemv>true</operacionemv>
<conttrans>001391</conttrans>
<sectarjeta>00</sectarjeta>
<idapp>A0000000043060</idapp>
<codrespauto>00</codrespauto>
<resverificacion>0800208000</resverificacion>
</resultadoOperacion>
</Operaciones>