Event och VB6, Hjälp önskas

Moderator: Telldus

Post Reply
bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Event och VB6, Hjälp önskas

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

Hej ,

Har försökt att få tdRegisterDeviceEvent fungera i VB6 men får det inte att fungera.
Något händer ändå för att när jag trycker på fjärren så krachar det.
  • Problemsignatur:
    Problemhändelsens namn: APPCRASH
    Programnamn: TellStick VB-example - simple.exe
    Programversion: 1.0.0.0
    Programtidsstämpel: 4ebfb57a
    Namn på felmodul: StackHash_0a9e
    Modulens version: 0.0.0.0
    Tidsstämpel för felmodul: 00000000
    Undantagskod: c0000005
    Undantagsförskjutning: 0018f66b
    OS-version: 6.1.7601.2.1.0.256.48
    Språkvariant-ID: 1053
    Ytterligare information 1: 0a9e
    Ytterligare information 2: 0a9e372d3b4ad19135b953a78882e789
    Ytterligare information 3: 0a9e
    Ytterligare information 4: 0a9e372d3b4ad19135b953a78882e789
frmMain bygger på en avskalad variant av TellStickExample och innehåller bla tdInit & tdClose

Code: Select all

Option Explicit
Option Base 0

Const cstrServiceName As String = "TelldusService"

Private prbolShuttingDown As Boolean
Private prlngCounter As Long
Private prlngDelayTime As Long

Private Sub cmdEventStart_Click()
    GFHEventStart
End Sub

Private Sub cmdEventStopp_Click()
    GFHEventStop
End Sub

Private Sub cmdExit_Click()
    tdClose
    prbolShuttingDown = True
    Unload frmMain
End Sub

Private Sub Form_Load()
    tdInit
    prbolShuttingDown = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If (prbolShuttingDown = False) Then tdClose
End Sub
mdlEvents.bas

Code: Select all

Option Explicit
Option Base 0

Public pubCallbackId As Long

Sub Main()
    frmMain.Show
End Sub

''typedef void (WINAPI *TDDeviceEvent)(int deviceId, int method, const char *data, int callbackId, void *context);
Sub GFHEvent(ByVal deviceId As Long, _
             ByVal method As Long, _
             ByRef data As String, _
             ByVal callbackId As Long, _
             ByRef context As Variant)
                  
    frmMain.txtEventCounter = frmMain.txtEventCounter + 1
End Sub
       
Sub GFHEventStart()
    Dim tdd As TDDeviceEvent
    
    frmMain.txtEventCounter = 0
    pubCallbackId = tdRegisterDeviceEvent(AddressOf GFHEvent, tdd)
    
    frmMain.txtIN = GFHConvert(AddressOf GFHEvent) & vbCrLf
    frmMain.txtIN = frmMain.txtIN & Hex(GFHConvert(AddressOf GFHEvent)) & vbCrLf
    frmMain.txtIN = frmMain.txtIN & pubCallbackId & vbCrLf
    frmMain.txtIN = frmMain.txtIN & "=================" & vbCrLf
End Sub

Sub GFHEventStop()
     Call tdUnregisterCallback(pubCallbackId)
End Sub

Function GFHConvert(plng As Long) As Long
    GFHConvert = plng
End Function

TellStickModule.bas

Code: Select all

Option Explicit
Option Base 0

Public Declare Sub tdInit Lib "TelldusCore.dll" ()
Public Declare Sub tdClose Lib "TelldusCore.dll" ()
Public Declare Function tdRegisterDeviceEvent Lib "TelldusCore.dll" (ByRef TDDeviceEvent As Variant, ByRef context As Variant) As Long
Public Declare Function tdUnregisterCallback Lib "TelldusCore.dll" (ByVal callbackId As Long) As Boolean
clsTDDeviceEvent.cls

Code: Select all

Option Explicit
Option Base 0

Public Type TDDeviceEvent
    deviceId As Long
    method As Long
    data As String
    callbackId As Long
    context As Variant
