Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type MSVC_AVS_Value = Int64;
AVS_Value = record vtype: WideChar; array_size: Smallint; case Char of 'c': (vclip: Pointer); 'b': (vboolean: LongBool); 'i': (vinteger: Integer); 'f': (vfloating_pt: Single); 's': (vstring: PChar); 'a': (varray: PAVS_Value_array); end;
ext_avs_invoke: function(env: PAVS_ScriptEnvironment; name: PAnsiChar; args: MSVC_AVS_Value; arg_names: PPAnsiChar): MSVC_AVS_Value; stdcall; ext_avs_release_value: procedure(v: MSVC_AVS_Value); stdcall;
function avs_invoke(env: PAVS_ScriptEnvironment; name: PAnsiChar; args: AVS_Value; arg_names: PPAnsiChar = nil): AVS_Value; begin Result := AVS_Value(ext_avs_invoke(env, name, MSVC_AVS_Value(args), arg_names)) end;
procedure avs_release_value(v: AVS_Value); begin ext_avs_release_value(MSVC_AVS_Value(v)); end; |
Hallo,
seit Tagen versuche ich die function und procedure auf 64bit umzustellen, bisher leider ohne Erfolg.
Unter 32bit gibt es keine Probleme aber bei 64bit erhalte ich entweder "ungültige Typenumwandlung" oder eine nicht lauffähige Compelierung.
Versucht habe ich (auch unter 32bit):
Delphi-Quelltext
1: 2:
| ext_avs_release_value(MSVC_AVS_Value(@v)) ext_avs_release_value(MSVC_AVS_Value(Pointer(v)^)) |
Ergebnis: keine Compiler Fehler aber ein nicht lauffähiges Programm
auch:
Delphi-Quelltext
1:
| Result := AVS_Value(Pointer(ext_avs_invoke(env, name, MSVC_AVS_Value(@args), arg_names))^) |
ergibt eine nicht lauffähige Compelierung, Pointer^ und Addr @ sind schuld.
Ich bin mir auch nicht sicher ob "ext_avs_invoke" einen PInt64 Adresse zurückgibt, es handelt sich um die Avisynth.dll die ich gerne in der 64bit Version nutzen möchte.
Wie behandle ich unter 64bit eine Adresse auf einen Record der aus einer DLL kommt? wie wandle ich ein Int64 zu einem Record?
Danke!