![]() |
Delphi-Version: 2009
C++ Headerdatei in Pascal
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:
Ich hab das jetzt bisher so übersetzt:
//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); }
Delphi-Quellcode:
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.
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; 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... |
AW: C++ Headerdatei in Pascal
*push*
|
AW: C++ Headerdatei in Pascal
function (...): Cardinal; stdcall;
|
AW: C++ Headerdatei in Pascal
Zitat:
|
AW: C++ Headerdatei in Pascal
Zitat:
|
AW: C++ Headerdatei in Pascal
Liste der Anhänge anzeigen (Anzahl: 1)
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) |
AW: C++ Headerdatei in Pascal
Wie jetzt, Delphi schmeisst VisualStudio-Fehler ? :gruebel: :stupid:
|
AW: C++ Headerdatei in Pascal
Zitat:
Zitat:
Zitat:
Zitat:
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. |
AW: C++ Headerdatei in Pascal
Liste der Anhänge anzeigen (Anzahl: 2)
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. |
AW: C++ Headerdatei in Pascal
Zitat:
|
AW: C++ Headerdatei in Pascal
Problem ist...hab ich nicht.. TS3 spuckt nur die Meldung und das aus mehr net.
Das Programm istr nämlich eine Fremdanwendung xD |
AW: C++ Headerdatei in Pascal
Auslösende Datei ist:
Code:
Viel mehr kann man schon nicht entnehmen, weil es nur ein Minidump ist (sprich: nicht der komplette Speicherinhalt ist verfügbar)
0:000> lmvm musik_vuplayer
start end module name 01fa0000 01fca000 musik_vuplayer T (no symbols) Loaded symbol image file: musik_vuplayer.dll Image path: C:\Programme\TeamSpeak 3 Client\plugins\musik_vuplayer.dll Image name: musik_vuplayer.dll Timestamp: Tue Feb 15 06:18:18 2011 (4D5A1AAA) CheckSum: 00000000 ImageSize: 0002A000 File version: 0.0.0.0 Product version: 0.0.0.0 File flags: 0 (Mask 0) File OS: 0 Unknown Base File type: 0.0 Unknown File date: 00000000.00000000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 |
AW: C++ Headerdatei in Pascal
Zitat:
Delphi-Quellcode:
Hier der Original Beispielcode aus der .c Datei:
var TS3Func : TTS3Functions; // der Record;
procedure ts3plugin_setFunctionPointers(const funcs : TTS3Functions); cdecl; //der Parameter wird von der Anwendung festgelegt (zumindest sieht es so aus, in dem Originalcode begin TS3Func := funcs; end; //Und hier der Aufruf function ts3plugin_onTextMessageEvent(serverConnectionHandlerID : uint64; targetMode : anyID; toID : anyID; fromID : anyID; const fromName : PAnsiChar; const fromUniqueIdentifier : PAnsiChar; const message : PAnsiChar; ffIgnored : Integer) : Integer; cdecl; begin if TS3Func.requestSendPrivateTextMsg(serverConnectionHandlerID,'test',fromID,nil) = 0 then begin end end;
Code:
Wie gesagt aufrufen tut er die exportierte funktion, nur beim aufruf der Callback funktionen bekomm ich den fehler rausgeschmiessen (ich ruf ja dafor einmal PostMessage wegen meinem Sinn des Plugins machen. Es kommt auch an und er macht es auch, nur die Funktion will net.
static struct TS3Functions ts3Functions;
/* Set TeamSpeak 3 callback functions */ void ts3plugin_setFunctionPointers(const struct TS3Functions funcs) { ts3Functions = funcs; //Hier die Beispiel funktion in dem gleichen Zusammenhang, wie ich sie auch verwenden will int ts3plugin_onTextMessageEvent(uint64 serverConnectionHandlerID, anyID targetMode, anyID toID, anyID fromID, const char* fromName, const char* fromUniqueIdentifier, const char* message, int ffIgnored) { if(ts3Functions.requestSendPrivateTextMsg(serverConnectionHandlerID, "Text message back!", fromID, NULL) != ERROR_ok) { } } Wenn ich es rauskommentiere gehts. Also auf jedenfall liegt es daran. EDIT: Liegt es vllt daran? In dem Originalcode steh sowas noch am Anfang:
Code:
Dies hab ich zur Sicherheit so gemacht:
#pragma warning (disable : 4100) /* Disable Unreferenced parameter warning */
Delphi-Quellcode:
(*$HPPEMIT '#pragma warning (disable : 4100)' *) //oder hat das bzw. ist das falsch übersetzt?
|
AW: C++ Headerdatei in Pascal
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz