tengo esta API C ActiveX (no tienen las fuentes sólo los binarios):Delphi 2010: EOleSysError 'no coincide el tipo' llamando control ActiveX
// \param a [out] Variant holding a byte array
// \param b [out] Reference to a longlong (Signed 64-bit)
// \param c [out] Reference to a short
short foo(variant* a, longlong* b, short* c);
que está funcionando muy bien en C#:
//auto-generated import:
short foo(ref object a, ref long b, ref short c);
test {
object a=null;
long b=0;
short c=0;
foo(a,b,c); => OK
}
NOK en Delphi 2010 (Tenga en cuenta que {} ?? Int64 OleVariant se añade por la herramienta de importación de Delphi):
//auto-generated import:
function foo(var a: OleVariant;
var b: {??Int64}OleVariant;
var c: Smallint): Smallint;
procedure Test;
var
a, b: OleVariant;
c: Smallint;
begin
foo(a,b,c); => **EOleSysError 'Type mismatch' exception**
end;
de acuerdo con esto (http://www.netcoole.com/delphi2cs/datatype.htm) long = int64 en Delphi – ComputerSaysNo
también, longlong es un entero de 64 bits con signo – OnTheFly
@Dorin C/C++ long tiene 32 bits en Windows. –