[VB] API functies gebruiken (PocketPC 2002)

Pagina: 1
Acties:

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Ik wil graag met een VB Programma op een PDA met PocketPC 2002 automatisch inbellen. Dit kan met de API functie ConnMgrEstablishConnection (ppc3sdkr.chm + ppc3sdkr.chi, zie "Pocket PC 2002 API" -> "Connection Manager" -> "Functions").

Ik ben echter redelijk n00b op VB gebied (kan wel standaard progsels enzo maken), en heb eigenlijk geen idee hoe ik deze API functies gebruik. Op internet staat over deze functies vrijwel niets, en wat er staat is in C++ of zonder code.

Kan iemand me een duw in de goede richting geven?

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Kun je een stukje C++ code neerzetten? Das allicht te vertalen naar VB. (of maak een dll in C++ die je gebruikt vanuit VB :))

Exact expert nodig?


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Oke, ik ga het proberen :).

Ik moet de volgende API functie aanroepen:

ConnMgrEstablishConnection:
HRESULT WINAPI ConnMgrEstablishConnection(
CONNMGR_CONNECTIONINFO * pConnInfo,
HANDLE * phConnection );

Parameters
pConnInfo
Pointer to the CONNMGR_CONNECTIONINFO data structure; this structure contains the parameters that describe the requested connection.
phConnection
Pointer to a variable of type HANDLE into which the returned connection handle is placed.

De eerste parameter is het probleem: CONNMGR_CONNECTIONINFO. Dit moet een struct zijn die er zo uitziet:

typedef struct _CONNMGR_CONNECTIONINFO {
DWORD cbSize;
DWORD dwParams;
DWORD dwFlags;
DWORD dwPriority;
BOOL bExclusive;
BOOL bDisabled;
GUID guidDestNet;
HWND hWnd;
UINT uMsg;
LPARAM lParam;
ULONG ulMaxCost;
ULONG ulMinRcvBw;
ULONG ulMaxConnLatency;
} CONNMGR_CONNECTIONINFO;

Dit is typisch C code, en ik heb geen idee hoe je zo iets in VB doet.

Een stukje code zoals het in een lezing van Microsoft in C++ gedaan wordt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#define INITGUID
#include <connmgr.h>

CONNMGR_CONNECTIONINFO connInfo;
HANDLE hConnection;

// Fill in the structure with the connection details
memset(&connInfo, 0, sizeof(connInfo));
connInfo.cbSize = sizeof(connInfo);
connInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
connInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
connInfo.dwFlags = 0;
connInfo.bExclusive = false;
connInfo.bDisabled = false;
connInfo.guidDestNet = IID_DestNetInternet;
connInfo.hWnd = hwnd;
connInfo.uMsg = WM_APP_CONNMGR;
connInfo.lParam = (LPARAM)0;

// Make the connection
ConnMgrEstablishConnection(&connInfo, &hConnection);

// In your main window message loop put the following code 
// to look for a successful connection.
case WM_APP_CONNMGR:
switch ((WPARAM)wp)
{   case CONNMGR_STATUS_CONNECTED:      // We&#8217;re connected
    break;
}

// Close the connection
ConnMgrReleaseConnection(hConnection, 1);


Dit wil ik in VB doen..

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

www.allapi.net al bekeken .. en de voorbeeld VB codes?

edit:
oeps..niks gevonden.. hee die API call in C++.. welke dll gebruikt die dan van Windows dan volgens jou?

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
henkleerssen schreef op 07 November 2002 @ 09:41:
www.allapi.net al bekeken .. en de voorbeeld VB codes?

edit:
oeps..niks gevonden.. hee die API call in C++.. welke dll gebruikt die dan van Windows dan volgens jou?

Natuurlijk heb ik daar al gekeken. Ik weet vrijwel zeker dat het nergens op een dmv zoekmachines vindbaar plekje van internet staat.

Het gebruikt een DLL die niet in Win32 beschikbaar is, maar alleen op PocketPC 2002. Het zit in Cellcore.lib.

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 27-08 23:01

Peetman

Tjah....

In c++ heten de api-calls hetzelfde als in VB. Maak ipv een struct voor de data een type aan en vertaal de datatypes naar de corresponderende datatypes in VB. Voor voorbeelden in VB kan je idd het beste even op de bovengenoemde allapi.net kijken.

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Burat schreef op 07 november 2002 @ 09:28:
Oke, ik ga het proberen :).

