Wie manipuliert man ein Array in einer DLL"

Für allgemeine Fragen zur Programmierung mit PureBasic.
ingo
Beiträge: 11
Registriert: 19.03.2005 15:23

Wie manipuliert man ein Array in einer DLL"

Beitrag von ingo »

Hallo an alle,
Ich habe folgendes Problem:
Ich möchte ein Array von 15 Werten an eine Prozedur übergeben, die sich in einer DLL befindet. Dazu sieht mein Programm so aus:

Code: Alles auswählen

DIM werte.w(15)
TypeDef.l Ergebnis
..
Ergebnis = OpenLibrary(0, "Test.dll")
CallFunction(0,"MyProzedur",@werte(0))
...
...


meine DLL sieht so aus

Code: Alles auswählen

ProcedureDLL MyProzedur(*zeiger.i)
 ...
...
EndProcedure
Nun möchte ich Werte im Array manipulieren.

Code: Alles auswählen

*zeiger(1) = 33 ....
führt aber zu einer Fehlermeldung. Mit PokeW(*zeiger, 33) klappt das. Auch wenn man den Zeiger entsprechend aufaddiert, komme ich an die anderen Felder ran.
Ich frage mich was ich falsch mache, ich möchte die Werte eigentlich nicht "poken", da ich mir nicht sicher bin, ob das auch dann noch klappt wenn man die DLL Funktionen aus einer anderen Programiersprache heraus nutzen will.
Hat da jemand vieleicht schon Erfahrungen oder einen Tip

GRUSS
INGO
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!
Friedhelm
Beiträge: 43
Registriert: 29.08.2004 08:50

Beitrag von Friedhelm »

Code: Alles auswählen

Struktur stellen für den Zugriff in der Dll

Structure DLL_werte
  werte.w[15]   ;der Wert 15. kann zwischen 0 und 15 liegen und 
                      ;kann genauso zugegriffen werden wie im DIM  Befehl
EndStructure 

;da ein Pointer (Pointer Variable *Zeiger) die Struktur DLL_Werte zuweisen. 

*zeiger.DLL_werte

;in den Speicher schreiben geht so

*zeiger\werte[0-15]= 33

;vom speichern lesen

Wert.w = *zeiger\werte[0-15]


mfg Friedhelm
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Code: Alles auswählen

Struktur stellen für den Zugriff in der Dll

Structure DLL_werte
  werte.w[16]   ;der Wert 15. kann zwischen 0 und 15 liegen und 
                      ;kann genauso zugegriffen werden wie im DIM  Befehl
EndStructure 

Ergebnis = OpenLibrary(0, "Test.dll")

;da ein Pointer (Pointer Variable *Zeiger) die Struktur DLL_Werte zuweisen und die Prozedur aufrufen. 

CallFunction(0, "MyProzedur", *zeiger.DLL_werte)

;in den Speicher schreiben geht so

*zeiger\werte[0-15]= 33

;vom speichern lesen

Debug *zeiger\werte[0-15]
Bei Strukturen wird die Anzahl angegeben, wie viel Elemente es am ende geben soll, im gegen satz zu DIM :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
ingo
Beiträge: 11
Registriert: 19.03.2005 15:23

Beitrag von ingo »

Danke an Friedhelm und PMV, werde es gleich morgen so ausprobieren!!!
Jetzt muss ich zum Matrazenhorchdienst - morgen früh um 5:00 scheppert der Wecker!

Danke noch mal und Gute Nacht melde mich morgen!!

GRUSS
INGO
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!
ingo
Beiträge: 11
Registriert: 19.03.2005 15:23

Beitrag von ingo »

Hallo,
wolte nur noch mal DANKE sagen!!!! Funzt wunderprächtig!!

Ich habe jetzt auch den Fehler gefunden. In der Hilfe über zeiger steht das sie vom Type Long sind, und so habe ich den Zeiger auch *zeiger.l definiert und nicht *zeiger.strucktur!!

GRUSS
INGO
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!
Antworten