End Type
Attachments
TellStick VB-example2 - simple.zip
(27.61 KiB) Downloaded 167 times
/Bengt-Göran

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Re: Event och VB6, Hjälp önskas

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Du skickar med "tdd" som är av typen TDDeviceEvent till tdRegisterDeviceEvent(). Kan du förklara hur du använder denna?
Micke Prag
Software
Telldus Technologies

bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Re: Event och VB6, Hjälp önskas

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

micke.prag wrote:Du skickar med "tdd" som är av typen TDDeviceEvent till tdRegisterDeviceEvent(). Kan du förklara hur du använder denna?
Hej Micke,

Nej det kan jag inte förklara... eftersom jag inte har koll på läget så har det varit ett vilt testande fram och tillbaka, utan resultat.

Har även testat att skicka 0 (Noll) ( Taget från sensor Event).
pubCallbackId = tdRegisterDeviceEvent(AddressOf GFHEvent, 0)
/Bengt-Göran

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Re: Event och VB6, Hjälp önskas

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Använder du inte contexten så kör med noll tills vidare.

När kommer krashen? Vid registreringen eller när ett event kommer?
Micke Prag
Software
Telldus Technologies

bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Re: Event och VB6, Hjälp önskas

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

micke.prag wrote:Använder du inte contexten så kör med noll tills vidare.

När kommer krashen? Vid registreringen eller när ett event kommer?
Krashen kommer när ett event inträffar...
/Bengt-Göran

Solander
Posts: 4
Joined: Thu Jan 18, 2018 11:08 am

Re: Event och VB6, Hjälp önskas

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

Jag har precis samma problem, fast med C# .NET 4.0. Så fort ett event inträffar så får jag upp "vshost32.exe has stopped working". När jag har kod i min callback så exekveras den så långt den hinner, innan vshost32.exe krashar.

Här är min kod om det hjälper till att lokalisera felet:

Code: Select all

class Sensory_test
{
	public struct DeviceEvent
	{
		public int deviceId;
		public int method;
		public string data;
		public int callbackId;
		//public void* context;
	}

	//Import function 
	[DllImport("TelldusCore.dll")]
	public static extern int tdRegisterDeviceEvent(TDDeviceEventCallBack eventFunction, IntPtr context);

	//Create the delegate 
	public delegate void TDDeviceEventCallBack(DeviceEvent ev);

	static void Main(string[] args)
	{
		//Register callback 
		TDDeviceEventCallBack del = new TDDeviceEventCallBack(DeviceEvent_Occured);
		tdRegisterDeviceEvent(del, new IntPtr(1));

		Console.Read();
	}

	static void DeviceEvent_Occured(DeviceEvent e)
	{
		//Some code 
	}
}

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Re: Event och VB6, Hjälp önskas

Post by micke.prag » Thu Jan 18, 2018 11:08 am

@Solander, ditt problem hör troligtvis inte hit. Men en snabb titt på din kod verkar du inte riktigt ha fått rätt på parametrarna. Jämför vår wrapper här:
http://developer.telldus.com/browser/bi ... NETWrapper
Du kan även använda den direkt eftersom den följer med i 2.1.0

@bgma1961, Tyvärr vet ag inte vad som kan vara fel med din kod. Har du fått något annat callback att fungera?
Micke Prag
Software
Telldus Technologies

bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Re: Event och VB6, Hjälp önskas

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

micke.prag wrote:Tyvärr vet ag inte vad som kan vara fel med din kod. Har du fått något annat callback att fungera?
Jag har endast provat med tdRegisterDeviceEvent ännu.
Jag testade att kompilera en C-variant som utgick från sensor/event och det funkade....
/Bengt-Göran

bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Re: Event och VB6, Hjälp önskas

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

Nu har jag testat med tdRegisterSensorEvent och det krashar när ett event inträffar.
/Bengt-Göran

bgma1961
Posts: 24
Joined: Thu Jan 18, 2018 11:08 am
Location: Norrköping

Re: Event och VB6, Hjälp önskas

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

Hej,
Önskar fortfarande hjälp, sitter fast ...
/Bengt-Göran

Post Reply