Ik moet de volgende API functie aanroepen:

[...]
OK, vertaling naar VB:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Type CONNMGR_CONNECTIONINFO
   cbSize As Long
   dwParams As Long
   dwFlags As Long
   dwPriority As Long
   bExclusive As Long
   bDisabled As Long
   guidDestNet As Long ' GUID zou ook wel eens Byte*32 kunnen zijn
   hWnd As Long
   uMsg As Long
   lParam As Long
   ulMaxCost As Long
   ulMinRcvBw As Long
   ulMaxConnLatency As Long
End Type

Declare Function ConnMgrEstablishConnection Lib "cellcore.dll" _
   (ByRef pConnInfo As CONNMGR_CONNECTIONINFO, _
   ByRef phConnection As Long) As Long
Declare Function ConnMgrReleaseConnection Lib "cellcore.dll" _
   (ByVal hConnection As Long, _
   ByVal dwFlags As Long) As Long

In plaats van ByRef pConnInfo As CONNMGR_CONNECTIONINFO zou je ook ByVal pConnInfo As Long kunnen gebruiken, maar dan moet je bij het aanroepen van de functie wel zelf het adres van de variabele meegeven (met VarPtr). Over het datatype van een GUID ben ik niet helemaal zeker; ik dacht dat een GUID 32 bytes in beslag nam, dus misschien moet je dat declareren als guidDestNet As Byte * 32...

En het andere stukje code, om te verbinden:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim connInfo As CONNMGR_CONNECTIONINFO
Dim hConnection As Long

' Fill in the structure with the connection details
connInfo.cbSize = Len(connInfo)
' de volgende constanten moet je ff opzoeken...
connInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET
connInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE
connInfo.dwFlags = 0
connInfo.bExclusive = 0
connInfo.bDisabled = 0
connInfo.guidDestNet = IID_DestNetInternet
connInfo.hWnd = frmMain.hWnd
connInfo.uMsg = WM_APP_CONNMGR
connInfo.lParam = 0

' Make the connection
ConnMgrEstablishConnection connInfo, hConnection

Als je ByVal pConnInfo As Long had gebruikt, dan zou de aanroep als volgt zijn: ConnMgrEstablishConnection VarPtr(connInfo), hConnection

Verder staat er, dat de connection manager messages stuurt naar een door jou opgegeven window (in bovenstaand geval frmMain). VB verwerkt deze messages niet voor je; daarom zal je het window moeten subclassen en de WM_APP_CONNMGR message zelf afvangen en verwerken. Maar misschien werkt het ook wel zonder dit stukje subclassing (waarschijnlijk zijn het notification messages die je informeren over een verandering in de status van de connectie).

Het opheffen doe je als volgt:
Visual Basic .NET:
1
2
' Close the connection
ConnMgrReleaseConnection hConnection, 1


HTH :)

[ Voor 0% gewijzigd door johnwoo op 07-11-2002 10:19 . Reden: cellcore dus :) ]

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Kun je niet zelf een dll compilen met de functie die je wel in C++ voorhanden hebt? Vervolgens kun je deze referencen in je VB project... alleen moet je dan nog wel in vb die parameters meegeven die je in die struct verwacht .... dat kan in vb met type declaratie
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'------------------------------------------------------------
' VB reference...
'------------------------------------------------------------
Public Declare Sub Conection Lib "jouw.dll" (ByVal ByteLen As Long, en wat dies meer zij)

'------------------------------------------------------------
' Struct declaratie in vb dus met type...
'------------------------------------------------------------
Public Type Connection_Struct_ALA_C
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte 
    'en wat nog meer nodig is...
End Type

Is maar een idee.. ik weet eigenlijk ook niet precies hoe ik het verder zou aanpakken.. ben wel benieuwd of het gaat lukken..

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

johnwoo schreef op 07 november 2002 @ 10:04:
[...]

OK, vertaling naar VB:
bl bla..


HTH :)
Kijk eens aan.. Johnwoo.. was me voor...

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

is dword datatype.. een long zoals in vb Johnwoo? ooh...

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

