AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Headerdatei in Pascal

Ein Thema von NickelM · begonnen am 13. Feb 2011 · letzter Beitrag vom 17. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

C++ Headerdatei in Pascal

  Alt 13. Feb 2011, 03:57
Delphi-Version: 2009
Hallo ihr,

Ich bin gerade dabei das TS3 Plugin SDK von C++ in Pascal zuübersetzen. Soweit sogut.
Nur am übersetzen eines structs, der Funktionen enthält, funkt irgendwas net.

Eine Funktion als Beispiel, die ich verwenden wollte:
Code:
//Auszug von einen anderen Datei für Definition
//des anyid types (hab ich weggelassen da ich net weis ich das übersetzen soll)
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
   typedef unsigned __int16 anyID;
   typedef unsigned __int64 uint64;
   #ifdef BUILDING_DLL
      #define EXPORTDLL __declspec(dllexport)
   #else
      #define EXPORTDLL
   #endif
#else
   #include <stdint.h>
   typedef uint16_t anyID;
   typedef uint64_t uint64;
   #ifdef BUILDING_DLL
      #define EXPORTDLL __attribute__ ((visibility("default")))
   #else
      #define EXPORTDLL
   #endif
#endif

//Aus der "Problemdatei"
#ifdef __cplusplus
extern "C" {
#endif
struct TS3Functions {
unsigned int (*requestSendPrivateTextMsg)(uint64 serverConnectionHandlerID, const char* message, anyID targetClientID, const char* returnCode);
}
Ich hab das jetzt bisher so übersetzt:
Delphi-Quellcode:
type
anyID = Word;

TrequestSendPrivateTextMsg = function (serverConnectionHandlerID : uint64; const message : PAnsiChar; targetClientID : anyID; const returnCode : PAnsiChar) : Cardinal; //Muss PAnsiChar sein, da es keine Unicode zeichen sind

TTS3Functions = record
requestSendPrivateTextMsg : TrequestSendPrivateTextMsg;
end;
Hat es was mit den Teilen zutun die ich rausgelassen habe? das mit dem extern "c" weis ich hat was mit exportieren der Funktionen zutun.
Wenn ich aber an die Funktion ein cdecl; dranhäng, ändert sich nichts.

Ich muss zugeben mit den Grundlagen und Typumwundlung gehts ja noch, aber bei solchen Compiler "Anweisungen" bin ich überfragt...
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: C++ Headerdatei in Pascal

  Alt 14. Feb 2011, 04:35
*push*
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
phade

Registriert seit: 27. Aug 2003
6 Beiträge
 
#3

AW: C++ Headerdatei in Pascal

  Alt 14. Feb 2011, 10:19
function (...): Cardinal; stdcall;
  Mit Zitat antworten Zitat
Robotiker
(Gast)

n/a Beiträge
 
#4

AW: C++ Headerdatei in Pascal

  Alt 14. Feb 2011, 12:16
Hallo ihr,
Nur am übersetzen eines structs, der Funktionen enthält, funkt irgendwas net.
Der struct enthält keine Funktion, sondern einen Zeiger auf eine Funktion.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: C++ Headerdatei in Pascal

  Alt 14. Feb 2011, 12:24
function (...): Cardinal; stdcall;
Wieso? Normal wäre __cdecl, aber das hängt komplett vom Compiler ab - kann man also nicht sagen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#6

AW: C++ Headerdatei in Pascal

  Alt 15. Feb 2011, 05:44
Es geht mir darum, stimmt das soweit oder nicht? Soll ich jetzt also an jeden Pointer einer Funktion cdecl danhängen? Weil es muss cdecl sein, da die Funktionen, die dan exportiert werden, auch nur mit cdecl funktionieren.

EDIT: Ich hab jetzt mal an jedem Pointer der Funktion cdecl; angehängt.
Bei manchen Funktionene sind auch float enthalten diese hab ich als Single gemacht. Liegt es vllt dadurch an eine Verschiebung der Adressen sowas?
Es kommt immer noch der gleiche Fehler (siehe Anhang)
Angehängte Grafiken
Dateityp: jpg Fehler_TSPlugin.jpg (16,6 KB, 29x aufgerufen)
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (15. Feb 2011 um 06:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

AW: C++ Headerdatei in Pascal

  Alt 15. Feb 2011, 07:21
Wie jetzt, Delphi schmeisst VisualStudio-Fehler ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: C++ Headerdatei in Pascal

  Alt 16. Feb 2011, 01:54
Wie jetzt, Delphi schmeisst VisualStudio-Fehler ?
Nee, das bedeutet nur daß der JIT-Debugger von VS installiert und konfiguriert ist.

Es geht mir darum, stimmt das soweit oder nicht? Soll ich jetzt also an jeden Pointer einer Funktion cdecl danhängen? Weil es muss cdecl sein, da die Funktionen, die dan exportiert werden, auch nur mit cdecl funktionieren.
Nein, nicht an jeden. Interessant ist was die Orginaleinstellung des Projektes ist. Üblicherweise ist dies __cdecl. Wichtig ist es aber nur dort wo eine Schnittstelle mit dem anderen Code existiert.

EDIT: Ich hab jetzt mal an jedem Pointer der Funktion cdecl; angehängt.
Wie gesagt, es geht darum, daß der Prototyp __cdecl ist, wenn das Elternprojekt (also der Code welcher dein Plugin aufruft) __cdecl ist. Und das muß dokumentiert sein oder es ist die Standardeinstellung (und das ist __cdecl).

Bei manchen Funktionene sind auch float enthalten diese hab ich als Single gemacht. Liegt es vllt dadurch an eine Verschiebung der Adressen sowas?
Es kommt immer noch der gleiche Fehler (siehe Anhang)
float (C/C++) ist Single (Delphi). Sie sollten binärkompatibel sein.

Aber wir bräuchten schon mehr Infos. Bspw. welche Exception geworfen wird. Oder du gibst uns mindestens die Binärdateien, so daß wir es im Debugger/Disassembler anschauen können.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#9

AW: C++ Headerdatei in Pascal

  Alt 16. Feb 2011, 18:50
Naja okay. Das Programm Teamspeak 3 schemiste eine dmp datei raus. Ich lade sie mal hoch gugt mal ob ihr damit was anfangen könnt.

Weil ich persönlich kann mit der Datei nichts anfangen. Kenn mich da auch nicht so aus xD.
Ich stell auch mal den Originalcode der Datei rein. Die txt ist eine .h Datei.
Angehängte Dateien
Dateityp: zip ts3_clientui-win32-12815-2011-02-15 07_18_59.687500.zip (25,7 KB, 9x aufgerufen)
Dateityp: txt ts3_functions.txt (23,2 KB, 12x aufgerufen)
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: C++ Headerdatei in Pascal

  Alt 16. Feb 2011, 21:57
Naja okay. Das Programm Teamspeak 3 schemiste eine dmp datei raus. Ich lade sie mal hoch gugt mal ob ihr damit was anfangen könnt.
Die Dump-Datei wäre nochmal so gut, wenn die Debugsymbole (.pdb-Dateien) dabei wären
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz