Ayuda Copiar en Memoria...
Publicado por Frank P. (50 intervenciones) el 25/09/2013 16:10:33
Buen Día con todos, nuevamente aquí consultando su ayuda en este nuevo caso, resulta que estoy trabajando con un OCX el cual esta en VB6, al momento de pasarlo a PB 10.5 me han surgido inconvenientes con respecto a a las líneas de código que son las siguientes:
Private Sub S35TPC1_OnReceiveEvent(ByVal M_No As Long, ByVal evType As Long, evData As Long, ByVal evTr As Long, ByVal evAct As Long, ByVal evTime As Long)
Dim sz As String
Dim szType As String
Dim szIpAddr As String
szIpAddr = LongIP2Dotted(M_No)
Dim strData As String
Dim strByte(IDNUMBER_LENGTH - 1) As Byte.........................(1)
If evType = 1 Or evType = 3 Then
CopyMemory strByte(0), evData, 20..........................................................................(2)
strData = Val(StrConv(strByte, vbUnicode)).............................................................(3)
End If
szType = "UNKNOWN"
(1) en este caso están asignando un tamaño al array strByte, pero según tengo entendido a los arrays en PB no se les asigna una longitud o son variables; por tanto he obviado esa parte.
(2) Tengo problemas al ejecutar esta API de windows, según veo lo que hace es copiar desde un long a un array de tipo byte, y lo que he leído indica que se tiene que colocar el array en la posición inicial
la función declarada en VB6 es:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
y en power lo coloco así:
Subroutine CopyMemory(any Destination, any Source, long Length) Library "kernel32.dll" Alias for "RtlMoveMemory"
(3) En este caso lo que entiendo es que transforma esos bytes del array en una sola cadena de caracteres; para lo cual en la red encontré una función:
//function wf_byte2string(byte ba_source[]) returns string
blob b_destination
string s_destination, f_fullname = "d:\mytemp.txt"
int f_i
ulong hfile, hwrite, hread, ba_len, flen, blen
FileDelete(f_fullname) //delete old file and create a new
f_i = FileOpen(f_fullname, StreamMode!, Write!)
fileClose(f_i)
ba_len = upperbound(ba_source)
hfile = lopen(f_fullname, 1) //write the byte array to temp file
hwrite = lwrite_ba(hFile, ba_source, ba_len)
lclose(hfile)
f_i = FileOpen(f_fullname, StreamMode!)
FileRead(f_i, b_destination) //for large blobs add code to read in parts
FileClose(f_i)
blen = len(b_destination)
s_destination = string(b_destination)
return s_destination
Lo que más me urge es la utilización del API CopyMemory, espero poder contar con su ayuda.
Saludos,
Frank P.
Private Sub S35TPC1_OnReceiveEvent(ByVal M_No As Long, ByVal evType As Long, evData As Long, ByVal evTr As Long, ByVal evAct As Long, ByVal evTime As Long)
Dim sz As String
Dim szType As String
Dim szIpAddr As String
szIpAddr = LongIP2Dotted(M_No)
Dim strData As String
Dim strByte(IDNUMBER_LENGTH - 1) As Byte.........................(1)
If evType = 1 Or evType = 3 Then
CopyMemory strByte(0), evData, 20..........................................................................(2)
strData = Val(StrConv(strByte, vbUnicode)).............................................................(3)
End If
szType = "UNKNOWN"
(1) en este caso están asignando un tamaño al array strByte, pero según tengo entendido a los arrays en PB no se les asigna una longitud o son variables; por tanto he obviado esa parte.
(2) Tengo problemas al ejecutar esta API de windows, según veo lo que hace es copiar desde un long a un array de tipo byte, y lo que he leído indica que se tiene que colocar el array en la posición inicial
la función declarada en VB6 es:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
y en power lo coloco así:
Subroutine CopyMemory(any Destination, any Source, long Length) Library "kernel32.dll" Alias for "RtlMoveMemory"
(3) En este caso lo que entiendo es que transforma esos bytes del array en una sola cadena de caracteres; para lo cual en la red encontré una función:
//function wf_byte2string(byte ba_source[]) returns string
blob b_destination
string s_destination, f_fullname = "d:\mytemp.txt"
int f_i
ulong hfile, hwrite, hread, ba_len, flen, blen
FileDelete(f_fullname) //delete old file and create a new
f_i = FileOpen(f_fullname, StreamMode!, Write!)
fileClose(f_i)
ba_len = upperbound(ba_source)
hfile = lopen(f_fullname, 1) //write the byte array to temp file
hwrite = lwrite_ba(hFile, ba_source, ba_len)
lclose(hfile)
f_i = FileOpen(f_fullname, StreamMode!)
FileRead(f_i, b_destination) //for large blobs add code to read in parts
FileClose(f_i)
blen = len(b_destination)
s_destination = string(b_destination)
return s_destination
Lo que más me urge es la utilización del API CopyMemory, espero poder contar con su ayuda.
Saludos,
Frank P.
Valora esta pregunta
0