henkleerssen schreef op 07 november 2002 @ 10:10:
is dword datatype.. een long zoals in vb Johnwoo? ooh...
DWORD in C: doubleword, 2x16 bits = 32 bits. Long in VB: 32 bits. Dat past ;)
Er is wel verschil tussen, namelijk dat een DWORD unsigned is en een VB Long signed, maar dat maakt voor de meeste API's (waarbij vlaggetjes in DWORDs worden gestopt, en de vlaggetjes in Hex worden gespecificeerd) niet uit. Pas als je waarden groter dan of gelijk aan 2^16 erin wil stoppen moet je op gaan letten :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Oh zit ik net een lap tekst te typen, zie ik dat er al wat mensen me voor waren :P Maar goed dat er een Bekijk bericht button is ;)

Wat trouwens bij mij weleens heeft geholpen als ik de exacte VB declaratie niet kon vinden, is naast de bijbel van Dan Appleman, andere functies waarvan je wel de VB declaratie hebt, vergelijken met de C versie.

Exact expert nodig?


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Crazy_D schreef op 07 november 2002 @ 10:18:
[...]
Wat trouwens bij mij weleens heeft geholpen als ik de exacte VB declaratie niet kon vinden, is naast de bijbel van Dan Appleman, andere functies waarvan je wel de VB declaratie hebt, vergelijken met de C versie.
API's zijn best makkelijk te vertalen hoor. Enkele vuistregels:
- Zet in je declaratie altijd expliciet ByRef of ByVal, zodat je weet of het adres (ByRef, default) of de waarde (ByVal) van je variabele wordt doorgegeven. Alleen bij ByVal kun je ook een constante opgeven in de aanroep.
- Pointers (als er in de C declaratie een & of * voor staat) zijn altijd Longs in VB. Je kunt ze op 2 manieren doorgeven: ByVal As Long, en dan zelf het adres van je variabele doorgeven (VarPtr), of ByRef As [whatever het type is], zodat VB het adres zal doorgeven. ByRef As Any is ook een optie.
- BOOL, DWORD, UINT en vrijwel alle andere integer types zijn Longs. Handles ook (de naam van een handle begint meestal met een h, bijvoorbeeld hConnection in de vraag van topicstarter).
- Voor grotere waarden kun je een Double of Currency (8 bytes, __int64 of long long in C) gebruiken, maar je kunt dan niet zelf met de waarde gaan rekenen.
- Voor nog grotere waarden (die gaan altijd als pointer) kun je een eigen Type maken dat groot genoeg is. Voor 64 bits getallen wordt meestal een LARGE_INTEGER gebruikt in VB:
code:
1
2
3
4
Type LARGE_INTEGER
   LowPart As Long
   HighPart As Long
End Type

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

johnwoo schreef op 07 november 2002 @ 10:29:
[...]


API's zijn best makkelijk te vertalen hoor. Enkele vuistregels:
- Zet in je declaratie altijd expliciet ByRef of ByVal, zodat je weet of het adres (ByRef, default) of de waarde (ByVal) van je variabele wordt doorgegeven. Alleen bij ByVal kun je ook een constante opgeven in de aanroep.
- Pointers (als er in de C declaratie een & voor staat) zijn altijd Longs in VB. Je kunt ze op 2 manieren doorgeven: ByVal As Long, en dan zelf het adres van je variabele doorgeven (VarPtr), of ByRef As [whatever het type is], zodat VB het adres zal doorgeven.
- BOOL, DWORD, UINT en vrijwel alle andere integer types zijn Longs.
- Voor grotere waarden kun je een Double (8 bytes, __int64 /of long long in C) gebruiken, maar je kunt dan niet zelf met de waarde gaan rekenen.
- Voor nog grotere waarden (die gaan altijd als pointer) kun je een eigen Type maken dat groot genoeg is. Voor 64 bits getallen wordt meestal een LARGE_INTEGER gebruikt in VB:
Type LARGE_INTEGER
LowPart As Long
HighPart As Long
End Type
Handy! _/-\o_ ... Al vaak gedaan dan?

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
johnwoo schreef op 07 november 2002 @ 10:04:
[...]

OK, vertaling naar VB:
[knip]


_/-\o_ _/-\o_
Dank!

Ik heb de constants opgezocht in de header files en gedefinieerd. De code is op de juiste plekken geplakt.

