Attempted to read or write protected memory

Moderator: Telldus

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

Ah, du länkar statiskt till den, ja då är det bara LGPL som funkar om jag förstått de där GPL licenserna rätt.

En zip-fil här funkar, eller så lägger du upp den på t.ex. GitHub om du orkar.

Ja, med P/Invoke slipper jag släppa två varianter...men som du kanske sett i den parallella tråden har jag samma problem som du upplevde ovan och kan f-n inte lösa det. Hoppas på att Telldus har några givande kommentarer, men de är väldigt tysta...

Som det ser ut nu så blir det nog till att gå C++/CLI-vägen iaf, med två olika kompileringsenheter. Jag har labbat en hel del kring det och det er ut att fungera bra, blir troligen en moddad variant av ditt paket ändå, för att spara tid, men med dynamisk laddning av telldus-core för bättre uppdateringsmöjligheter. Blir det LGPL så får du naturligtvis också tillgång till det.

Det ska bli väldigt kul att få se vad du skapat.
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

carl-johan
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Attempted to read or write protected memory

Post by carl-johan » Thu Jan 18, 2018 11:08 am

Är inte statisk länkning enda allternativet för lib-filer? Eller använder du någon hemlig DLL?
Ja, med P/Invoke slipper jag släppa två varianter...
Men MÅSTE du ha en 64-bitars-variant då? I mitt jobb åker vi på det här gång på gång och lösningen blir alltid att ställa om till x86. Så länge man inte använder sjukt mycket minne eller kör enormt komplexa och krävande beräkningar eller stora databasoperationer så funkar det fin-fint.

I mitt privata hobbyprojekt har jag en service (x86) som använder min .NET-wrapper för att peta in data i en databas. Sedan har jag en ASP.NET-webapp (Any CPU) som jobbar mot samma data i databasen. Det finns inga referenser mellan webappen och servicen med Telldus-wrappern. Enda gemensamma nämnaren är databasen.

Vill man tända en lampa så manipulerar webappen ett värde i databasen. En trigger anropar rätt in i dotnet-servicen, den som loggar till databasen och har referenser till Telldus, och den tänder sedan lampan. Så är det tänkt. Just denna del är otestad än men teoretiskt ska det funka :)

Jag publicerar i så fall till och börja med en ZIP-fil här så får vi se om jag orkar få igång GitHub. Ska bara lägga till licenseinformation i den...

mvh
Carl-Johan

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

carl-johan wrote:Är inte statisk länkning enda allternativet för lib-filer? Eller använder du någon hemlig DLL?
Jo, lib-filer måste länkas statisk. Nej, jag använder ingen hemlig dll, utan tellduscore.dll via dynamisk laddning.
carl-johan wrote:Men MÅSTE du ha en 64-bitars-variant då?
Ja, på x64 fungerar inte 32-bitars 1-Wire drivrutinen, så jag tog ett beslut för många år sedan att stödja båda varianterna och alltid köra Any CPU.

Din tanke om kommunikation via databas funkar så klart, men det skulle också kunna lösas via t.ex. sockets eller annat icke-CPU bundet medium.
carl-johan wrote:Jag publicerar i så fall till och börja med en ZIP-fil här så får vi se om jag orkar få igång GitHub
Jahapp, då vet jag vad jag gör ikväll då :)
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

carl-johan
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Attempted to read or write protected memory

Post by carl-johan » Thu Jan 18, 2018 11:08 am

Nej, jag använder ingen hemlig dll, utan tellduscore.dll via dynamisk laddning.
Ja titta, där låg en dll och skräpade. Jag tittade bara i development-katalogen och hittade bara libbar

Ja sockets var ju en idé. Tack för tipset. Det är rätt stökig med .NET-triggers och jag är orolig över prestandan.

Borde väl gå med WCF också.

mvh
Carl-Johan
Last edited by carl-johan on Thu Aug 09, 2012 7:59 pm, edited 1 time in total.

carl-johan
Posts: 13
Joined: Thu Jan 18, 2018 11:08 am

Re: Attempted to read or write protected memory

Post by carl-johan » Thu Jan 18, 2018 11:08 am

Release av Telldus.NET-API

Innehåll:
TestApplication.DLL: Exekverbart testprogram i WPF
Telldus.NET.DLL: Översta lagret som ger en trevlig objektorienterad modell i .NET som dessutom stöder WPF databindning och routed commands. Notera att man BEHÖVER inte använda WPF. Det går bra med vilken typ av .NET-applikation eller library som helst.
TellstickNativeAdapter.DLL: Lägsta lagret i C++/CLI som i princip är en ett-till-ett mappning till funktionerna i TelldusCore

Version
1.0.0.0 men så vitt jag vet helt stabilt. Det har inte kraschat en enda gång på evigheters evigheter.

Licens
LGPL

Utvecklingsmiljö
Microsoft Visual Studio 2010
Statiskt länkat till x86-versionen av TelldusCore.lib. Det innebär att ni inte kan ha "Any CPU" satt utan det måste vara "x86" på ert program som använder detta. Det borde vara jättelätt att producera en x64-variant. Den övningen lämnar jag åt er.

Features
Använder ni översta lagret, Telldus.NET.DLL, så får ni en snygg objektorienterad vy med events på rätt tråd istället för callbacks och enums istället för konstanter.

