Ya pero Len(WSAData) no me da el numero de elementos de la estructura, me da la longitud del string que tiene el InternalBuffer (el SizeOf), 398 en el caso que nos ocupa (cada SHORT 2 bytes, LONG 4 bytes...)
Entonces en la classe "C STRUCTURE" de harbour tiene que haber la forma de asignar la variable cTemp de nuevo al buffer.
En 16 bits lo hago asi:
Code: Select all
cTemp:=WSAData:Buffer
rc:=WSAStartup(bin2i(chr(1)+chr(1)),@cTemp)
WSAData:Buffer:=cTemp
Ya que la data BUFFER es asignable (3ª línea), en 32 bits la data InternalBuffer es solo de lectura.
Por lo que la solucion que me das no me puede solucionar el tema de la asignacion del buffer devuelto por la funcion....
Y eso que esta de "WSAStartup" es la primera de las muchas que uso para el tema de las comunicaciones multicast, en cuanto comienze a complicarse la cosa con estructuras dentro de estructuras no puedo andas con arrays de datos las tengo que manejar puras.
Me quedan todavia WSACleanup, MemCopy, socket, setsockopt, getsockopt, htonl, htons, bind, inet_addr, WSAAsyncSelect, recv, recvfrom, send, sendto, etc...
Supongo que si pudiera disponer de la clase de harbour que maneja las estructuras podriamos sacar algo....
Existe un documento "cstruct.txt" en la distribucion de harbour 0.99.70 pero mi ingles no pasa de unos pocos vocablos.
Indica que la clase tiene estas datas: acTypes, SizeOf, nId, InternalBuffer
Y estos métodos: Buffer([New],[lAdopt]), Value, DeValue([lAdopt]), Array, SayMembers(cPad), Init(aValues), Pointer([nNew],[lAdopt])
Respecto al metodo Buffer([New],[lAdopt]) dice asi:
Code: Select all
Optionally SET the InternalBuffer to a new image, which will automatically
call the DeValue() Method to reflect the change in Member Properties. The
lAdopt flag indicates memory pointed by nested pointers should be assigned
to the resulting members, or should remain the responsability of caller.
¿ Alguna idea ?
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013