La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45853 - ESTRUCTURAS COMO ARGUMENTOS
Autor:  Elías Castillo
Estoy construyendo una DLL y quiero que algunas de las funciones de la DLL lleven como argumentos estructuras (como las API por ejemplo) pero cuando la voy a compilar me dice que no se puede.
Alguien puede decirme cómo puedo solucionar esto?
Gracias

  Respuesta:  Javi M
Si estas creando procedimientos públicos el compilador no te va a dejar compilar tipos de datos que no sean básicos.
Puedes hacer un apaño con este código.
Define un string de longitud fija lo suficientemente grande para
contener la estructura (en nº de bytes) y copiar los bytes de la estructura
al string con la función del api RtlMoveMemory y en el destino hacer lo
contrario:

Private Declare Sub CopyMemory Lib \"kernel32\" Alias _
\"RtlMoveMemory\" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Dim aux As String * 50 \'suponiendo que la estructura ocupa 50 bytes o menos

CopyMemory ByVal aux, MiEstructura, LenB(MiEstructura)

Y en el destino :

CopyMemory MiEstructura, ByVal aux, LenB(MiEstructura)