RE:Pasar de buffer a olevariant
Ok, toda vez que en C no hay un tipo de dato byte, asumo que te refieres a algún typedef de char o unsigned char, o algo por el estilo:
typedef unsigned char byte;
En fin, el tipo de dato VARIANT (y sus derivados) es empleado con la finalidad de proveer diversos tipos de datos. Esto en C es logrado a través de las uniones. De hecho, VARIANT es una estructura con dos datos, el primero es un identificador del tipo de dato a emplear. El segundo, es una union con los muchos tipos diferentes de datos a emplear.
Sin embargo, esto no significa que se pueda pasar CUALQUIER valor a un VARIANT. Sólo los que estén dentro de la unión pueden ser empleados.
El VARIANT se creó con la finalidad de hacer a COM compatible con otros lenguajes, sobre todo Visual Basic. Pero no puedes pasar cualquer tipo como VARIANT.
Ahora bien, no conozco Delphi, pero en VB hay una forma de pasar el búfer de bytes. Si declaras un parámetro como Any, este recibe cualquier flujo de bytes. Entonces, supongamos que mi función en C++ para obtener los bytes de la imagen es como sigue:
char* GetImgBytes(¨);
Entonces, en VB haces la declaración normal para importar esa función desde una librería:
Declare Function GetImgBytes Lib "mylib.dll" Alias "GetImgBytes" () _
As Any
Y al invocar a esta función, tú sabes que recibirás el búfer de bytes, para su posterior manipulación en VB.
Quizás haya algo parecido en Delphi. En cualquier caso, dudo mucho que te sirva el emplear VARIANT o alguno de sus derivados. Saludos.