Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C++ Headerdatei in Pascal (https://www.delphipraxis.net/158310-c-headerdatei-pascal.html)

NickelM 17. Feb 2011 06:22

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

Assarbad 17. Feb 2011 13:36

AW: C++ Headerdatei in Pascal
 
Auslösende Datei ist:

Code:
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
Viel mehr kann man schon nicht entnehmen, weil es nur ein Minidump ist (sprich: nicht der komplette Speicherinhalt ist verfügbar)

NickelM 17. Feb 2011 20:07

AW: C++ Headerdatei in Pascal
 
Zitat:

Zitat von Assarbad (Beitrag 1082458)
Auslösende Datei ist:

Code:
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
Viel mehr kann man schon nicht entnehmen, weil es nur ein Minidump ist (sprich: nicht der komplette Speicherinhalt ist verfügbar)

no symbols....hmm kann es sein das das auf einen nicht zugewissenen pointer hindeutet?...Weil die Anwendung übergibt die pointer zu den Funktionen mit einer exportierten Prozedur. Also in der DLL muss eine Funktion exportiert werden (was ich aber schon gemacht habe), die nach dem initalisieren der DLL von der anwendung aufgerufen wird. Diese Prozedur hat eine const parameter, den Record, den ich dann intern in der DLL speichern muss. Dies sieht dan so aus:

Delphi-Quellcode:
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;
Hier der Original Beispielcode aus der .c Datei:
Code:
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)
{

}

}
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.
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:
#pragma warning (disable : 4100) /* Disable Unreferenced parameter warning */
Dies hab ich zur Sicherheit so gemacht:
Delphi-Quellcode:
(*$HPPEMIT '#pragma warning (disable : 4100)' *) //oder hat das bzw. ist das falsch übersetzt?

Assarbad 17. Feb 2011 22:09

AW: C++ Headerdatei in Pascal
 
Zitat:

Zitat von NickelM (Beitrag 1082560)
no symbols....hmm kann es sein das das auf einen nicht zugewissenen pointer hindeutet?...

Nee, das deutet darauf hin, daß es für deine DLL (da ist es normal weil die Delphi ist) und für den Elternprozeß (nicht in der Ausgabe enthalten) keine gültigen Debugsymbole gibt.

Zitat:

Zitat von NickelM (Beitrag 1082560)
Delphi-Quellcode:
(*$HPPEMIT '#pragma warning (disable : 4100)' *) //oder hat das bzw. ist das falsch übersetzt?

Das dürfte falsch sein. Warnungen sind compiler-spezifisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Seite 2 von 2     12   

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