Ik ben bezig om een programmaatje te schrijven op een pocket pc met wince 5.0 / 2003
Nu loop ik al de hele tijd tegen lastige dingen zoals datatypes die niet onder ce beschikbaar zijn, en functies etc. Veel prog ik eerst op mn laptop (XP) en test het dan over de com poort heen, en als dit werkt (proof of concept) port ik het naar de PDA.
Setup:
Laptop - usb->com1 -> blackbox
Pda -> cradle>com1 -> blackbox
Om de blackbox aan te spreken heb ik een .dll uit de SDK, en een eigen gemaakt DLL'etje om de compoort te benaderen. beide dll's zijn in c++ en ik gebruik voor mijn app C#.
Dit werkt op de laptop:
en dit gebruik ik als import, en daaronder de struct:
dit is orgineel c++
Het stomme is dat mijn CE versie nauwelijk verschilt, maar als ik dan data in de struct wil zetten, krijg ik een "Native exception has occured in fm300.exe"
Details:
Exception Code 0xc000005
Exception address 0x01505890
Writing 0x00000000
Gaat CE weer anders om met structs? of het doorgeven van de data in de DLL? zou wellicht de CE versie van de .dll van de SDK corrupt zijn ?
Een andere soortgelijke functie accepteerd zijn struct wel maar krijgt de data er niet in. De Uint32's worden gewoon max gevuld, maar crashed niet.
Een 3e functie geeft weer dezelfde error.
Nu loop ik al de hele tijd tegen lastige dingen zoals datatypes die niet onder ce beschikbaar zijn, en functies etc. Veel prog ik eerst op mn laptop (XP) en test het dan over de com poort heen, en als dit werkt (proof of concept) port ik het naar de PDA.
Setup:
Laptop - usb->com1 -> blackbox
Pda -> cradle>com1 -> blackbox
Om de blackbox aan te spreken heb ik een .dll uit de SDK, en een eigen gemaakt DLL'etje om de compoort te benaderen. beide dll's zijn in c++ en ik gebruik voor mijn app C#.
Dit werkt op de laptop:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| namespace WinAppStructTest { public partial class Form1 : Form { IntPtr pHandle; public FM_COMMS_GeneralInfo carinfo; public Form1() { carinfo = new FM_COMMS_GeneralInfo(); } [knip] FM_Comms.FM_Comms_GetGeneralInfo(ref carinfo); toolStripStatusLabel1.Text = carinfo.dwDriverID.ToString(); }} |
en dit gebruik ik als import, en daaronder de struct:
C#:
1
2
3
4
5
6
7
8
9
10
11
| [DllImport("FM_Comms.dll")] public static extern bool FM_Comms_GetGeneralInfo(ref FM_COMMS_GeneralInfo carInfo); struct: [StructLayout(LayoutKind.Sequential,CharSet = CharSet.Unicode)] public struct FM_COMMS_GeneralInfo { public UInt32 dwVehicleID; [en nog een boel dezelfde type vars] } |
dit is orgineel c++
C++:
1
2
3
4
5
| typedef struct { DWORD dwVehicleID; [en nog meer dezelfde vars] } tFM_COMMS_GeneralInfo; |
Het stomme is dat mijn CE versie nauwelijk verschilt, maar als ik dan data in de struct wil zetten, krijg ik een "Native exception has occured in fm300.exe"
Details:
Exception Code 0xc000005
Exception address 0x01505890
Writing 0x00000000
Gaat CE weer anders om met structs? of het doorgeven van de data in de DLL? zou wellicht de CE versie van de .dll van de SDK corrupt zijn ?
Een andere soortgelijke functie accepteerd zijn struct wel maar krijgt de data er niet in. De Uint32's worden gewoon max gevuld, maar crashed niet.
Een 3e functie geeft weer dezelfde error.
[ Voor 4% gewijzigd door VO-Zephyr op 28-02-2008 11:30 ]