Ik ben er alleen nog niet :P. Windows CE / PocketPC heeft zo z'n eigen regels lijkt het. Embedded Visual Basic geeft de volgende foutmelding: "Currency, Data, Double, Object, Single and User-defined types are not supported in Declare statements for Windows CE". De cursor staat dan bij de tweede regel uit dit fragment:
Visual Basic:
1
2
3
Declare Function ConnMgrEstablishConnection Lib "cellcore.dll" _
   (ByRef pConnInfo As CONNMGR_CONNECTIONINFO, _
   ByRef phConnection As Long) As Long


[EDIT]
Dit kan dus worden opgelost door "ByVal pConnInfo As Long" te gebruiken...

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Burat schreef op 07 november 2002 @ 10:39:

[...]


_/-\o_ _/-\o_
Dank!

Ik heb de constants opgezocht in de header files en gedefinieerd. De code is op de juiste plekken geplakt.

Ik ben er alleen nog niet :P. Windows CE / PocketPC heeft zo z'n eigen regels lijkt het. Embedded Visual Basic geeft de volgende foutmelding: "Currency, Data, Double, Object, Single and User-defined types are not supported in Declare statements for Windows CE". De cursor staat dan bij de tweede regel uit dit fragment:
Visual Basic:
1
2
3
Declare Function ConnMgrEstablishConnection Lib "cellcore.dll" _
   (ByRef pConnInfo As CONNMGR_CONNECTIONINFO, _
   ByRef phConnection As Long) As Long
Probeer hem dan eens As Any:
Visual Basic:
1
2
3
Declare Function ConnMgrEstablishConnection Lib "cellcore.dll" _
   (ByRef pConnInfo As Any, _
   ByRef phConnection As Long) As Long


Ik geloof dat je bij gebruik van As Any in de aanroep nog een ByVal moest zetten, maar dat weet ik niet meer zeker:
Visual Basic:
1
ConnMgrEstablishConnection ByVal connInfo, hConnection

Kan dus zijn dat die ByVal daar niet moet staan... zal ik strax nog ff uitzoeken, als ik tijd kan vinden :P
Als dit nog niet werkt zou je de pointer ook As Long kunnen doorgeven, en zelf het adres van je variabele meegeven dmv VarPtr. Staat ook al in mijn eerste post :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Oke, ik heb dat laatste gedaan..
De code geeft geen errors, op 1 ding na: de Type definition (Type CONNMGR_CONNECTIONINFO ... End Type). Ik heb 'm helemaal boven in m'n VB Source gezet, precies zoals in jouw voorbeeld bij de Declare statements. Maar VB geeft bij runnen de volgende error: "Compile Error: Expected Statement".

Is ik nu dom?

Voor de duidelijkheid: ik heb nu een nieuwe module toegevoegd waar enkel het volgende instaat:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
' Type Definitions
Type CONNMGR_CONNECTIONINFO
   cbSize As Long
   dwParams As Long
   dwFlags As Long
   dwPriority As Long
   bExclusive As Long
   bDisabled As Long
   guidDestNet As Long ' GUID zou ook wel eens Byte(32) kunnen zijn
   hWnd As Long
   uMsg As Long
   lParam As Long
   ulMaxCost As Long
   ulMinRcvBw As Long
   ulMaxConnLatency As Long
End Type

' Constants
Const CONNMGR_PARAM_GUIDDESTNET = &H1
Const CONNMGR_PRIORITY_USERINTERACTIVE = &H8000
Const WM_APP_CONNMGR = 0

' Function Declarations
Public Declare Function ConnMgrEstablishConnection Lib "cellcore" (ByVal pConnInfo As Long, ByRef phConnection As Long) As Long
Public Declare Function ConnMgrReleaseConnection Lib "cellcore" (ByVal hConnection As Long, ByVal dwFlags As Long) As Long


Hij geeft dus "Compile Error: Expected Statement" op regel 2.

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Hmm.. quote van een vergeten hoekje van de MSDN site: "Because eMbedded Visual Basic lacks the ability to create UDTs, I have to simulate the UDT using a string". UDT, is dat zoiets als een "User Data Type" oid?

Met andere woorden: pretty fucked up.

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

embedded visual basic ..... mm wordt lastig verhaal nu ja.. als je alleen maar string kunt gebruiken... Kun je dan je byval de variabelen niet "parsen" van VB naar een eigengemaakte dll (in C++ geschreven) misschien?

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
henkleerssen schreef op 07 november 2002 @ 11:17:
embedded visual basic ..... mm wordt lastig verhaal nu ja.. als je alleen maar string kunt gebruiken... Kun je dan je byval de variabelen niet "parsen" van VB naar een eigengemaakte dll (in C++ geschreven) misschien?

