Seite 1 von 1

IMPORT,IMPORTC,ENDIMPORT [Beta3]

Verfasst: 18.02.2006 18:11
von Falko
Habe folgendes ausprobiert, was aber nur mittels Debugger funktioniert!

Code: Alles auswählen

Import "cbw32.lib"
  FlashLED(a) As "_cbFlashLED@4"
  GetBoardName(a,b) As "_cbGetBoardName@8"
EndImport



If GetBoardName(0,@BoardName.c) = 0
  MessageRequester("CBW32_Flashtest","die LED sollte jetzt blinken")
  FlashLED(0)
  Delay(1500)
  MessageRequester("CBW32_Ausgabe",PeekS(@BoardName)) 
Else
  MessageRequester("Fehler", "Zum Test sollte das Modul auf Null stehen.")
EndIf
Ausgabe-Message hat geschrieben: Erste Messagefenster:
---------------------------
CBW32_Flashtest
---------------------------
die LED sollte jetzt blinken
---------------------------
OK
---------------------------

Und das zweite Messagefenster:
---------------------------
CBW32_Ausgabe
---------------------------
PMD-1024HLS
---------------------------
OK
---------------------------
Klappt aber nur mit eingeschalteten Debugger. Sobald ich aber den ausschalte, kommt wohl das Messagefenster mit dem FlashLED wobei
auch am Modul die LED blinkt, aber danach DR Watson der einen Fehlerbericht absenden möchte.

Nun ist die Frage, warum funktioniert das nur mit dem Debugger zusammen?


MfG Falko

Verfasst: 18.02.2006 18:24
von ts-soft

Code: Alles auswählen

If GetBoardName(0,@BoardName.c) = 0 
Was der Debugger macht, weiß ich nicht, aber dieser Code ist mit
Sicherheit verkehrt!

Edit1:
Versuch es mal so:

Code: Alles auswählen

Import "cbw32.lib"
  FlashLED(a) As "_cbFlashLED@4"
  GetBoardName(a,b) As "_cbGetBoardName@8"
EndImport

BoardName.s = Space(255)

If GetBoardName(0,@BoardName) = 0
  MessageRequester("CBW32_Flashtest","die LED sollte jetzt blinken")
  FlashLED(0)
  Delay(1500)
  MessageRequester("CBW32_Ausgabe", BoardName)
Else
  MessageRequester("Fehler", "Zum Test sollte das Modul auf Null stehen.")
EndIf
Ob 255 Zeichen als Buffer reichen, kann ich natürlich nicht sagen, evtl. noch mit ImportC probieren.

Verfasst: 18.02.2006 18:37
von Falko
Thomas ich danke dir :allright:

Verfasst: 18.02.2006 18:42
von ts-soft
Falko hat geschrieben:Thomas ich danke dir :allright:
Wie, geht jetzt ?
Schööööööönnn

war aber wirklich nicht schwer :mrgreen:

Verfasst: 18.02.2006 18:51
von Falko
Hättest mir ja gestern den Tip auch geben können :mrgreen:
Nun habe ich dort alles gelöscht und hier hingepackt.

Aber trotzdem Daaaaanke für den Tip der Reservierung. Und nun
kann ich weiter :allright:

Verfasst: 18.02.2006 18:53
von ts-soft
Falko hat geschrieben:Daaaaanke für den Tip der Reservierung. Und nun
kann ich weiter :allright:
Für die tatsächlich benötigte Buffergrösse ist bestimmt eine Constante in der Headerdatei definiert. Aber *.c ist nur ein oder zwei byte gross, das langt nie :lol:

Verfasst: 18.02.2006 19:27
von Falko
Wenn du das aus dem C-Header meinst.
C-Header hat geschrieben:/* Maximum length of board name */
#define BOARDNAMELEN 25


int EXTCCONV cbGetBoardName (int BoardNum, char *BoardName);

int WINAPI cbGetBoardName (int BoardNum, char FAR *BoardName);

short _pascal cbGetBoardName (short BoardNum, char *BoardName);
Also müßte man den Header wohl mit einbinden. Ich dachte es würde automatisch über die Import-Libgeschichte gehen. :lol:

Und warum akzeptiert der Debugger das, wenn es trotzdem vorher falsch war?

Egal, hauptsache es funktioniert so, und man kann es im PB-Code zurechtflicken wie es muß.

Verfasst: 18.02.2006 20:28
von ts-soft
Ich meinte dies: "@BoardName.c", damit haste die Adresse zu einem 1 Byite
(ANSI) bzw. 2 Byte(Unicode) bereich gegeben, da passen also die
erforderlichen 25 Zeichen nicht hinein.

Die Header-Datein sind eigentlich immer erforderlich, ob DLL oder Lib ist
egal. Die definierten Konstanten und Strukturen braucht man doch.

Im PureBasic SDK findeste den Header-Converter, der dir einen Teil des
konvertieren abnimmt, aber die erstellte Datei ist zu prüfen.
C-Grundkenntnisse sind wie immer gefragt, so wie in der Win-API auch.

Verfasst: 18.02.2006 20:42
von Falko
das mit dem .c war mir schon klar. Ich hatte es ja auch nur mit
eingeschalteten Debugger getestet. Das in einem Char nicht 25
Buchstaben reinpassen können, stimme ich dir ja auch zu.
Mich hat es eben nur verwundert, warum das wohl im Debugger
automatisch geht. Aber jetzt ist es mir schon klar, was du mir
geschrieben hast.

Übrigens das mit dem Headerconverter werde ich dann gleich mal ausprobieren. Ich hatte mir sonst die constanten etc. immer von Hand herauskopiert und manuell angepasst.


Danke für den Tip :allright: