en als je "Option Strict Off" en "Option Explicit On" wil gebruiken moet je dat boven "module IO"
Option Strict Off
Option Explicit On
Module io
Public Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
Public Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)
Public Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long)
Public Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte
Public Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer
Public Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long
Public Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte)
Public Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal Bit As Byte) As Boolean
Public Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean
Public Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean
End Module
Op 20 mei 2010 22:21:35 schreef T-baev:
Daar staat hij nu en nog steeds krijg ik die foutmelding.
Wat is de rest van je code? Misschien ligt het daar aan.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub BTNdata0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNdata0.Click
Call PortOut(&H378, 1)
End SubPrivate Sub btndata1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndata1.Click
Call PortOut(&H378, 0)
End SubPrivate Sub lblWaardeLPT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblWaardeLPT.Click
lblWaardeLPT.Text = PortIn(&H378)
End Sub
End Class
Met de map met prokectbestanden bedoel je toch de map waarim het programma is opgeslaan he?
Je kan ook eens proberen om de dll aan je project toe te voegen, dit doe je door in je "solution exporer" rechtsklik op je project naam en dan add, exisiting item.
En als je nou via een private sub werkt?
Heb je al, ik moet beter opletten
(eerst als edit, toch maar even als nieuwe post)
[Bericht gewijzigd door leime op (43%)]
Op 20 mei 2010 22:27:11 schreef T-baev:
[...]Met de map met prokectbestanden bedoel je toch de map waarim het programma is opgeslaan he?
De dll zou moeten staan bij E:\Documents\Visual Studio 2010\Projects\PROJECTNAAM\PROJECTNAAM\bin\Debug\HIER DLL
de dll toegevoegd via existing item, hetzelfde verhaal.
In de map visual studio 2010 zit geen map met de naam projects.
EDIT: Ik heb de map projects gevonden en deze is leeg.
[Bericht gewijzigd door T-baev op (19%)]
En als je die Private sub nou in de module zet? en dan met call werkt.
Ik heb nog ergens werkende modules op de computer, mocht je die willen kan ik ze morgen eens opzoekken, het is me nu te laat
Pff, wat posten jullie snel
Oke, ik heb nu een andere IO.dll gesownload en in bin/debug gezet en nu werkt het. Het was gewoon een slechte dll.
Progger
GMT+1
ohw, grappig
normaal zet je de DLL in windows/System32. als die daar niet in staat zal hij zoeken in de map waar het exe bestand ook in staat (of andersom). meestal is dit je projectmap/bin
Progger
GMT+1
dan is deze wellicht niet geregistreerd. iets met start->uitvoeren->RegSvr32 C:\Windows\System32\iodll.DLL
Ik heb 16 "buttons", alles werkt tot nu toe, alleen kan er maar 1 knop tegelijk ingedrukt zijn. Nu moeten er natuurlijk meerdere uitgangen tegelijk hoog gemaakt worden, hoe kan ik dit doen?
Progger
GMT+1
heb je 16x dit?
Private Sub BTNdata0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNdata0.Click
Call PortOut(&H378, 1)
End Sub?
kun je dan niet beter zeggen, je maakt 1 functie die de waarde bijhoud, en die laat je aanroepen door iedere knop. dan doet hij een XOR met je waarde (bijv. knop 3 is 4, 4=8, 5=16) en dat schrijf je naar de poort. kan je opslaan in een globale variabele of gewoon form1.tag 
nog netter is het als je met een control array werkt.
Sorry, maar dit is latijn voor mij, ik heb nog niet 16 keer dat, want ik heb alleen nog maar de layout en de code voor 2 knoppen. Maar ik was idd van plan om dat 16 keer te doen ja.
Progger
GMT+1
ben een beetje verwend, want in delphi is dat heel simpel.
maar je moet eens kijken wat een XOR doet, de eXclusive OR.
a|b|result
-+-+------
0|0|0
1|0|1
0|1|1
1|1|0
-+-+------moet in visual basic ook kunnen.
als je dus een 7 hebt (A=00000111) en daarop een 2 XOR'd (B=00000010) is het resultaat 5 (00000101) (op iedere bit word de XOR bewerking gedaan)
dus als jij bij iedere knop een waarde meegeeft (1,2,4,8,enz.) kan je dus met de huidige waarde + een XOR de juiste bit omzetten (iedere bit is tenslotte 1 poort)
alleen kun je er maar 8 doen, omdat dat de grote van de poort is (excl controle signalen)
Oke, ik snap wat je bedoelt, maar mijn probeel is vooral dat ik totaal niet weet hoe ik dit in VB kan doen, ik heb geen ervaring met programmeren (wel scripten, maarja).
Progger
GMT+1
dan zou ik ook lekker met een 'echte' taal beginnen ipv basic. ben daar 13 jaar geleden in begonnen (erg he, zo oud ben ik nog niet eens
), en je leert er nare gewoontes van. variabelen halverwege je programma declareren enzo. een string als integer behandelen en daarna vrolijk weer als string gebruiken.
met die nieuwste VB's is het wat beter, maar omdat ik geen .net fan ben ben ik er niet zo in meegegaan. geef mij maar delphi.
maar goed, zoek eens of VB.net ook een XOR functie heeft. kan het hier even niet controleren, ben niet thuis.
dan sla je de waarde van de poort op in form1.tag.
vervolgens zeg je bij button 1:
form1.tag = form1.tag XOR 1
call portout(&h378,form1.tag)
en bij button 2:
form1.tag = form1.tag XOR 2
call portout(&h378,form1.tag)
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
@progger. Echte taal .. iets zoals ADA en Fortran en stoten we meteen door naar PL/1 ? Je gaat je wel een big-iron machine zoals een Cray of IBM moeten kopen dan..
taal maakt niks uit. pak hetgeen je het meeste ligt. in visual studio is er gene onderscheid meer tussen CB C C# ironpython en weetikvele wat. Alles wordt naar CLR gemapt en door de JIT gesnokt.
Delphi .. nu brolland failliet is is die toekomst heeeel onzeker.
enfin we wijken af.
wat is dat geknoei met tags ? als je het over de kunde van programmeren hebt ... that's NOT how to do it.
hang een tag vast aan elk van je knoppen. de eerste knop krijgt 1 , de tweede 2 de derde 3 enzovoort
dan assigneer je de clickhandler aan elk van deze knoppen met een assign
sub clickhandler(sender as object) handles button1.click , button2.click , button3.click ...
static x as integer
dim mask as integer
mask = 1 << sender.tag
if (x and mask) then
x = x and not(mask)
else
x = x or mask
end if
' en hier vlam je hat naar de poort
end sub
Progger
GMT+1
free, je hebt baas boven baas.
eigenlijk zou je zoiets met een globale variabele moeten doen ja.
vanwege de gelimiteerde kennis van TS stelde ik voor om een form1.tag als globale variabele te misbruiken. daarom heb ik ook niet voorgesteld om alles in een functie af te handelen, ook al is dat natuurlijk beter.
vroeger (vb6) deed je dat trouwens met een control-array-index. tegenwoordig zal dat waarschijnlijk met een tag moeten ja. ik weet niet of het uitmaakt of je een tag gebruikt om een mask te maken dmv van bitshift of gelijk het getal als mask gebruikt.
[offtopic]
ik verdien inderdaad mijn (bescheiden) brood met delphi 7.0
had jij nou nog een vacature open?:P
[/offtopic]
@progger: als ik form1.tag vervang door Me.tag dan krijg ik geen foutmeldingen.
@free: jouw code geeft foutmeldingen bij de x'en. Maar dat is waarschijnlijk omdat ik niet weet hoe ik een tag vast hang aan een knop.
Bijna al m'n problemen zijn opgelost, nu heb ik alleen dit nog:
Om de eerste datalijn van de poort hoog te maken gebruikt ik volgende code:
Call PortOut(&H378, 1)Voor de tweede dan hetzelfde, maar die 1 vervangen door 2, daarna, 4,8,16 enzoverder.
Om nu die lijnen weer laag te maken gebruik ik 0, maar dit klopt niet, want 0 maakt alle lijnen laag. Hoe maak ik dus 1 lijn laag? Door nog eens hetzelfde (1,2,4,8,16..) te sturen?
Ik heb ook ergens gelezen dat als ik 1 lijn hoog maak, dat ik dan een OR functie moet gebruiken om er nog een hoog te maken. Hoe doe ik dit?
En dan nog het volgende: Als ik mijn project in VB2008 run dan kan ik maar 1 button tegelijk indrukken, als ik dus bijv. data0 hoog maak, en ik wil op data7 drukken dan valt button1 (data0) weer automatisch af.
misschien heb je hier wat aan, dit is mijn eigen proggamatje
het is gescheven in een oudere VB
Public Class Form1
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)
Dim bit1 As Short = 0
Dim bit2 As Short = 0
Dim bit3 As Short = 0
Dim bit4 As Short = 0
Dim bit5 As Short = 0
Dim bit6 As Short = 0
Dim bit7 As Short = 0
Dim bit8 As Short = 0
Dim bitout As Short = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If bit1 = 1 Then bit1 = 0 Else bit1 = 1
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If bit2 = 2 Then bit2 = 0 Else bit2 = 2
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If bit3 = 4 Then bit3 = 0 Else bit3 = 4
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If bit4 = 8 Then bit4 = 0 Else bit4 = 8
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If bit5 = 16 Then bit5 = 0 Else bit5 = 16
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
If bit6 = 32 Then bit6 = 0 Else bit6 = 32
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
If bit7 = 64 Then bit7 = 0 Else bit7 = 64
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
If bit8 = 128 Then bit8 = 0 Else bit8 = 128
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
bitout = bit1 + bit2 + bit3 + bit4 + bit5 + bit6 + bit7 + bit8
TextBox1.Text = Inp(&H378)
Out(&H378, bitout)
End Sub
End Class