Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   fremde Dll verwenden (https://www.delphipraxis.net/6870-fremde-dll-verwenden.html)

jam176 25. Jul 2003 13:55


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:
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';
  }
}
Ich hab also in Delphi7 diese Prozedur wie folgt dekalriert:

Zitat:

procedure netErrorStr(errNo, MaxLen: smallint; var ErrorText: PChar); pascal; external 'waagen.dll';
und dann so verwendet:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  pValue: PChar;
  sValue: String;
begin
  netErrorStr(0,80,pValue);
  sValue:= strpas(PChar(pValue);
  showmessage(sValue);
end;
Da sollte doch dann sowas wie "O.K." im meiner Messagebox angezeigt werden. Aber ach: ich bin schlicht und ergreifend z'deppat!

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

Chewie 25. Jul 2003 14:03

Re: fremde Dll verwenden
 
Ich bin mir nicht sicher, aber versuchs mal so:
Delphi-Quellcode:
procedure netErrorStr(errNo, MaxLen: Word; ErrorText: PChar); pascal; external 'waagen.dll';
Mit var PChar übergibst du einen Zeiger auf einen Zeiger.
Oder versuch mal cdecl anstatt pascal.

jam176 25. Jul 2003 14:27

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:
  sValue:= strpas(PChar(pValue));
  showmessage(sValue);
dann die messagebox aufmache um sValue anzuzeigen stürzt das Programm wieder ab... :(

hast du vielleicht noch so eine gloriose idee?

rieder/IT

Chewie 25. Jul 2003 14:33

Re: fremde Dll verwenden
 
Hmm, was passiert denn, wenn du ShowMessage mit pValue aufrufst?

jam176 25. Jul 2003 14:34

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

Chewie 25. Jul 2003 14:38

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.

jam176 25. Jul 2003 14:41

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