Skall skicka en Array till en Function i en DLL.... Det jag kan bidraga med är att Arrayer skall skickas ByReference (man skickar adressen till Array:en) prova: Har forskat lite inder arbetet idag och det kan även ha att göra med att int i C++ är på 2byte och long i VB är på 4 så om jag skickar en det med LONG så tar den i intar ur varje Long. Det ska nog vara Om jag kör: Ändra deklarationen enligt mitt förra inlägg. Då blev det: Du måste använda Long, inte Integer. För att verkligen få en pekare till första elementet i arrayen måste du nog skriva anropet: Ah... Pellesoft nere i 2 dagar när jag har något att skriva.. Hm.. Ler.. En int i C++ är 32 bit (i Windows), alltså skall int genomgende bli Long i VB6. TACKAR SÅ HEMSKT MYCKET.... Jippi.. Det fungerade nästan.... Kul att det rör på sig. ShowMLHandle(0).Caption = Lumax_OpenDevice(0, 0) Jag tycker du skall börja med att anropa Japp... Hmm.. Fick Mail idag från han som gjort programmet som säljs... Glömde ju skicka hans kod... Public Declare Function Lumax_OpenDevice Lib "Lumax.dll" (ByVal PhysicalDevice As Long, ByVal Channel As Long) As Long Shit, tabbe av mig. Jag fundera på om det kan ha varit att jag har Defenitionen av Functionen i en Modul och då skall man la kanske ha Funtionen som Public? Tänkte på det nu när jag var på väg till jobbet... Om deklarationen ligger i en modul är den default public, så det är nog inget problem. Ok... Hur får du bilden?? Som CADfil eller skriver du in X,Y kordinater?? ITS ALIVE!!!Skicka en Variabel till en DLL.....
Def enligt nedan...
int __stdcall Lumax_SendFrame(int Handle, TLumax_Point *Points, int NumOfPoints, int ScanSpeed, int UpdateMode, int *TimeToWait)
Sendet einen Laserframe mit der angegebenen Anzahl Punkten an die Ausgabekarte.
Handle-Handle zur eindeutigen Identifizierung des Geräts
Points-Zeiger auf einen Speicherbereich, in dem nacheinander alle Punkte des Frames hinterlegt sind. Die einzelnen Punkte haben den Datentyp TLumax_Point (siehe unten).
NumOfPoints-Gibt die Anzahl der Punkte des Frames an.
ScanSpeed-Gibt die Ausgabegeschwindigkeit (PPS, points per second) an. Gültig sind Werte zwischen 250 und 70000 PPS. Diese Ausgabegeschwindigkeit kommt erst zur Anwendung, wenn die Ausgabe dieses Frames startet. Die Geschwindigkeit eines möglicherweise aktuell noch laufenden Frames wird nicht geändert.
UpdateMode-Immer auf 0 setzen.
TimeToWait-Immer auf 0 setzen.
Jaja.. tyska jag vet....
Och i C++... Men jag skriver i VB och får inte i ordning på det...
Type TLumax_Point
Ch1 As Integer
Ch2 As Integer
Ch3 As Integer
Ch4 As Integer
Ch5 As Integer
Ch6 As Integer
Ch7 As Integer
Ch8 As Integer
TTL As Integer
End Type
Declare Function Lumax_SendFrame Lib "lumax.dll" (Handle As Integer, ByRef SendPoint As TLumax_Point, NoPoints As Long, ScanSpeed As Long, UpdateMode As Long, TimeToWait As Long) As Long
Funktionen som skall anropa:
Public Sub LaserSkickaFrame()
Dim SendPoint() As TLumax_Point
For Rkn = 0 To 3
If (MLHandle(Rkn) >= 0) Then
ReDim Preserve SendPoint(0 To UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point))
For Rkn2 = 0 To UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point)
SendPoint(Rkn2).Ch1 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).X
SendPoint(Rkn2).Ch2 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).Y
SendPoint(Rkn2).Ch3 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).R
SendPoint(Rkn2).Ch4 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).G
SendPoint(Rkn2).Ch5 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).B
SendPoint(Rkn2).Ch6 = 0
SendPoint(Rkn2).Ch7 = 0
SendPoint(Rkn2).Ch8 = 0
SendPoint(Rkn2).TTL = 0
Next Rkn2
Tmp = Lumax_SendFrame(MLHandle(Rkn), SendPoint, UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point) + 1, ProgramForm.MaxScannerPPS(Rkn), 0, 0)
End If
Next Rkn
End Sub
När jag anropar Lumax_SendFrame får jag
ByRef argument type Mismatch
på SendPoint
Vad har jag defenierat fel? För vad jag fattat rätt så vill TLumax_SendFrame bara ha "pekaren" till SendPoint....Sv: Skicka en Variabel till en DLL.....
DVS du skall inte skriva ByVal när du skickar Arrayer.
Sedan är det något med NullTerminated dvs avsluta med Null vbNull
Någon därute som kan fylla i mitt luddiga svar ?Sv:Skicka en Variabel till en DLL.....
Lumax_SendFrame(MLHandle(Rkn), SendPoint(1), UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point) + 1, ProgramForm.MaxScannerPPS(Rkn), 0, 0)Sv: Skicka en Variabel till en DLL.....
Hittade hur man räknade om en Signed LONG 4 byte till unsigned Int 2 byte...
Skall prova och medela här...Sv: Skicka en Variabel till en DLL.....
Declare Function Lumax_SendFrame Lib "lumax.dll" (byval Handle As Long, ByRef SendPoint As TLumax_Point, byval NoPoints As Long, byval ScanSpeed As Long, byval UpdateMode As Long, byref TimeToWait As Long) As Long
Alla * i definitionen ska vara ByRef, alla övriga parametrar ByVal. ByRef är default, så ByVal måste skrivas ut.
Om TLumax_Point innehåller integers i DLL:en måste du ha Long i VB.Sv:Skicka en Variabel till en DLL.....
Tmp = Lumax_SendFrame(MLHandle(Rkn), SendPoint, UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point) + 1, ProgramForm.MaxScannerPPS(Rkn), 0, 0)
Så får jag fel på SendPoint:
User-defined type may not be passed ByVal
Med följande def:
Declare Function Lumax_SendFrame Lib "lumax.dll" (Handle As Integer, ByVal SendPoint As TLumax_Point, NoPoints As Integer, ScanSpeed As Integer, UpdateMode As Integer, TimeToWait As Integer) As IntegerSv: Skicka en Variabel till en DLL.....
Den sista parametern ska ta emot värdet, måste alltså vara en variabel.
Gör även så här för säkerhets skull:
Dim tmp1 as Long
Dim tmp2 as Long
Dim tmp3 as Long
Dim tmp4 as Long
tmp1=MLHandle(Rkn)
tmp2=UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point) + 1
tmp3=ProgramForm.MaxScannerPPS(Rkn)
tmp4=0
tmp5=0
Anropet blir
Tmp = Lumax_SendFrame(tmp1, SendPoint, tmp2, tmp3, tmp4, tmp5)Sv:Skicka en Variabel till en DLL.....
Public Sub LaserSkickaFrame()
Dim SendPoint() As TLumax_Point
Dim tmp1 As Integer
Dim tmp2 As Integer
Dim tmp3 As Integer
Dim tmp4 As Integer
Dim tmp5 As Integer
For Rkn = 0 To 3
If (MLHandle(Rkn) >= 0) Then
ReDim Preserve SendPoint(0 To UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point))
For Rkn2 = 0 To UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point)
SendPoint(Rkn2).Ch1 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).X
SendPoint(Rkn2).Ch2 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).Y
SendPoint(Rkn2).Ch3 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).R
SendPoint(Rkn2).Ch4 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).G
SendPoint(Rkn2).Ch5 = Pict(FrameNumber.Value).Scanner(Rkn).Point(Rkn2).B
SendPoint(Rkn2).Ch6 = 0
SendPoint(Rkn2).Ch7 = 0
SendPoint(Rkn2).Ch8 = 0
SendPoint(Rkn2).TTL = 0
Next Rkn2
tmp1 = MLHandle(Rkn)
tmp2 = UBound(Pict(FrameNumber.Value).Scanner(Rkn).Point) + 1
tmp3 = ProgramForm.MaxScannerPPS(Rkn)
tmp4 = 0
tmp5 = 0
Tmp = Lumax_SendFrame(tmp1, SendPoint, tmp2, tmp3, tmp4, tmp5)
End If
Next Rkn
End Sub
Def:
Declare Function Lumax_SendFrame Lib "lumax.dll" (ByVal Handle As Integer, ByRef SendPoint As TLumax_Point, ByVal NoPoints As Integer, ByVal ScanSpeed As Integer, ByVal UpdateMode As Integer, ByRef TimeToWait As Integer) As Integer
Och:
Type TLumax_Point
Ch1 As Integer
Ch2 As Integer
Ch3 As Integer
Ch4 As Integer
Ch5 As Integer
Ch6 As Integer
Ch7 As Integer
Ch8 As Integer
TTL As Integer
End Type
Felmedelande:
ByRef argument type mismatch
Ändrade från LONG till Integer för att det skall vara 2Byte....
Sv: Skicka en Variabel till en DLL.....
Vem har gjort DLL:en? Är du säker på att en int där inte är 32 bit?Sv:Skicka en Variabel till en DLL.....
Lumax_SendFrame(tmp1, SendPoint(0).Ch1, tmp2, tmp3, tmp4, tmp5)
men jag misstänker också att det kan bli andra problem om du skapar arrayen dynamiskt.
Jag är inte säker, men har för mig att en array av egendefinerade typer består av referenser (pekare) till de ingående elementen när man skapar den dynamiskt.Sv: Skicka en Variabel till en DLL.....
Hårdwaran jag försöker kominucera med är köpt av ett kille i Tyskland som sålt hårdwaran till ett företag som säljer den...
DLLen finns förklarad på:
lumax.dll
Vore tacksam om någon med lite C++ kunskaper hade tid i 2min och översatta Funktionernaanropen i DLLen så jag får allt rätt från början...
Alltså vad jag skriver i deklarationen av Funktionerna i mitt program...
Även Variabelstruturen som används..
Just nu är Deklarationerna:
Declare Function Lumax_GetPhysicalDevices Lib "lumax.dll" () As Long
Declare Function Lumax_GetDeviceInfo Lib "lumax.dll" (PhysicalDevice As Byte, DeviceInfo As String) As Long
Declare Function Lumax_OpenDevice Lib "lumax.dll" (PhysicalDevice As Byte, Channel As Byte) As Long
Declare Function Lumax_CloseDevice Lib "lumax.dll" (Handle As Integer) As Long
Declare Function Lumax_StopFrame Lib "lumax.dll" (Handle As Integer) As Long
Declare Function Lumax_SendFrame Lib "lumax.dll" (ByVal Handle As Integer, ByRef SendPoint As TLumax_Point, ByVal NoPoints As Integer, ByVal ScanSpeed As Integer, ByVal UpdateMode As Integer, ByRef TimeToWait As Integer) As Integer
Och om det är strul med att den skall ha 2Byte variabler (int = 2 byte) så gör det inget om innehålet blir för för det går att räkna om.. Har redan löst det så -32xxx till +32xxx -> 0 till 65xxx....Sv:Skicka en Variabel till en DLL.....
Så alla returvärden är alltså Long.
Datatypen TLumax_Point består av ett antal unsigned short, alltså 16 bit, dessa blir i VB till Integer.
(Det finns ju tyvärr inga unsigned i VB6).
Deklarationerna:
Declare Function Lumax_GetPhysicalDevices Lib "lumax.dll" () As Long
är OK.
Declare Function Lumax_GetDeviceInfo Lib "lumax.dll" (PhysicalDevice As Byte, DeviceInfo As String) As Long
Denna är ju reserverad för framtida bruk enligt hemsidan och har en void pointer som andra
argument. Går därför inte att deklarera korrekt i VB f.n. men det närmaste blir
Declare Function Lumax_GetDeviceInfo Lib "lumax.dll" (PhysicalDevice As Long, DeviceInfo As Long) As Long
PhysicalDevice är en C++ int, skall alltså vara en long i VB. En void pointer kan peka på vad
som helst, t.ex. en Long.
Declare Function Lumax_OpenDevice Lib "lumax.dll" (PhysicalDevice As Byte, Channel As Byte) As Long
skall vara
Declare Function Lumax_OpenDevice Lib "lumax.dll" (PhysicalDevice As Long, Channel As Long) As Long
(se ovan om int <-> Long) notera även att Channel alltid skall vara 0, och om du skriver 0 direkt i
anropet måste det skrivas som 0& för att skapa en 32 bits 0:a, detta för att undvika stackproblem.
Declare Function Lumax_CloseDevice Lib "lumax.dll" (Handle As Integer) As Long
skall vara
Declare Function Lumax_CloseDevice Lib "lumax.dll" (Handle As Long) As Long
Declare Function Lumax_StopFrame Lib "lumax.dll" (Handle As Integer) As Long
skall vara
Declare Function Lumax_StopFrame Lib "lumax.dll" (Handle As Long) As Long
Declare Function Lumax_SendFrame Lib "lumax.dll" (ByVal Handle As Integer, ByRef SendPoint As
TLumax_Point, ByVal NoPoints As Integer, ByVal ScanSpeed As Integer, ByVal UpdateMode As Integer,
ByRef TimeToWait As Integer) As Integer
skall i konsekvens med ovan vara
Declare Function Lumax_SendFrame Lib "lumax.dll" (ByVal Handle As Long, ByRef SendPoint As
TLumax_Point, ByVal NoPoints As Long, ByVal ScanSpeed As Long, ByVal UpdateMode As Long, ByRef
TimeToWait As Long) As Integer
[Edit]
tänk även här på att UpdateMode skall vara 0 och att i anropet skriva 0& för att skapa en 32-bit 0:a
TimeToWait skall också vara 0 enligt hemsidan fast är deklarerad som en pekare. Det är lite tvetydigt
då de sedan i exemplet skriver 0 och inte Null. Jag skulle skapa en Long variabel och skicka med den i
anropet.
[/Edit]
Type-deklarationen som du skrivit tidigare i tråden är ok.
Men skapa istället en statisk array med tillräcklig storlek för det största du tänkt dig, sedan vet ju dll:en
hur stor del av arraydn den skall använda via NoPoint argumentet. Dynamiska arrayer ser inte alltid ut
som man tänkt sig när de väl skapas i minnet utan består ofta av en array av pekare istället för
element.
Ett annat problem du ev kan få här är att TLumax_Point består av 9 st 16 bitars värden, vilket blir 18
byte. Detta går inte jämt ut med VB6 4-bytes alignment, det finns en risk här att VB lägger till två byte
mellan varje element i arrayen för att nästa element skall starta på jämn 4-byte address. I VB6 går
inte detta att styra tyvärr (går däremot i VB.NET). Om det blir så även här är jag inte helt säker på, det
blir det i alla fall när man har olika typer inom den egendefinerade typen.
Och sen som jag nämnde ovan, för att få adressen till första elementet i arrayen måste du skriva den
första primitiva variabeln som förekommer i arrayen, dvs SendPoint(0).Ch1, inte bara arraynamnet.
VB6 fungerar inte på det viset vid anrop av dll:er.Sv: Skicka en Variabel till en DLL.....
Har inte hunnit prova än men det är skönt när något hjälper till....
Svarar om en liten stund när jag provat...Sv: Skicka en Variabel till en DLL.....
De flesta deklarationerna godtar den men den får inget Hårdvaru Handle tillbaka från Lumax_OpenDevice().....
Kan det vara något speciellt som den returnerar konstigt???
För när jag startat programmet och startar ett annat program så säger det programmet att mitt program använder DLL filen..
Det andra programmet är för att övervaka så att inte mitt program hänger sig och laserstrålen blir statisk --> Då de flesta showlasrarna är starka och bränner när de inte ritar.....
Så det verkar som mitt program öppnat hårdwaran men inte får Handlen....Sv:Skicka en Variabel till en DLL.....
Kan du visa hur du gör anropet till OpenDevice ?Sv: Skicka en Variabel till en DLL.....
ShowMLHandle(1).Caption = Lumax_OpenDevice(1, 0)
ShowMLHandle(2).Caption = Lumax_OpenDevice(2, 0)
ShowMLHandle(3).Caption = Lumax_OpenDevice(3, 0)
Declare Function Lumax_OpenDevice Lib "lumax.dll" (PhysicalDevice As Long, Channel As Long) As Long
Som du ser så försöker jag öppna de 4 första Platserna bara för att se om det är någon som svarar...
Det står i Infon att det bara kan vara 1-3......
Just nu känns det som det är något fel med Returen från OpenDevice...
Om den returnerar en pekare skall den då Skrivas som LONG? Skall det inte vara LONG& eller något liknande??Sv:Skicka en Variabel till en DLL.....
Dim lNoOfDevices as Long
lNoOfDevices = Lumax_GetPhysicalDevices()
om lNoOfDevices = 0 hittar den inte hårdvaran, du borde få 1 (eller så många devices som du har)
som svar här. Får du 0 är inte hårdvaran rätt installerad eller så saknas en drivrutin eller nåt.
Vid Open sedan, som jag skrev ovan, skall andra parametern vara en Long fast 0 alltså skall
du skriva 0& anropa alltså med
ShowMLHandle(1).Caption = Lumax_OpenDevice(1, 0&)
ShowMLHandle(0).Caption borde nu ge ett tal <> 0, dvs ett 32 bitars heltal, det är det som ett
handle är. Det är ingen pekare (inte direkt i alla fall) utan en identifierare.
Får du 0 kunde inte devicen öppnas och det är trots allt något installationsstrul.
Jag förmodar att hårdvaran levererades med en driver, eftersom en dll i usermode inte kan
accessa hårdvaran direkt. Är den drivern installerad OK? Finns det något annat program som
fungerar med hårdvaran på denna PC:n, t.ex. från tillverkaren?Sv: Skicka en Variabel till en DLL.....
I programmet Original så har jag en Devices som är en long..
Devices=Lumax_GetPhysicalDevices
For Rkn=1 to Devices
ShowMLHandle(Rkn).Caption = Lumax_OpenDevice(Rkn, 0)
Next Rkn
Och Ja... Den hittar 1 enhet...
Men Lumax_OpenDevice(1,0) returnerar 0....
Men skall Prova 0& när jag kommer hem från jobbet...
På hemsidan finns en programvara för att testa kortet och det fungerar perfekt..
Även Demoprogrammet för ett laserprogram fungerar perfekt..
Testprogrammet fungerar även som ett SAFE program så man kan starta sitt program och sedan Testprogrammet så övervakar det ens program.
När jag startat mitt program och sedan TestProgrammet så säger det att mitt program är anslutet till DLLen...
I testprogramskatalogen ligger även en mld.dll fil men skulle den saknas så borde la programmet klaga när man försöker starta det??? Eller?Sv:Skicka en Variabel till en DLL.....
Verkar skumt, 0& är nog inte problemet.
Exemplet använder ju vanlig 0.
mld.dll:
Den borde klaga men det skall man inte ge sig f-n på.
Har du Lumax-dll:en i samma katalog som din exe?
Prova i så fall att lägga dit mld.dll oxo. Vet inte vad den är till för, verkar vara nåt med grafik.
Kan du maila hela den berörda koden ?Sv: Skicka en Variabel till en DLL.....
Han skriver i VB....
Har inte hunnit kolla igenom vad han skrivit exakt än man skall göra det så fort som möjligt..
Kan maila dig min kod...
Såg att du bor i Jönköping...
Vill du prova kod och kortet så kan ajg ta med det ner.. Är i Jönköping varje helg i Jan.......Sv:Skicka en Variabel till en DLL.....
Lumax_API_Version = Lumax_GetApiVersion
Delay (100)
If Lumax_API_Version < 206 Then MsgBox Message(Language, 593) & Lumax_API_Version ' the message is: Please use dll version 206 or higher.
KartenAnzahl = Lumax_GetPhysicalDevices
Delay (100)
DoEvents
For i = 1 To KartenAnzahl
Delay (100)
LumaxHandleTemp = Lumax_OpenDevice(i, 0) ko = 4
LumaxHandle(i) = LumaxHandleTemp
For j = 0 To formOptionen.lstHardware.count - 1
formOptionen.lstHardware(j).AddItem "Lumax" & i
Next
formOptionen.comboDMXPort(0).AddItem "Lumax DMX" & i
formOptionen.comboDMXPort(1).AddItem "Lumax DMX" & i
Next
*****************************************************************************************************
This are my declarations: ( you will see, i split the 2 Byte values (unsigned int) into 2 separate Highbyte and Lowbyte.)
*************************************************************************************
'Aufbau der Punktinformation:
'Es handelt sich um lauter 16-Bit-Werte
'Ch1=X, byval Ch2=Y (byval 0=links/unten, byval 32768=mitte, byval 65535=rechts/oben)
'Ch3=rot, byval Ch4=gruen, byval Ch5=blau (byval 0=aus, byval 65535=volle Helligkeit)
'Ch6, byval Ch7, byval Ch8 ungenutzt
'TTL im Low-Byte stehen die 8 TTL-Ausgaunge
Type tLumaxInBuffer
byte1 As Byte
byte2 As Byte
byte3 As Byte
byte4 As Byte
End Type
Public LumaxInBuffer As tLumaxInBuffer
Type tLumaxOutBuffer
byte1 As Byte
byte2 As Byte
byte3 As Byte
byte4 As Byte
End Type
Public LumaxOutBuffer As tLumaxOutBuffer
Type tLumax_Punkt
X0 As Byte
X1 As Byte
Y0 As Byte
Y1 As Byte
R0 As Byte
R1 As Byte
G0 As Byte
G1 As Byte
B0 As Byte
B1 As Byte
ch6l As Byte
ch6h As Byte
ch7l As Byte
ch7h As Byte
ch8l As Byte
ch8h As Byte
TTLl As Byte
TTLh As Byte
End Type
Public LumaxDatenfeld() As tLumax_Punkt
'**** Dll Aufrufe fuer Lumax dll
Public Declare Function Lumax_GetPhysicalDevices Lib "Lumax.dll" () As Long ' das c-integer entspricht dem vb Long??
'Liefert die Anzahl angeschlossener LumaxKarten
Public Declare Function Lumax_GetDeviceInfo Lib "Lumax.dll" (ByVal PhysicalDevice As Long) As Long
' Liefert ???
Public Declare Function Lumax_OpenDevice Lib "Lumax.dll" (ByVal PhysicalDevice As Long, ByVal Channel As Long) As Long
' oeffnet das angegebene Geraet fuer die weitere Nutzung.
' gibt den Handle des Geraetes zurueck, byval dieser wird fuer CloseDevice benoetigt
Public Declare Function Lumax_CloseDevice Lib "Lumax.dll" (ByVal Handle As Long) As Long
' Schließt das Geraet, byval so dass andere Programme darauf zugreifen koennen.
Public Declare Function Lumax_SendFrame Lib "Lumax.dll" (ByVal Handle As Long, ByRef Points As tLumax_Punkt, ByVal NumOfPoints As Long, ByVal ScanSpeed As Long, ByVal UpdateMode As Long, ByVal TimeToWait As Long) As Long
' Sendet einen Laserframe mit der angegebenen Anzahl Punkten an die Ausgabekarte.
Public Declare Function Lumax_WaitForBuffer Lib "Lumax.dll" (ByVal Handle As Long, ByVal Timeout As Long, ByRef TimeToWait As Long, ByRef BufferChanged As Boolean) As Long
' Wartet auf das Freiwerden des Empfangspuffers bzw. liefert dessen Status zurueck.
Public Declare Function Lumax_StopFrame Lib "Lumax.dll" (ByVal Handle As Long) As Long
' Hault die Laserausgabe an. Alle Farbkanaule werden auf den Wert 0 gesetzt. X- und Y-Achse werden auf die Bildmitte positioniert. Alle TTL-Ausgaunge werden abgeschaltet.
Public Declare Function Lumax_SetDmxMode Lib "Lumax.dll" (ByVal Handle As Long, ByVal NumOfTxChannels As Long, ByVal NumOfRxChannels As Long) As Long
'Aktiviert bzw. deaktiviert den DMX512 Sender bzw. Empfaunger auf der Minilumax-Karte
'NULL als wert, byval bedeutet jeweils die fuktion Senden / Empfangen = Aus...
Public Declare Function Lumax_SendDmx Lib "Lumax.dll" (ByVal Handle As Long, ByRef DmxBuffer As Byte, ByVal Length As Long) As Long
' uebertraugt DMX512-Daten an den Ausgabepuffer der Minilumax-Karte.
' DmxBuffer ist ein Zeiger auf ein Array
Public Declare Function Lumax_ReceiveDmx Lib "Lumax.dll" (ByVal Handle As Long, ByRef DmxBuffer As Byte, ByVal Length As Long) As Long
' empfaungt DMX512-Daten anus den Empfangspuffer der Minilumax-Karte.
' DmxBuffer ist ein Zeiger auf ein Array
' Dongle Functionen
'int version = __stdcall Lumax_GetApiVersion
Public Declare Function Lumax_GetApiVersion Lib "Lumax.dll" () As Integer
'int result = __stdcall Lumax_Dongle_XTEA_Com(int Handle, int Command, unsigned long Vendor_ID, unsigned long *DataOut, unsigned long *DataIn)
Public Declare Function Lumax_Dongle_XTEA_Com Lib "Lumax.dll" (ByVal Handle As Long, ByVal Command As Long, ByVal Vendor_ID As Long, ByRef DataOut As Long, ByRef DataIn As Long) As Long
'Identifizierung:
'int result = __stdcall Lumax_ExchangeDevInfo(int Handle, int Info_ID, unsigned char *InBuffer, int InLength, unsigned char *OutBuffer, int OutLength)
Public Declare Function Lumax_ExchangeDevInfo Lib "Lumax.dll" (ByVal Handle As Long, ByVal Info_ID As Long, ByRef InBuffer As tLumaxInBuffer, ByVal InLength As Long, ByRef OutBuffer As tLumaxOutBuffer, ByVal OutLength As Long) As Long
Public Declare Function Lumax_SetTTL Lib "Lumax.dll" (ByVal Handle As Long, ByVal TTL As Long) As Long
Sv:Skicka en Variabel till en DLL.....
Verkar fungera.... Eller ja.. Den Returnerar 1 och inte 0....
Vad är skillnaden på den och:
Declare Function Lumax_OpenDevice Lib "lumax.dll" (PhysicalDevice As Long, Channel As Long) As Long
MEN VB hänger sig andra gången man kör programmet...
Även om man Kompilerar en EXE fil och kör den utanför VB när VB är igång så hänger sig VB..
Och det blir när jag kör Lumax_GetPhysicalDevices....
Ja just det... Den verkar inte hitta:
Public Declare Function Lumax_SendFrame Lib "Lumax.dll" (ByVal Handle As Long, ByRef Points As tLumax_Punkt, ByVal NumOfPoints As Long, ByVal ScanSpeed As Long, ByVal UpdateMode As Long, ByVal TimeToWait As Long) As Long
Fast när jag tänker efter så har ju han tLumax_Punkt..
Kollar det när jag kommer hem...Sv: Skicka en Variabel till en DLL.....
De flesta parametrar skall vara ByVal men det är inte default i VB6 (är det däremot i VB.NET, jag får skylla på det).
ByVal inne bär alltså att värdet skickas med, ByRef att en pekare till variablen skickas med. Tyvärr är ByRef default i VB6.
Använd hans deklarationer så blir det nog ok.
Sedan är hans lösning av unsigned int som två bytar en intressant variant, bör fungera utmärkt.
Vad är det här för grejor man styr? Vilken typ av laser och vad kan man göra med den?
Jag har faktiskt en applikation i jobbet där det ev kan vara intressant.Sv:Skicka en Variabel till en DLL.....
Det är ShowLasrar man styr med kortet...
Alltså skickar den X o Y positioner Tillsammans med Färgen i R,G,B form...
Så skickar man en hel bild som punkter...
Min ritare klarar 45000punkter i sekunden och om man ritar en bild med tex 100punkter och ritar den med full fart blir det 450ggr/s (Kanske lite överdrivet) och då uppfattar ögat det som en streckbild...
Sedan är det ju bara att ändra bilden så många gånger man vill så blir det allt från punkter till animeringar...
Sök gärna på YouTube på tex LaserShow Beam så får du se vad det blir.. Till saken hör att det aldrig blir bra på film...
Många av lasrarna har bara grönt... Vissa har grön/röd..... Vissa har grön/röd/blå...
Och med hjälp av det så kan du blande de flesta färgerna...
Kör med en totallasereffekt på ~0.5W Vit laser, 250mW röd, 150mW grön och 80mW blå.
Stillastående stråle så bränner jag igenom Svart ElTape med samtliga färger...
Det är riktigt kul att labba med den....
Tanken är att hyra ut den och tekniker på företagsjobb och disco.. Tyvärr finns det inte så mycket pengar i det men det är kul... Sv: Skicka en Variabel till en DLL.....
Jag har en applikation där jag skall visa hur olika detaljer skall placeras vid montering, dvs rita
en (eller flera) streckbild på en yta så att operatören ser var och hur detaljen skall placeras.
Vad kostar såna här grejor?Sv:Skicka en Variabel till en DLL.....
Du råkar inte ha något bra skript att convertera typ DWG filer eller liknande till vektorer?
Ja du..Köper man en liknande i Sverige så får man ge 50000kr och uppåt typ...
Det finns ioförsig billig skit och men.........
Jag har köpt min i delar med en massa fjäsk hos tillverkarna i Kina och Tyskland så jag har kanske gett 30000 för den när den är klar men då har jag valt bra produkter rakt igenom...
Det är en gammal hobby sedan jag gick på gymnasiet att hålla på med laser och showlaser men innan har det varit små billiga saker..
Nu fick jag en massa bra dealar med så då kunde jag inte låta bli...
Har egentligen bara höljet kvar att göra... Allt sitter fastmonterat på en 5mm tjock Aluplåt...
Letar efter företag som säljer AluLister för TMuttrar....Sv: Skicka en Variabel till en DLL.....
Eller ja.. Den ritar men fel så jag får felsöka lite när jag kommer hem från jobbet...
Han inte göra det.. Konstatera bara att den började rita..
Eller ja... Först hade jag ju glömt ändra från min Lumax_Point till hans med byte så den gjorde en massa konstigt...
Sedan han jag byta och den ritade bara fel men jag kan ha råkat skifta Högabyte mot lågabyte... Kom på det när jag kom till jobbet....
PeO:
Såg föresten att vi jobba med nästan med samma sak...
Jobbar som akutelektriker på Volvo Powertrain med S5 o S7...
Har ju sett din firma ett par gånger när jag varit nere i Jönkping fast jag inte har tänkt på det...