Hehehe, sja.. zo thuis in C++ enzo ben ik niet. Ik kan in elk geval niet zelf DLL's schrijven enzo.. Ik ga maar eens kijken naar die String oplossing..

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Het kan nog wel hoor, het is alleen wat lastiger :)
Optellen van de grootte in bytes van alle members van CONNMGR_CONNECTIONINFO leert ons dat de struct 52 (of 80, indien de GUID 32 bytes in bslag neemt; daar ben ik nog niet uit) bytes lang is. De workaround wordt dan:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
' Constants
Const CONNMGR_PARAM_GUIDDESTNET = &H1
Const CONNMGR_PRIORITY_USERINTERACTIVE = &H8000
Const WM_APP_CONNMGR = 0
Const CONNINFO_SIZE = 52

' Function Declarations
Public Declare Function ConnMgrEstablishConnection Lib "cellcore" _
   (ByRef pConnInfo As String, ByRef phConnection As Long) As Long
Public Declare Function ConnMgrReleaseConnection Lib "cellcore" _
   (ByVal hConnection As Long, ByVal dwFlags As Long) As Long

Nu moeten we een manier hebben om de bitjes die de verschillende waarden vormen, op de juiste plaats in de string buffer te krijgen. Hiervoor heb ik eens een functie gemaakt:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
' Declaration:
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
   (ByRef pDst As Any, _
   ByRef pSrc As Any, _
   ByVal ByteLen As Long)

Public Function LongToBinary(ByVal Number As Long) As String
   Dim buf As String * 4
   CopyMemory ByVal buf, Number, 4
   LongToBinary = buf
End Function


Hiermee kun je de members van de (denkbeeldige) struct invullen. cbSize is de eerste member, deze kan als volgt gevuld worden:
Visual Basic .NET:
1
2
Dim connInfo As String * CONNINFO_SIZE
Mid$(connInfo, 1, 4) = LongToBinary(CONNINFO_SIZE)

De 1, 4 geeft aan dat 4 bytes vervangen moeten worden, te beginnen bij byte 1. De tweede member is dus Mid$(connInfo, 5, 4) , enzovoort.

[edit] Ik hoop alleen wel dat het PocketPC platform de RtlMoveMemory functie biedt :P Moet haast wel, zo'n belangrijke low-level functie mag niet ontbreken :P Anders zou je eventueel nog zelf een LongToBinary kunnen maken die met Chr$ en wat rekenwerk zelf de string samenstelt :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

wordt wel heel kunstmatig in VB... vind je niet? Maar goed.. misschien gaat het wel werken..

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

henkleerssen schreef op 07 november 2002 @ 11:43:
wordt wel heel kunstmatig in VB... vind je niet? Maar goed.. misschien gaat het wel werken..
Inderdaad... ik maak wel een wrapper DLL... Zo gebeurd :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

johnwoo schreef op 07 november 2002 @ 11:48:
[...]

Inderdaad... ik maak wel een wrapper DLL... Zo gebeurd :)
Over behulpzaam gesproken... nou nou...

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

henkleerssen schreef op 07 november 2002 @ 11:52:
[...]

Over behulpzaam gesproken... nou nou...
* johnwoo heeft niks te doen :)
Trouwens, hij zal het nog steeds zelf moeten compilen aangezien deze functies PPC-specific zijn :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
johnwoo schreef op 07 November 2002 @ 11:36:
Het kan nog wel hoor, het is alleen wat lastiger :)
Optellen van de grootte in bytes van alle members van CONNMGR_CONNECTIONINFO leert ons dat de struct 52 (of 80, indien de GUID 32 bytes in bslag neemt; daar ben ik nog niet uit) bytes lang is. De workaround wordt dan:
[knip]
Hiermee kun je de members van de (denkbeeldige) struct invullen. cbSize is de eerste member, deze kan als volgt gevuld worden:
Visual Basic .NET:
1
2
Dim connInfo As String * CONNINFO_SIZE
Mid$(connInfo, 1, 4) = LongToBinary(CONNINFO_SIZE)

