Author | Topic: Microsoft 'Sensor and location platform' | |
---|---|---|
Jan Groenestein | Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 09:46:27 +0200 Gentlemen, Our clients often use GPS to find their location in our geographical system. However, many tablet computers now have an internal GPS system, which does not communicate via the good old COM port anymore. Instead, Microsoft has a 'Sensor and location platform' and they also offer examples for accessing this platform : http://msdn.microsoft.com/en-us/library/windows/hardware/dn614612(v=vs.85).aspx The sensor and location platform however uses namespaces http://msdn.microsoft.com/library/windows/apps/BR225603 and we can't do anything with that, the alaska activex-class refuses to interface with it. The only data that we need from it is the longitude and the latitude, examples of how to access that are in : http://msdn.microsoft.com/en-US/library/windows/apps/windows.devices.geolocation.geocoordinate Is there anyone who has an idea on how to solve this problem ? Kind regards, Jan Groenestein | |
Thomas Braun | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 15:05:22 +0200 Jan Groenestein wrote: > The only data that we need from it is the longitude and the latitude, > examples of how to access that are in : > http://msdn.microsoft.com/en-US/library/windows/apps/windows.devices.geolocation.geocoordinate > > Is there anyone who has an idea on how to solve this problem ? Create a small, windowless c# console app that gets the coordinates and passes it back to your application... I wished there was Xbase# Thomas | |
Pascal Boivin | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 16:00:21 +0200 Hi Like Thomas said, use C# and copy/paste sample at https://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.latitude(v=vs.110).aspx Uncomment the line "watcher.stop" so the application will quit when the first position is received. Then change Console.WriteLine("Lat: {0}, Long: {1}", coordinate.Latitude, coordinate.Longitude); to System.IO.File.WriteAllText(String.Format("Lat: {0}, Long: {1}", coordinate.Latitude, coordinate.Longitude), "Output.txt") Make this an executable, call it from xbase then read Output.txt. | |
Thomas Braun | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 16:42:25 +0200 Pascal Boivin wrote: > System.IO.File.WriteAllText(String.Format("Lat: {0}, Long: {1}", > coordinate.Latitude, > coordinate.Longitude), "Output.txt") > > Make this an executable, call it from xbase then read Output.txt. Wouldn't it be possible to just write to stdout and capture this from the runshell-call from Xbase++? Thomas | |
Pascal Boivin | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 16:58:49 +0200 > Wouldn't it be possible to just write to stdout and capture this from > the runshell-call from Xbase++? That's what the sample from MS do! Just uncomment the specified line and here you go. | |
Thomas Braun | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 16:50:45 +0200 Just found this one which could probably be used to catch the stdout return of a c# program: http://www.idep.nl/xbase/datpage/shell2buffer.html HTH Thomas | |
Jim Lee | Re: Microsoft 'Sensor and location platform' on Tue, 09 Aug 2016 17:30:44 +0200 hi, > Make this an executable, call it from xbase then read Output.txt. why not make a activeX COM DLL using using System.Runtime.InteropServices coordinate.Latitude and coordinate.Longitude can be assign to a PUBLIC var so you can get Property from Xbase++ ! Note : you need "register" DotNet COM DLL with c:\Windows\Microsoft.NET\Framework\*VERSION*\RegAsm.exe | |
Jan Groenestein | Re: Microsoft 'Sensor and location platform' on Wed, 10 Aug 2016 10:31:41 +0200 Gentlemen, Thanks for the suggestions. This is, basically, what we do now. However, we would like to access the 'Sensor and location platform' using Xbase++, because the route that we now follow makes installation more complicated. This is a problem when our software (a client in a SAAS system) may be installed on machines without our knowledge. We want to be able to use the Xbase++ Activex class for this in order to keep installation simple, but for some reason alaska activex-class refuses to interface with it. Kind regards, Jan Groenestein Op 9-8-2016 om 16:00 schreef Pascal Boivin: > Hi > > Like Thomas said, use C# and copy/paste sample at > https://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.latitude(v=vs.110).aspx > > Uncomment the line "watcher.stop" so the application will quit when the > first position is received. Then change > > Console.WriteLine("Lat: {0}, Long: {1}", coordinate.Latitude, > coordinate.Longitude); > to > System.IO.File.WriteAllText(String.Format("Lat: {0}, Long: {1}", > coordinate.Latitude, > coordinate.Longitude), "Output.txt") > > Make this an executable, call it from xbase then read Output.txt. > | |
Pascal Boivin | Re: Microsoft 'Sensor and location platform' on Wed, 10 Aug 2016 15:00:33 +0200 > Thanks for the suggestions. This is, basically, what we do now. > However, we would like to access the 'Sensor and location platform' > using Xbase++, because the route that we now follow makes > installation more complicated. This is a problem when our software (a > client in a SAAS system) may be installed on machines without our > knowledge. > > We want to be able to use the Xbase++ Activex class for this in order > to keep installation simple, but for some reason alaska activex-class > refuses to interface with it. ActiveX and .Net use complety different way to expose properties and methods. They can not be interchange. I have not read anything about .Net from Alaska Software in a near future, but I may just have miss it as I'm not up to date with 2.0. | |
Jim Lee | Re: Microsoft 'Sensor and location platform' on Wed, 10 Aug 2016 19:00:53 +0200 > ActiveX and .Net use complety different way to expose properties and > methods. They can not be interchange. I have not read anything about > .Net from Alaska Software in a near future, but I may just have miss it > as I'm not up to date with 2.0. as i say you can make a DotNet COM DLL using with Xbasse++ v1.9x ------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; namespace InteropExamples { [ComVisible(true)] [ClassInterface(ClassInterfaceType.AutoDual)] [ProgId("InteropExamples.Examples")] public class Examples { public string HelloWorld(string name) { return "hello World, " + name; } public decimal Add(decimal number1, decimal number2) { return number1 + number2; } } } ------------------------------------------------------------------------- you also can get Events from DotNet this Way ------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; namespace Tester { [Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")] [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface _Numbers { [DispId(1)] int GetDay(); [DispId(2)] int GetMonth(); [DispId(3)] int GetYear(); [DispId(4)] int DayOfYear(); } [Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")] [ClassInterface(ClassInterfaceType.None)] [ProgId("Tester.Numbers")] public class Numbers : _Numbers { public Numbers(){} public int GetDay() { return(DateTime.Today.Day); } public int GetMonth() { return(DateTime.Today.Month); } public int GetYear() { return(DateTime.Today.Year); } public int DayOfYear() { return(DateTime.Now.DayOfYear); } } } ------------------------------------------------------------------------- | |
Jan Groenestein | Re: Microsoft 'Sensor and location platform' on Wed, 10 Aug 2016 21:02:41 +0200 Hi Jim, I'm sorry that I missed your previous message, but this looks promising to me. Thank you, we will certainly give it a try and will report back to you. Kind regards, Jan Groenestein Op 10-8-2016 om 19:00 schreef Jim Lee: >> ActiveX and .Net use complety different way to expose properties and >> methods. They can not be interchange. I have not read anything about >> .Net from Alaska Software in a near future, but I may just have miss it >> as I'm not up to date with 2.0. > > as i say you can make a DotNet COM DLL using with Xbasse++ v1.9x > ------------------------------------------------------------------------- > using System; > using System.Runtime.InteropServices; > namespace InteropExamples > { > [ComVisible(true)] > [ClassInterface(ClassInterfaceType.AutoDual)] > [ProgId("InteropExamples.Examples")] > public class Examples > { > public string HelloWorld(string name) > { > return "hello World, " + name; > } > public decimal Add(decimal number1, decimal number2) > { > return number1 + number2; > } > } > } > ------------------------------------------------------------------------- > > you also can get Events from DotNet this Way > > ------------------------------------------------------------------------- > using System; > using System.Runtime.InteropServices; > > namespace Tester > { > [Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")] > [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] > public interface _Numbers > { > [DispId(1)] > int GetDay(); > > [DispId(2)] > int GetMonth(); > > [DispId(3)] > int GetYear(); > > [DispId(4)] > int DayOfYear(); > } > > [Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")] > [ClassInterface(ClassInterfaceType.None)] > [ProgId("Tester.Numbers")] > public class Numbers : _Numbers > { > public Numbers(){} > > public int GetDay() > { > return(DateTime.Today.Day); > } > > public int GetMonth() > { > return(DateTime.Today.Month); > } > > public int GetYear() > { > return(DateTime.Today.Year); > } > > public int DayOfYear() > { > return(DateTime.Now.DayOfYear); > } > } > } > > ------------------------------------------------------------------------- > > | |
Jim Lee | Re: Microsoft 'Sensor and location platform' on Wed, 10 Aug 2016 23:27:03 +0200 > you also can get Events from DotNet this Way > > ------------------------------------------------------------------------- > using System; > using System.Runtime.InteropServices; > namespace Tester that Source only show how to use IDispatch Interface to access Method not Events. here is a Sample from Roger how Xbase++ can use Events /************************************** Publishing COM Events public.xbase++.activex 20. Januar 2008 **************************************/ Namespace DonnayTest1 { [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface UserControl1Events { [DispId(2)] void CheckedChanged(int n, object o); [DispId(1)] void ButtonClick( int n, object o ); } public delegate void ButtonClickDelegate( int n, object o ); public delegate void CheckedChangedDelegate( int n, object o ); [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ComSourceInterfaces(typeof(UserControl1Events)), ClassInterface(ClassInterfaceType.AutoDual)] public partial class UserControl1 : System.Windows.Forms.UserControl { public UserControl1() { InitializeComponent(); } private void UserControl1_Load(object sender, EventArgs e) { } public event ButtonClickDelegate ButtonClick; public event CheckedChangedDelegate CheckedChanged; public void button1_Click(object sender, EventArgs e) { ButtonClick(1,this.button1); } public void label1_Click(object sender, EventArgs e) { } public void button2_Click(object sender, EventArgs e) { ButtonClick(2,this.button2); } public void checkBox1_CheckedChanged(object sender, EventArgs e) { label1.Text = "Clicky"; CheckedChanged(1, this.checkBox1); } } } | |
Jan Groenestein | Re: Microsoft 'Sensor and location platform' on Thu, 11 Aug 2016 13:05:54 +0200 Hi Jim, Reading back your postings it looks to mee that this option is not what we are looking for. You propose to make an Activex COM DLL that should be registered first. This is what we are trying to avoid because of the installation troubles. Others have also done this, as using the 'Sensor and location platform' by non-Visual Studio developers is a widespread problem. The tools that we now use also have problems on some machines. So, we are really looking for a way of directly accessing that platform directly form Xbase++ Any ideas, anyone ? Does it really have to go via .Net ? If so, what is the status of .Net support in Xbase++ ? Kind regards, Jan Groenestein Op 10-8-2016 om 23:27 schreef Jim Lee: >> you also can get Events from DotNet this Way >> >> ------------------------------------------------------------------------- >> using System; >> using System.Runtime.InteropServices; >> namespace Tester > > that Source only show how to use IDispatch Interface to access Method not > Events. > here is a Sample from Roger how Xbase++ can use Events > > /************************************** > > Publishing COM Events > public.xbase++.activex > 20. Januar 2008 > > **************************************/ > > Namespace DonnayTest1 > { > [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), > InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] > public interface UserControl1Events > { > [DispId(2)] > void CheckedChanged(int n, object o); > [DispId(1)] > void ButtonClick( int n, object o ); > } > public delegate void ButtonClickDelegate( int n, object o ); > public delegate void CheckedChangedDelegate( int n, object o ); > [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), > ComSourceInterfaces(typeof(UserControl1Events)), > ClassInterface(ClassInterfaceType.AutoDual)] > public partial class UserControl1 : System.Windows.Forms.UserControl > { > public UserControl1() > { > InitializeComponent(); > } > private void UserControl1_Load(object sender, EventArgs e) > { > } > public event ButtonClickDelegate ButtonClick; > public event CheckedChangedDelegate CheckedChanged; > > public void button1_Click(object sender, EventArgs e) > { > ButtonClick(1,this.button1); > } > public void label1_Click(object sender, EventArgs e) > { > } > public void button2_Click(object sender, EventArgs e) > { > ButtonClick(2,this.button2); > } > public void checkBox1_CheckedChanged(object sender, EventArgs e) > { > label1.Text = "Clicky"; > CheckedChanged(1, this.checkBox1); > } > } > } > > > | |
Jim Lee | Re: Microsoft 'Sensor and location platform' on Sat, 13 Aug 2016 04:04:13 +0200 hi, have you check M$ Sample if it run with your Hardware ? my GPS Hardware still have Bluetoooth Connection so M$ Sample does not work. >Others have also done this, as using the 'Sensor and location platform' by >non-Visual Studio developers is a widespread problem any Link ? are they using Windows OS() ? >Any ideas, anyone ? as Pascal say you can try write "Output.txt" from VS App and read it with Xbase++ hm ... what about WMI ? >Does it really have to go via .Net ? when new Hardware arrive for Windows M$ will use Dotnet to access Hardware. >If so, what is the status of .Net support in Xbase++ ? ask Alaska. p.s. remember a activeX COM DLL can be used by any Language which support activeX |