Devices: Detta är en collection med enheter och den uppdateras automatiskt. Notera också att en device kan plötsligt och oväntat tas bort (till exempel genom att ni tar bort den i Telldus Center) och då slängs exceptions som er applikation måste kunna hantera om ni råkar pilla på en borttagen Device.

Klassen Device har properties som SupporTurnOn, SupportsTurnOff osv... Tycker man det är drygt att anropa var och en så kan man anropa Methods istället och få det som en bitmask. Det är två sätt att åstadkomma samma sak. Vill man ändra på de metoder som er applikation stöder så anropar ni RemapSupportedMethods()

Sensors: Detta är en collection med enheter och den uppdateras automatiskt. Sensorer försvinner aldrig.

Properties som kräver extra förklaring:
TimeBetweenUpdates: Tiden mellan de två senaste uppdateringarna
NormalTimeBetweenUpdates: Detta är den optimala tiden mellan uppdateringar om det råder perfekt mottagning. Är Time Between Updates högre så tyder det på dålig mottagning. Rent tekniskt så är det minvärdet.
Retransmissions: Antalet omsändningar av samma sensorvärde som mottogs vid senaste uppdateringen
NormalRetransmissions: Det antalet som faktiskt skickas av sensorn. Är det högre än Retransmissions så tyder det på sämre mottagning. Rent tekniskt är detta maxvärdet.

Commands: Sådant som er fjärrkontroll skickar. Dessa skickas som .NET-events

Uppstädning
Dispose() måste anropas på ert Tellstickobjekt när ni är klara. Klassen Adapter i TellstickNativeAdapter implementerar också IDispose men den får absolut inte anropas eftersom objekt av denna klass är singleton, det vill säga att det finns bara en enda instans av denna klass som delas av alla användare. Varför minns jag inte men jag hade nog en bra anledning...

Varför detta tjat om WPF? jag vill ju göra en webbapplikation!
Därför att WPF, rätt använt, tvingar fram en bra design av min dotnetwrapper och en bra separation då man måste använda MVVM. Dessutom går det busfort att prototypa i WPF. Spana in Testapplikationen. Det är en väldigt kompetent applikation med väldigt lite kod skrivet i code behind. Nästan allt kan hanteras i den deklarativa XAML-delen som beskriver GUIt.

Det går alldeles utmärkt att göra en webapplikation med hjälp av mina grejer. Vill man inte databinda kan man göra på gammalt hederligt sätt; reagera på events och iterera genom data.

Kontakt
Mailadressen finns i källkoden. Jag vill inte publicera den här av olika anledningar. Kom gärna med synpunkter och förslag på förbättringar.

mvh
Carl-Johan
Attachments
Telldus.NET.zip
Här kommer filerna
(143.12 KiB) Downloaded 345 times

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

Spännande! Får se om jag hinner titta på det ikväll, annars blir det fredagens kvällsäventyr :)
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

Carl-johan,

Nu har jag orienterat mig i koden och jag tycker det ser bra ut, enda egentliga felet jag sett är att Adapter::FreeReseources() kan anropas två gånger eftersom det saknades en kontroll som

Code: Select all

if( !isDisposed ) { ... }
Jag har arbetat om Adapter-klassen så den använder dynamisk laddning av TelldusCore.dll och därmed möjliggjort för en x64-variant av TellstickNativeAdapter. Således är alla C#-projekt nu kompilerade som "Any CPU". Jag har en del kontrollpunkter kvar innan jag lägger upp den modifierade koden här.
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

Dåså, då det lirar det med dynamisk laddning under både x86 och x64.

Jag stötte på ett problem med x86 vs x64 libbarna, som det kan läsas om här, men det är efter mycket huvudkliande löst :)


Utddrag från Release info:

2012-08-13 1.1 Uses dynamic loading of TelldusCore.dll
Added x64 version of TellstickNativeAdapter
Update project settings to compile as AnyCPU, Win32 and x64 accordingly.
Note: When debugging on a x86 OS, you'll need to update the TellstickNativeAdapter
reference in the Telldus.NET API to use the x86 version.

Edit: för att kunna kompilera måste man rätta en bugg i VS2010SP1: http://blogs.msdn.com/b/vcblog/archive/ ... 40139.aspx
Attachments
Telldus.NET.zip
v1.1
(78.03 KiB) Downloaded 382 times
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

Gramatus
Posts: 1
Joined: Thu Jan 18, 2018 11:08 am

Re: Attempted to read or write protected memory

Post by Gramatus » Thu Jan 18, 2018 11:08 am

Takk for et godt API å jobbe med!
Kom over denne tråden etter at jeg fikk Telldus Duo og slo hodet mitt inn i Access Violations fra TelldusNETWrapper.
Har bygd om mitt gamle strømstyringssystem til å støtte denne koden, og så langt ser det stabilt og lovende ut.
I tillegg er denne koden mye mer behagelig å jobbe med enn TelldusNETWrapper, så igjen tusen takk for innsatsen og for at dere deler koden med andre :D

PerM
Posts: 58
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Attempted to read or write protected memory

Post by PerM » Thu Jan 18, 2018 11:08 am

Roligt att höra :)

Berätta gärna mer om ditt system, och ta också gärna en titt på mitt projekt/produkt där detta används, se länk i min signatur.
Beyond Measure - mer än bara mätning: Rita regler grafiskt, styr enheter, skapa grafer, skicka/ta emot SMS, E-mail, 1-Wire, RFXtrx, Tellstick....

Post Reply