De 1, 4 geeft aan dat 4 bytes vervangen moeten worden, te beginnen bij byte 1. De tweede member is dus Mid$(connInfo, 5, 4) , enzovoort.
:'( :'( Het is treurig gesteld met Microsoft.. Na wat zoeken in de reference heb ik alle waardes opgespoord (ook die niet per se ingevuld hoeven te worden). Ik draai het en jawel, een error: "Fixed length strings are not supported for Windows CE"
[edit] Ik hoop alleen wel dat het PocketPC platform de RtlMoveMemory functie biedt :P Moet haast wel, zo'n belangrijke low-level functie mag niet ontbreken :P Anders zou je eventueel nog zelf een LongToBinary kunnen maken die met Chr$ en wat rekenwerk zelf de string samenstelt :P


Hierover heb ik nog geen klachten gehad van de compiler, misschien is dit een van de weinige dingen die wel werken ;)

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
johnwoo schreef op 07 november 2002 @ 11:48:
[...]

Inderdaad... ik maak wel een wrapper DLL... Zo gebeurd :)

Dat zou echt helemaal _/-\o_ zijn!!! :D

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

ff
offtopic:
.. johwoo..is het probleem met winbar opgelost met meer dan 50 dagen uptime zijn van een winpc? (data declaratie probleem bij versie huppeldepup) .. btw kreeg een bug van iets van overflow... bij 2*50 dagen... daarna ging die rustig weer opnieuw tellen...

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Als ik alle fixed-string related zooi weghaal, gaat ie klagen over de declaration van die kernel32 sub:

Visual Basic:
1
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef pDst As Any, ByRef pSrc As Any, ByVal ByteLen As Long)


Error: "The Declare statement is incorrectly formatted. Please see the documentation for more information on the format of a Declare statement."

In de documentatie staat dit:
[Public] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]
Wel, daar voldoet het aan, dus wat zeikt het nou weer??

[edit]
Aha! De foutmeldingen zijn gewoon onduidelijk:
Declaring a variable using the As Any data type is unsupported
Fijnzo..

[edit 2]
Laatste nieuws!!
Op PocketPC 2002 is kernel32 dus niet beschikbaar. Ik weet niet of RtlMoveMemory ergens anders inzit.. ff zoeken

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Okee, ik heb een Visual Studio 6 DLL project gemaakt dat die ConnMgrEstablishConnection zo wrapt dat je alleen nog maar wat Longs mee hoeft te geven. Aangezien ik geen PocketPC heb (I'd wish... :P ) en op Win32 de connmgr.h, cellcore.lib en cellcore.dll niet beschikbaar zijn, kan ik het niet voor je compilen. Dat zul je zelf moeten doen. Ik weet niet hoe je ontwikkelt voor PocketPC, als dat niet kan in Visual Studio dan zul je de .c en .h file op een andere manier om moeten zetten in een .dll :P

Projectje: klik

[edit] Als er een SDK is om in VS6 voor PPC te ontwikkelen, dan zou ik het natuurlijk wel kunnen compilen :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

henkleerssen schreef op 07 november 2002 @ 11:59:
ff
offtopic:
.. johwoo..is het probleem met winbar opgelost met meer dan 50 dagen uptime zijn van een winpc? (data declaratie probleem bij versie huppeldepup) .. btw kreeg een bug van iets van overflow... bij 2*50 dagen... daarna ging die rustig weer opnieuw tellen...
Ik gebruik nog steeds GetTickCount om de uptime in milliseconden op te vragen, dus 49,nogwat dagen is nog steeds het maximum. Ik weet dat er andere manieren zijn om de uptime te bepalen, maar het moet wel op alle Win32 platforms draaien (en dat doen de alternatieven voor GetTickCount niet).

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

johnwoo schreef op 07 november 2002 @ 12:33:
[...]

Ik gebruik nog steeds GetTickCount om de uptime in milliseconden op te vragen, dus 49,nogwat dagen is nog steeds het maximum. Ik weet dat er andere manieren zijn om de uptime te bepalen, maar het moet wel op alle Win32 platforms draaien (en dat doen de alternatieven voor GetTickCount niet).
dus dat winbar uptime probleem blijf je houden ook als je gewoon je eigen aangevoerde code
code:
1
2
3
4
Type LARGE_INTEGER
   LowPart As Long
   HighPart As Long
End Type

gebruikt om gettickcount in te zetten?
Ik kon deze bug btw niet zo snel vinden in je bug list (is ook niet severe of zo)..
Maar dat allemaal ff terzijde.. :)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

