Seite 1 von 1

Wie manipuliert man ein Array in einer DLL"

Verfasst: 28.02.2006 21:32
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

Verfasst: 28.02.2006 22:07
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

Verfasst: 28.02.2006 22:16
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

Verfasst: 28.02.2006 23:05
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

Verfasst: 02.03.2006 21:18
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