AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

fremde Dll verwenden

Ein Thema von jam176 · begonnen am 25. Jul 2003 · letzter Beitrag vom 25. Jul 2003
Antwort Antwort
jam176

Registriert seit: 21. Jul 2003
9 Beiträge
 
#1

fremde Dll verwenden

  Alt 25. Jul 2003, 13:55
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:03
Ich bin mir nicht sicher, aber versuchs mal so:
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jam176

Registriert seit: 21. Jul 2003
9 Beiträge
 
#3

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:27
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:33
Hmm, was passiert denn, wenn du ShowMessage mit pValue aufrufst?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jam176

Registriert seit: 21. Jul 2003
9 Beiträge
 
#5

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:34
dann prackt's ihn leider auch auf! Kann es sein, dass es hier ein Problem mit der Nullterminierung gibt?

rieder/IT
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:38
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
jam176

Registriert seit: 21. Jul 2003
9 Beiträge
 
#7

Re: fremde Dll verwenden

  Alt 25. Jul 2003, 14:41
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 ! ! !


rieder/IT
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz