PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 28 → Activex con windev 20
Activex con windev 20
Débuté par victor, 02 nov. 2015 21:04 - 1 réponse
Posté le 02 novembre 2015 - 21:04
Hola

Tengo que ingregrar un activex (no ocx), este programa sirve para enviar sms directamente por medio de un equipo
StarGate 2n. Unas de las caracteristicas de este equipo es pode enviar sms y recibir sms. Es justamente lo que necesito.
Por otro lado se compro el activex de ActiveXpers para poder integrar directamene desde windev v20.

Aqui comienza mi lucha....

Siguiendo los pasos que viene con la Demo realizado en .Net :-( .... pude conectarme al equipo y enviar sms sin problemas, pero cuando quiero recibir dichos sms, me estanque. Ya que tengo una clase en .Net y no se como deberia Heredar dicha clase.

La Clase de .Net es la siguiente:

namespace AxSms
{
[ClassInterface(0)]
[Guid("7524134C-0186-43C6-958C-2C3A49FE40FC")]
[TypeLibType(2)]
public class MessageClass : IMessage, Message
{
public MessageClass();

[DispId(5)]
public virtual string Body { get; set; }
[DispId(16)]
public virtual int BodyFormat { get; set; }
[DispId(15)]
public virtual int DataCoding { get; set; }
[DispId(4)]
public virtual string FromAddress { get; set; }
[DispId(11)]
public virtual int FromAddressNPI { get; set; }
[DispId(10)]
public virtual int FromAddressTON { get; set; }
[DispId(51)]
public virtual int GsmFirstOctet { get; set; }
[DispId(55)]
public virtual string GsmMemoryIndex { get; set; }
[DispId(56)]
public virtual string GsmMemoryLocation { get; set; }
[DispId(52)]
public virtual string GsmSmscAddress { get; }
[DispId(54)]
public virtual int GsmSmscAddressNPI { get; }
[DispId(53)]
public virtual int GsmSmscAddressTON { get; }
[DispId(21)]
public virtual bool HasUdh { get; set; }
[DispId(22)]
public virtual bool Incomplete { get; }
[DispId(101)]
public virtual int LastError { get; }
[DispId(23)]
public virtual int MultipartRef { get; }
[DispId(18)]
public virtual int PartNumber { get; }
[DispId(12)]
public virtual int ProtocolId { get; set; }
[DispId(19)]
public virtual string ReceiveTime { get; }
[DispId(20)]
public virtual int ReceiveTimeInSeconds { get; }
[DispId(14)]
public virtual string Reference { get; set; }
[DispId(7)]
public virtual bool RequestDeliveryReport { get; set; }
[DispId(77)]
public virtual int SmppCommandStatus { get; set; }
[DispId(76)]
public virtual int SmppError { get; set; }
[DispId(73)]
public virtual int SmppEsmClass { get; set; }
[DispId(74)]
public virtual bool SmppIsDeliveryReport { get; set; }
[DispId(71)]
public virtual int SmppPriority { get; set; }
[DispId(78)]
public virtual int SmppSequenceNumber { get; }
[DispId(80)]
public virtual string SmppServerFinalDate { get; }
[DispId(79)]
public virtual string SmppServerSubmitDate { get; }
[DispId(72)]
public virtual string SmppServiceType { get; set; }
[DispId(75)]
public virtual int SmppStatus { get; set; }
[DispId(3)]
public virtual string ToAddress { get; set; }
[DispId(9)]
public virtual int ToAddressNPI { get; set; }
[DispId(8)]
public virtual int ToAddressTON { get; set; }
[DispId(17)]
public virtual int TotalParts { get; }
[DispId(2)]
public virtual int UserTag { get; set; }
[DispId(13)]
public virtual int ValidityPeriod { get; set; }

[DispId(1)]
public virtual void Clear();
[DispId(102)]
public virtual string GetErrorDescription(int Error);
[DispId(91)]
public virtual void SmppAddTlv(Tlv Tlv);
[DispId(92)]
public virtual Tlv SmppGetFirstTlv();
[DispId(93)]
public virtual Tlv SmppGetNextTlv();
[DispId(94)]
public virtual Tlv SmppGetTlv(int lTag);
}
}

esta clase cuando se instancia en .net es de la siguiente forma

AxSms.Message objMessage;
objMessage = objSmpp.ReceiveMessage();

donde OjbMessage devuelve una serie de datos cuando el sms es recibido del celular.

Intente instanciar en windev de la siguiente forma:

y me da el error:

Error at line 80 of Click BTN_Leer_Mensajes_RECIBIDO process.
An element of 'automation object' type cannot be converted to the 'ANSI string' type.

sDatos is string = autSmsSMPPActivex>>ReceiveMessage

tambien intente realizar mediante una estructura que segun la clase de .net esta indicando

// structrua en windev
mensaje is Structure
Body is string
BodyFormat is int
DataCoding is int
FromAddress is string
FromAddressNPI is int
FromAddressTON is int
GsmFirstOctet is int
GsmMemoryIndex is string
GsmMemoryLocation is string
GsmSmscAddress is string
GsmSmscAddressNPI is int
GsmSmscAddressTON is int
HasUdh is boolean
Incomplete is boolean
LastError is int
MultipartRef is int
PartNumber is int
ProtocolId is int
ReceiveTime is string
ReceiveTimeInSeconds is int
Reference is string
RequestDeliveryReport is boolean
SmppCommandStatus is int
SmppError is int
SmppEsmClass is int
SmppIsDeliveryReport is boolean
SmppPriority is int
SmppSequenceNumber is int
SmppServerFinalDate is string
SmppServerSubmitDate is string
SmppServiceType is string
SmppStatus is int
ToAddress is string
ToAddressNPI is int
ToAddressTON is int
TotalParts is int
UserTag is int
ValidityPeriod is int

// -------------- esto no se como declararlo en windev
// [DispId(1)]
// void Clear();
// [DispId(102)]
// string GetErrorDescription(int Error);
// [DispId(91)]
// void SmppAddTlv(Tlv Tlv);
// [DispId(92)]
// Tlv SmppGetFirstTlv();
// [DispId(93)]
// Tlv SmppGetNextTlv();
// [DispId(94)]
// Tlv SmppGetTlv(int lTag);
END

Error at line 63 of Click BTN_Leer_Mensajes_RECIBIDO process.
Only structure of same definition can be assigned to structure.


Alquien por ahi ha tenido que lidiar con Activex de .net e integrarlo a windev.?

Alguien puede darme una pista como instanaciar o Heredar una clase por otra en windev?

PD: espero que se entienda mi problemas

Desde ya muchas gracias.

Victor
Posté le 11 novembre 2015 - 13:59
Estimados, logre hacer funcionar e integrar completamente dicho ActiveX .NET que detallo en el mensaje anterior.

Por lo tanto les dejo una guia o tips, seguramente que en algun momento de sus vidas van a tener que lidiar con .net

En esta caso especificamente viene una dll que es propio de este ActiveX (ActiveXperts), entonces lo importe a mi proyecto
desde el menu User a .Net assemby in proyect. Quedando las clases declaradas de la siguiente manera






en mi global instancie las clases que necesito para este caso...

clCONEXION is TO SmppClass
gclMESSAGE is TO MessageClass
gclCONSTANTES is TO ConstantsClass
gclObjGsm is TO GsmClass

luego en un boton utilizo las clases y metodos que necesito .

En este ejemplo lo que hago es leer los sms entrantes que llegan de los mobiles.

clMensaje is TO MessageClass
clMensaje <- clCONEXION.ReceiveMessage()
WHILE clCONEXION.LastError = 0
IF clMensaje.SmppIsDeliveryReport THEN
ListAdd(LIST_SmsRecibidos,"Entregar sms para:" + NoSpace(clMensaje.Body) + " Estado:" + Middle(Position(clMensaje.Body,"Stat:",1,FromBeginning)+5,7))
ELSE
ListAdd(LIST_SmsRecibidos,"Mensaje recibido de :" + clMensaje.Body + " " + clMensaje.ReceiveTime + " " + clMensaje.FromAddress + " usertag:" + clMensaje.UserTag)

END

clMensaje <- clCONEXION.ReceiveMessage()
END

espero que esto le sirva a alguien (Activex realizados en .net)

Victor