henkleerssen schreef op 07 november 2002 @ 13:13:
[...]

dus dat winbar uptime probleem blijf je houden ook als je gewoon je eigen aangevoerde code
code:
1
2
3
4
Type LARGE_INTEGER
   LowPart As Long
   HighPart As Long
End Type

gebruikt om gettickcount in te zetten?
Ik kon deze bug btw niet zo snel vinden in je bug list (is ook niet severe of zo)..
Maar dat allemaal ff terzijde.. :)
GetTickCount heeft geen argumenten, maar geeft gewoon een 32-bits getal terug. En al zou de waarde via een parameter worden doorgegeven, de functie zou dan nog steeds alleen de eerste 32 bits vullen als ik hem een LARGE_INTEGER mee zou geven :) Ik kan Bill z'n implementatie niet veranderen ;) die is nu eenmaal 32 bits.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
johnwoo schreef op 07 november 2002 @ 12:28:
Okee, ik heb een Visual Studio 6 DLL project gemaakt dat die ConnMgrEstablishConnection zo wrapt dat je alleen nog maar wat Longs mee hoeft te geven. Aangezien ik geen PocketPC heb (I'd wish... :P ) en op Win32 de connmgr.h, cellcore.lib en cellcore.dll niet beschikbaar zijn, kan ik het niet voor je compilen. Dat zul je zelf moeten doen. Ik weet niet hoe je ontwikkelt voor PocketPC, als dat niet kan in Visual Studio dan zul je de .c en .h file op een andere manier om moeten zetten in een .dll :P

Projectje: klik

[edit] Als er een SDK is om in VS6 voor PPC te ontwikkelen, dan zou ik het natuurlijk wel kunnen compilen :)

Wow! Dank u! :)
Ik ben nu bezig met het aan de gang te krijgen. De ontwikkelomgeving is trouwens "MS Embedded Visual C++" en "MS Embedded Visual Basic". Die zitten in Microsoft Embedded Visual Tools 3. Voor de PocketPC heb je dan de PocketPC 2002 SDK nog nodig. Om te ontwikkelen en testen heb je dus geen PDA nodig, er zit een perfecte emulator bij :).

Maar ik ga eens kijken wat ik ermee kan. Op dit moment is Visual C++ aan het huilen dat er 102 errors in connmgr.h zitten ("C:\Program Files\Embedded Visual Tools 3\wce300\Pocket PC 2002\include\connmgr.h(12) : error C2059: syntax error : ','").. Fijn :P

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik kwam trouwens gister deze site over ppc development tegen:

http://www.devbuzz.com/

Wel 1 van betere die ik gezien heb.

  • Burat
  • Registratie: Oktober 1999
  • Niet online

Burat

bos wortels

Topicstarter
Weer een stapje verder.. Heb de code van MS gebruikt, het compilet nu. Alleen nog linking errors:
Compiling...
connmgr_wrapper.c
Linking...
connmgr_wrapper.obj : error LNK2019: unresolved external symbol _ConnMgrEstablishConnection referenced in function _MakeConnection
connmgr_wrapper.obj : error LNK2001: unresolved external symbol _IID_DestNetInternet
connmgr_wrapper.obj : error LNK2019: unresolved external symbol _ConnMgrReleaseConnection referenced in function _CloseConnection
corelibc.lib(pegwmain.obj) : error LNK2019: unresolved external symbol _WinMain referenced in function _WinMainCRTStartup
X86Dbg/connmgr_wrapper.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.

connmgr_wrapper.exe - 5 error(s), 0 warning(s)

Homepage | Me @ T.net | Having fun @ Procurios | Collega's gezocht: Webontwikkelaar PHP


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Die eerste 3 unresolved externals kun je oplossen door te linken met de juiste import lib (cellcore.lib). De laatste komt waarschijnlijk doordat je een 'gewoon' project hebt gemaakt ipv een DLL.
Ik zal die tools zo even installeren, kijken of ik het gecompiled krijg :)

edit:
Hmm, 300+ MB :o Dat wil je idd niet op je pocket PCtje zetten :P

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 08:40

johnwoo

3S-GTE

Okee, had het vrij snel aan de praat :) Die Embedded Tools en PPC emulator zijn best koel :)

Projectje: klik
(De DLL zit er ook al bij, voor x86 en ARM, dus je hoeft waarschijnlijk niet meer te compilen ;) )

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1

Pagina: 1