Seite 2 von 2
Verfasst: 08.10.2006 15:59
von Kaeru Gaman
fuc.. hamma nit...
abgesehen davon, wie man das füllen will, klar kann man mogeln:
Code: Alles auswählen
Structure Extended
Low.l
Mid.l
Hi.w
EndStructure
; Alternativ
;Structure Extended
; Low.q
; Hi.w
;EndStructure
Structure PDLLParams
S.Extended[99]
EndStructure
Define PINPUT.PDLLParams
Define POUTPUT.PDLLParams
...magste fürn anfang nich was einfacheres proggen...

Verfasst: 08.10.2006 16:04
von mknjc
Nee eigentlich nicht.
Aber kannst du mir sagen wie ich das dann verwende?
Ich hab jetzt
Code: Alles auswählen
Structure Extended
Low.l
Mid.l
Hi.w
EndStructure
Structure PDLLParams
s.Extended[99]
EndStructure
Define PINPUT.PDLLParams
Define POUTPUT.PDLLParams
ProcedureDLL Calculate(PINPUT.PDLLParams,POUTPUT.PDLLParams)
POUTPUT\s = POUTPUT\s[0]
EndProcedure
Doch da spuckt mir der Compiler ein Syntax Error aus.
Mfg mknjc
Verfasst: 08.10.2006 16:15
von Kaeru Gaman
gleitkomma auch noch? so ein mist..
dann kannste vergessen, die mit einfachen mitteln zu emulieren.
(gleitkomma = float, PB hat 32bit = float und 64bit = double)
schön, dass Delphi so nen Typ hat,
möglicherweise entspricht das der Größe mit der die FPU einer 64bit CPU rechnet,
aber in PB ist das mit halbwegs vertretbarem aufwand unmöglich zu emulieren.
du musst ja die I/O deiner Funktion auch verarbeiten können,
und dafür bräuchtest du procedures, die 80bit-gleitkomma-arythmetic beherrschen...
[edit]
klar, bei POUTPUT\s = POUTPUT\s[0] ist der syntax error..
was willst du denn eigentlich machen? wozu brauchst du das?
Verfasst: 08.10.2006 16:19
von #NULL
zwei Pointer auf Arrays gibt und ich aus dem einen lesen muss und ins andere schreiben muss
was ungefähr mußt du denn machen?
Verfasst: 08.10.2006 16:21
von Kaeru Gaman
ich meine, die kernfrage ist, ob es diese DLL sein muss...
das schreiben/lesen auf den Extended-Typ ist in PB praktisch unmöglich.*
damit meine ich, mit vertretbarem aufwand.
wie gesagt, wenn jemand eine 80bit-float-Lib hat/proggen will,
ist auch das lösbar, aber ob es praktisch und performant ist,
ist eine weitere frage...
Verfasst: 08.10.2006 16:35
von mknjc
Erstmal möchte ich schaffen dass wenn an einem Pin des Bauteils Spannung anlege der dauzugeschaltete Pin am Ausgang die selbe Spannung besitzt.
Später soll es dann m eine Speichereinheit erweitert werden so das ein CMOS IC 4094 herraus kommt (Besonderes Schiebergister).
Da das IC mit Digitalpegeln arbeitet könnte ich doch einfach nur überprüfen ob 0 oder ein ander Bitwert in der Variable ist?
Ich habe mal den kompletten Teil der Anleitung hochgeladen und werde den Quellcode auch aktuell auf dem Server haben.
http://markuskn.homeip.net/Schieberegister/
In der Hilfe findet sich auch ein Dephi Beispiel Quelltext
[Ironie]
Wenn mir jemand dabei hilft das Programm auf PureBasic zu bauen hätte ich damit schonmal keine Probleme.
[/Ironie]
Mfg mknjc
Verfasst: 08.10.2006 20:17
von Kaeru Gaman

nett, dass du ironie-tags gesetzt hast...
also, mein tip fürs erste:
da
a) der datenaustausch mit einer DLL per Extended-Type "unrealistisch" ist
und
b) dein schieberegister bestimmt auch mit anderen Datentypen als 80bit-float klarkommt,
poste das ganze mal neu formuliert im Bereich "Hardware",
da findest du am ehesten Kollegen, die bock auf sowas haben.
ernsthaft,
das ansprechen externer hardware ist für ein paar Kollegen ein echtes Steckenpferd,
und eigentlich sollte es machbar sein in PB mit datentypen, die PB auch verwalten kann.
Verfasst: 08.10.2006 22:40
von remi_meier
Hab mal wieder nicht alles durchgelesen, aber wer Prozeduren zum
Konvertieren von 80bit Floats und Doubles möchte:
Code: Alles auswählen
Procedure DoubleToExtended(d.d, *out)
!FLD qword[p.v_d]
!MOV Eax, [p.p_out]
!FSTP tword[Eax]
ProcedureReturn
EndProcedure
Procedure ExtendedToDouble(*in, *out.Double)
!MOV Eax, [p.p_in]
!FLD tword[Eax]
!MOV Eax, [p.p_out]
!FSTP qword[Eax]
EndProcedure
d.d = 213.1564
f.d = 0
*mem = AllocateMemory(10)
DoubleToExtended(d, *mem)
ExtendedToDouble(*mem, @f)
Debug f
Wenns nicht hilft, Pech
