Pascal zu C++

Fou-Lu

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
290
Hallo Leute,
ich hab hier eine Datei die ich eher dringend brauchen würde, aber leider ist sie in Pascal geschrieben und ich muss sie in C++ übersetzen. Da ich aber keinen blasen Schimmer von Pascal habe und auch in C++ noch immer ein Amateur bin, würde ich mich sehr darüber freuen, wenn mir jemand helfen könnte.

Es wär echt super, wenn mir jemand helfen könnte der von Pascal UND C++ ne Ahnung hat, da ich in C++ auch nicht absolut jede Bibliothek oder Funktion auswendig kenne und auch nicht alles wissen würde wie man eine Pascalfunktion die ich gar nicht kenne in C++ umsetzen könnte.

ICQ: 280173080

Danke schon mal im Vorraus.
 
Keiner der helfen kann?
Kommts schon Leute, die Datei beinhaltet wirklich nur wenig Code, aber dafür wird es sich für viele C++ Entwickler lohnen, da es sich hierbei um eine Scriptengine handelt.

Die Scriptengine ist ziemlich schnell, aber noch immer in Entwicklung. Allerdings kann man sie bereits genutzt werden (mit Erlaubnis vom Entwickler). Bis jetzt ist es nur für Pascal/Delphi Programmierer nutzbar, aber wenn ihr mir helfen könntet, dann auch für C++ Entwickler!
 
Ich habe den Verdacht, dass du unter "Helft mir" eher "Macht das für mich" verstehst. Ich denke, Pascal ist relativ selbsterklärend für jeden, der bereits Erfahrungen mit einer anderen Sprache gesammelt hat. Poste doch einfach den Pascal-Quelltext und sag uns, welche Stellen du darin nicht verstehst.
 
Wie sollte ich bitte schön was dazu lernen, wenn ich die anderen alles für mich machen lasse? Wenn ich sage helft mir dann meine ich auch helfen! ;)

Code:
unit cpscript;

interface
uses dialogs, sysutils;
type Pinteger=^integer;

type
 Tcallback0 = function:integer; pascal;
 Tcallback1 = function(a:integer):integer; pascal;
 Tcallback2 = function(a,b:integer):integer; pascal;
 Tcallback3 = function(a,b,c:integer):integer; pascal;
 Tcallback4 = function(a,b,c,d:integer):integer; pascal;
 Tcallback5 = function(a,b,c,d,e:integer):integer; pascal;
 Tcallback6 = function(a,b,c,d,e,f:integer):integer; pascal;
 Tcallback7 = function(a,b,c,d,e,f,g:integer):integer; pascal;
 Tcallback8 = function(a,b,c,d,e,f,g,h:integer):integer; pascal;
 Tcallback9 = function(a,b,c,d,e,f,g,h,i:integer):integer; pascal;
 Tdebugger =  procedure (zeile:integer;stack:pchar); pascal;

procedure cp_clear; stdcall; external 'cpscript.DLL';
procedure cp_add(a:pchar;b:pointer); stdcall; external 'cpscript.DLL';
procedure cp_read(a,b:pchar); stdcall; external 'cpscript.DLL';
function cp_solve(s:pchar):integer; stdcall; external 'cpscript.DLL';
procedure cp_compile(a,b:pchar); stdcall; external 'cpscript.DLL';
procedure cp_logfn(p:pointer); stdcall; external 'cpscript.DLL';
function cp_find(a:pchar):pointer; stdcall; external 'cpscript.DLL';
procedure cp_const(a:pchar;i:integer); stdcall; external 'cpscript.DLL';
procedure cp_macro(a,b:pchar); stdcall; external 'cpscript.DLL';
procedure cp_debug(a:pointer); stdcall; external 'cpscript.dll';
function cp_findp(a:pointer):pchar; stdcall; external 'cpscript.dll';

procedure initscript_standard;
procedure evaluate(zeile:integer;stack:pchar); pascal;

implementation

procedure initscript_standard;
begin
 cp_macro('sum2 as int','595801C8');
 cp_macro('sub2 as int','595829C8');
 cp_macro('mul2 as int','5958F7E9');

 cp_macro('div2 as int','595899F7F9');
 cp_macro('mod2 as int','595899F7F989D0');

 cp_macro('and2 as bool','595821C8');
 cp_macro('xor2 as bool','595831C8');
 cp_macro('or2 as bool' ,'595809C8');

 cp_macro('equal2 as bool'       ,'585929C8F7D819C0F7D0');
 cp_macro('greaterthan2 as bool' ,'585929C8C1F81F');
 cp_macro('greaterequal2 as bool','58594129C8C1F81F');
 cp_macro('lessthan2 as bool'    ,'595829C8C1F81F');
 cp_macro('lessequal2 as bool'   ,'59584129C8C1F81F');
end;

procedure evaluate(zeile:integer;stack:pchar); pascal;
begin
 showmessage('Zeile '+inttostr(zeile)+':'#13#10#13#10'Aufrufstack:'#13#10+stack);
end;  


end.


Das ist der Code der Datei. Was ich nicht verstehe ist z.B.

"type" wie soll ichs in c++ umsetzen dieses type? durch eine klasse oder wie? o.O
"oder das mit den tcalls" würde es nicht in c++ reichen, wenn ich "int Tcallback0, int Tcallback1, ..." schreiben würde?
oder "implementation" was heißt das und wie in c++ umsetzen?
oder die letzten zwei procedures die check ich auch nicht so ganz. wofür steht z.B. das "pascal" am ende immer?

oder wie kann ich unit cpscript in c++ umsetzen, wofür steht es überhaupt? und durch was soll ich interface in c++ ersetzen?



danke schon mal im vorraus.
 
Okay, also zuerst, das ist ein Delphi (bzw. Object-Pascal) Programm.

Das type entspricht an der Stelle einem typedef.

Tcallback0 = function:integer; pascal;

definiert einen Zeiger auf einene Funktion ohne Parameter mit Rückgabewert Integer. Eine function hat immer einen Rückgabewert, eine procedure ist eine Funktion ohne Rückgabewert, also void in C++. Den Unterschied zwischen function und procedure gibt's dort nicht.
C(++) entsprechung wäre: typedef int (* Tcallback0)();

Das pascal; ist die Aufrufkonvention (Wie werden Parameter und Rückgabewerte an die Funktion übergeben und zurückgegeben). Ich weiß ehrlich gesagt nicht, ob die sich mit C++ ohne weiteres ersetzen lässt.



procedure cp_clear; stdcall; external 'cpscript.DLL';

Macht die Prozedur cp_clear aus der externen DLL cpscript bekannt (aufrufbar). Dabei wird die DLL statisch in der Exe zur Compilezeit gebunden. Wenn du das in C++ machen willst, brauchst du eine entsprechende .lib-Datei. Wenn die nicht vorhanden ist, kannst du die DLL vermutlich nur dynamisch mit LoadLibrary und GetProcAddress laden. Die Aufrufkonvention stdcall ist übrigens mit C++ kompatibel, ohne dass man etwas tun müsste.

Hoffe, das hilft dir etwas weiter. Bei Fragen fragen.

Btw:
type Pinteger=^integer;

entspricht
typedef int* PInteger;

Und ein PChar ist ein char* .
 
Zuletzt bearbeitet:
ok vielen dank, ich denke schon, dass es mir sehr hilft. werd aber erst morgen mit dem übersetzen fortfahren :)
 
Zurück
Oben