Wie soll ich das vertehen? Einen "Delphi-Header" gibt es nicht. Möchtest du jetzt die C++ Klasse umbauen? Das wird auch nichts bringen, da es an der gemeinsamen ABI scheitert. Du könntest aber Interfaces einsetzen. Diese haben einen vorgegebene Aufbau und es sind durch die Interface-VMT auch keine mangled names aus der DLL zu lesen. Nachteil ist, dass du die "Klassen" nicht ableiten kannst.
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| {$MINENUMSIZE 4} {$ALIGN 4} type TDeleteMode = (dmStackBased = 2, dmHeapBased = 3);
pacBasicKI = object public procedure Init(p: PAC_POINT; m: PAC_MAP; e: Bool = False); cdecl; procedure Done(DeleteMode: TDeleteMode = dmStackBased); virtual; cdecl; procedure Run(Steps: Integer); cdecl; procedure Enabled(e: Bool); overload; function Enabled: Bool; overload; procedure Position(p: PAC_POINT); overload; function Position: PAC_POINT; overload; protected function IsFree(d: PAC_DIR): Bool; cdecl; private _enabled: BOOL; _map: PAC_MAP; _position: PAC_POINT; function Walking(d: PAC_DIR = PAC_DIRNONE): PAC_DIR; virtual; cdecl; end; PAC_BASIC_KI = pacBasicKI; PPAC_BASIC_KI = ^pacBasicKI;
procedure pacBasicKI.Init; external MyLib name '10pacBasicKI'; procedure pacBasicKI.Done; external MyLib name '_10pacBasicKI'; procedure pacBasicKI.Run; external MyLib name 'Run_10pacBasicKIi'; function pacBasicKI.IsFree; external MyLib name 'IsFree_10pacBasicKI7PAC_DIR'; function pacBasicKI.Walking; external MyLib name 'Walking_10pacBasicKI7PAC_DIR';
procedure pacBasicKI.Enabled(e: Bool); overload; begin _enabled := e; end;
function pacBasicKI.Enabled: Bool; overload; begin Result := _enabled; end;
procedure pacBasicKI.Position(p: PAC_POINT); overload; begin _position := p; end;
function pacBasicKI.Position: PAC_POINT; overload; begin Result := _position; end; |
Ob das funktionieren wird ist fraglich, denn die mangled names habe ich vom Linux gcc 2.95 genommen und der hat eine andere ABI als BCB oder VC++.