Einzelnen Beitrag anzeigen

NickelM

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

AW: C++ Headerdatei in Pascal

  Alt 17. Feb 2011, 20:07
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:
(*$HPPEMIT '#pragma warning (disable : 4100)' *) //oder hat das bzw. ist das falsch übersetzt?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.

Geändert von NickelM (17. Feb 2011 um 20:10 Uhr)
  Mit Zitat antworten Zitat