Array Pointer
Array Pointer
Hallo,
Ich möchte für ein Programm eine DLL schreiben.
Das Problem ist das das Programm mir zwei Pointer auf Arrays gibt und ich aus dem einen lesen muss und ins andere schreiben muss.
Aber ich hab keine Ahnung von Arrays.
Würd mich auf Hilfe freuen.
Mfg mknjc
Ich möchte für ein Programm eine DLL schreiben.
Das Problem ist das das Programm mir zwei Pointer auf Arrays gibt und ich aus dem einen lesen muss und ins andere schreiben muss.
Aber ich hab keine Ahnung von Arrays.
Würd mich auf Hilfe freuen.
Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.
Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
afaik übergibt ein arrayname mit klammern ohne indices den pointer auf den array-beginn:
...oder braucht das noch * odern @?
bitte mit faulen lebensmitteln werfen, falls ich hier grad mist erzähle....
Code: Alles auswählen
MyProc( a(), b() )
bitte mit faulen lebensmitteln werfen, falls ich hier grad mist erzähle....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich hab hier Tomaten und Eier , was magste lieber ? 
Das waere eine Liste, fuer ein Array fehlt noch die Dimensionsanzahl.
also eher so :

Das waere eine Liste, fuer ein Array fehlt noch die Dimensionsanzahl.
also eher so :
Code: Alles auswählen
dim Array(10)
dim Array2(10,10)
Procedure Test(Array(1),Array2(2))
endprocedure
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@edel
hm....
die Dimensionsanzahl?
und wie unterscheidet PB dann, ob ich den Pointer aufs Array oder das x-te element übergeben will?
[edit]
argl
ok, wenn ichn element übergeben will, hab ich in der proc-kopfzeile ein
...also muss ich das nich kennzeichnen?
hm....
die Dimensionsanzahl?
und wie unterscheidet PB dann, ob ich den Pointer aufs Array oder das x-te element übergeben will?
[edit]
argl
ok, wenn ichn element übergeben will, hab ich in der proc-kopfzeile ein
Code: Alles auswählen
Procedure Test( Bla1.l, Bla2.l)
Zuletzt geändert von Kaeru Gaman am 08.10.2006 15:42, insgesamt 2-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Wenn ich das wüsste aber in der Anleitung des Progs finden sich sachen von den ich noch nie gehört habe.
Dann bekommich aber eine Zugriffsverletzung bei Adresse 0441114C in Modul 'qq.dll'. Lesen von Adresse 0000000B
qq.dll ist meine DLL.
[edit]
Es geht hier um das Programm Profilab3 das wir hier verwenden um komplexe Schaltungen aufzubauen. Das Problem ist das da das IC 4094 nich eingebaut ist was ich sozusagen nachrüsten möchte
[/edit]
Mfg mknjc
Ich hab es mal hiermit versucht:Alle drei Pointer PINPUT und POUTPUT zeigen jeweils auf einen Speicherbereich in dem 100 Variablen vom Typ EXTENDED in einem Array abgelegt sind. Die Pointer sind vom Typ PDLLParams, dessen Deklaration in Delphi so aussieht:
type TDLLParams = array[0..100] of extended;
PDLLParams = ^TDLLParams;
Die Extended-Variablen des Pointers PINPUT enthalten die Eingangszustände des Bauteils. Auf den Wert eines Eingangs des Bauteils können Sie wie folgt zugreifen:
PInput^[0] enthält den numerischen Eingangswert des 1. Eingangs,
PInput^[1] enthält den numerischen Eingangswert des 2. Eingangs, usw.
Die Extended-Variablen des Pointers POUTPUT nehmen die Ausgangszustände des Bauteils auf. Um den Wert der Ausgänge des Bauteils zu setzen, benutzen Sie:
POutput^[0] nimmt den numerischen Ausgangswert des 1. Ausgangs auf,
POutput^[1] nimmt den numerischen Ausgangswert des 2. Ausgangs, usw.
Code: Alles auswählen
Structure myStringi
s.l[0]
EndStructure
Structure myStringo
s.l[0]
EndStructure
ProcedureDLL Calculate(*PInput.myStringi,*POutput.myStringo)
Protected I.l
I = *PInput\s[0]
*POutput\s[0] = I
EndProcedure
qq.dll ist meine DLL.
[edit]
Es geht hier um das Programm Profilab3 das wir hier verwenden um komplexe Schaltungen aufzubauen. Das Problem ist das da das IC 4094 nich eingebaut ist was ich sozusagen nachrüsten möchte
[/edit]
Mfg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.
Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
vielleicht ist der Typ "extended" größer als Long?
auf jeden Fall benötigst du die richtige anzahl dimensionen.
schau mal in deiner Delphi-Help, wieviel Byte der typ "Extended" hat,
dann musst du dein array auf die selbe größe basieren.
Wenn Extended = 64bit Dann DeinTyp = Quad.
PS:
unsicher, ob das Ansprechen korrekt ist, aber die Deklaration von Struct und Var müsste stimmen...
PPS:
Call:
auf jeden Fall benötigst du die richtige anzahl dimensionen.
schau mal in deiner Delphi-Help, wieviel Byte der typ "Extended" hat,
dann musst du dein array auf die selbe größe basieren.
Wenn Extended = 64bit Dann DeinTyp = Quad.
Code: Alles auswählen
Structure PDLLParams
S.q [99]
EndStructure
Define PINPUT.PDLLParams
Define POUTPUT.PDLLParams
PINPUT\S[2] = 1
unsicher, ob das Ansprechen korrekt ist, aber die Deklaration von Struct und Var müsste stimmen...
PPS:
Call:
Code: Alles auswählen
ProcCall(@PINPUT,@POUTPUT)
Zuletzt geändert von Kaeru Gaman am 08.10.2006 15:58, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.