![]() |
fremde Dll verwenden
Völlige Verzweiflung hat mich letztlich dazu getrieben hier ein frage zu posten. Also flehe ich mal dezent um Hilfe!
Ich verwende eine DLL deren C source ich erhlaten habe. da gibt es eine ganz simple Prozedur drinnen, die ich in meinem Delphi Programm nützen möchte:
Code:
{
Const OK = 0 Const MEM_ERROR = &H1 Const DLL_NOTINIT = &H2 . . . }
Code:
Ich hab also in Delphi7 diese Prozedur wie folgt dekalriert:
VOID EXPENTRY netErrorStr (USHORT errCode, USHORT maxLen, PVALUE errStr)
{ switch (errCode) { case OK : strncpy(errStr, "O.K." , maxLen); errStr[maxLen] = '\0'; break; case DLL_NOTINIT: strncpy(errStr, "DLL noch nicht initialisiert" , maxLen); errStr[maxLen] = '\0'; break; case MEM_ERROR : strncpy(errStr, "Speicherfehler" , maxLen); errStr[maxLen] = '\0'; break; case ADR_ALRUSED: strncpy(errStr, "Adresse bereits verwendet worden" , maxLen); errStr[maxLen] = '\0'; break; default : strncpy(errStr, "Unbekannter Fehler" , maxLen); errStr[maxLen] = '\0'; } } Zitat:
Code:
Da sollte doch dann sowas wie "O.K." im meiner Messagebox angezeigt werden. Aber ach: ich bin schlicht und ergreifend z'deppat!
procedure TForm1.Button1Click(Sender: TObject);
var pValue: PChar; sValue: String; begin netErrorStr(0,80,pValue); sValue:= strpas(PChar(pValue); showmessage(sValue); end; Gibt es wo einen Barmherzigen der mir sagt wie meine netErrorStr wirklich deklariert werden muss um den ErrorString zurückzubekommen? danke schon mal rieder/IT |
Re: fremde Dll verwenden
Ich bin mir nicht sicher, aber versuchs mal so:
Delphi-Quellcode:
Mit var PChar übergibst du einen Zeiger auf einen Zeiger.
procedure netErrorStr(errNo, MaxLen: Word; ErrorText: PChar); pascal; external 'waagen.dll';
Oder versuch mal cdecl anstatt pascal. |
Re: fremde Dll verwenden
Du bist mein Idol! Pfau! Ich verneige mich in Ehrfurcht!
Das Ding funzt jetzt fast...!!! Ich verstehe nur nicht, ganz wie das zustande kommt. Ich brauche doch eine Rückgabe, also dachte ich, ich muss die variable auch in der funktion so angeben. und vom cdecl red ich erst garnicht, weil variablen von hinten nach vorne übergeben übersteigt meinen horizont. seltsamerweise steht in der der variablen sValue tatsächlich "O.K." drin, aber wenn ich
Code:
dann die messagebox aufmache um sValue anzuzeigen stürzt das Programm wieder ab... :(
sValue:= strpas(PChar(pValue));
showmessage(sValue); hast du vielleicht noch so eine gloriose idee? rieder/IT |
Re: fremde Dll verwenden
Hmm, was passiert denn, wenn du ShowMessage mit pValue aufrufst?
|
Re: fremde Dll verwenden
dann prackt's ihn leider auch auf! Kann es sein, dass es hier ein Problem mit der Nullterminierung gibt?
rieder/IT |
Re: fremde Dll verwenden
Da kann ich dir jetzt leider auch nicht genau helfen. In solchen Fällen versuch ich immer genau rauszufinden, wo und warum ein Fehler auftaucht und probier alles aus, auch wenn ich mir sicher bbin, dass das nicht geht. Irgendwann find ich dann den Fehler ... meistens.
|
Re: fremde Dll verwenden
Wie auch immer, jetzt versuch ich mich weiter durchzuraufen! Vielen Dank für deine Hilfe, ich war ehrlich gesagt schon am aufgeben, aber jetzt bin ich wieder motiviert!
D A N G G E ! ! ! :dancer: rieder/IT |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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