IPacket
Aktualisiert: November 2007
Enthält Daten und wird von Objekten verwendet, die IDevicePacketStream zum Übertragen von Daten zwischen einer Geräte-Agent-Anwendung und einem Desktopcomputer implementieren.
IPacket : public IUnknown
Methoden
Methode |
Beschreibung |
---|---|
Ruft die Gesamtanzahl der Datenobjekte im Paket ab. |
|
Überprüft, ob der interne Iterator das Ende des Pakets erreicht hat. |
|
Liest einen booleschen Wert aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Liest ein Byte aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Liest ein Bytearray aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Liest eine ganze Zahl aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Liest ein Zeichen aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Gibt den Datentyp des aktuellen Objekts im Paket als Enumerationswert zurück. |
|
Liest eine Zeichenfolge aus dem Objekt und verweist den internen Iterator auf das nächste Datenobjekt im Paket. |
|
Setzt den internen Iterator des Pakets zurück, um auf das erste Datenobjekt im Paket zu verweisen. Beim nächsten Lesevorgang wird das erste Datenobjekt im Paket gelesen. |
|
Schreibt einen booleschen Wert in das Objekt. |
|
Schreibt ein Byte in das Objekt. |
|
Schreibt ein Bytearray in das Objekt. |
|
Schreibt ein Zeichen in das Objekt. |
|
Schreibt eine ganze Zahl in das Objekt. |
|
Schreibt eine Zeichenfolge in das Objekt. |
Hinweise
Um ein Objekt abzurufen, durch das diese Schnittstelle implementiert wird, verwenden Sie GetNewPacket.
Objekte, durch die diese Schnittstelle implementiert wird, können nur Objekte vom Typ byte, byte[], string, int und char enthalten. Sie ist nicht zum Lesen und Schreiben benutzerdefinierter Objekte erweiterbar. Benutzer können jedoch weiterhin benutzerdefinierte Objekte mit dem Stream übertragen, indem Sie entweder den benutzerdefinierten Datentyp in elementare Datentypen unterteilen oder die benutzerdefinierten Datentypen in ein Bytearray serialisieren.
Beispiel
Im folgenden Beispiel wird eine Geräte-Agent-Anwendung dargestellt, durch die ein Paket auf den Desktop geschrieben und ein Paket vom Desktop gelesen wird.
#include "stdafx.h"
// Custom implementation of IAgentTransportShutdownCallback
class MyShutdownCallback: public IAgentTransportShutdownCallback
{
private:
long ref;
public:
HRESULT STDMETHODCALLTYPE Shutdown(IUnknown *in_pUnknown)
{
// Add your cleanup code here
MessageBox(NULL,_T("conmanclient2 exited"),_T("conmanclient exited"),0);
return 0;
}
// Must implement members from IUnknown
HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
return 0;
}
ULONG STDMETHODCALLTYPE AddRef( void)
{
return InterlockedIncrement(&ref);
}
ULONG STDMETHODCALLTYPE Release( void)
{
if(InterlockedDecrement(&ref) == 0)
{
delete this;
return 0;
}
return ref;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// Load the Device Agent Transport Library
HINSTANCE hmod;
hmod = LoadLibrary(L"DeviceAgentTransport.dll");
// Get an instance of IDeviceAgentTransport
GetDeviceAgentTransportFunc f1 = (GetDeviceAgentTransportFunc)
::GetProcAddress(hmod, L"GetDeviceAgentTransport");
IDeviceAgentTransport *pTransport = NULL;
f1(&pTransport);
// Register the callback with the Device Agent Transport
MyShutdownCallback *shutdownCallback = new MyShutdownCallback();
pTransport->RegisterShutdownCallback(shutdownCallback,shutdownCallback);
// Let the desktop application know that this remote agent was deployed successfully
// and that this remote agent will handle the supplied list of services.
LPCOLESTR szServiceIds[] = {L"F85E57BA-5AE9-4FF7-8433-6AB7D991D033"};
pTransport->AcknowledgeLaunch(1, szServiceIds);
// Open a communcation stream with desktop application on the service.
IDevicePacketStream *pStream = NULL;
pTransport->AcceptConnectionEx(szServiceIds[0], &pStream);
// Get an instance of IPacket
GetNewPacketFunc f2 = (GetNewPacketFunc) :: GetProcAddress(hmod, L"GetNewPacket");
IPacket *pPacket = NULL;
f2(&pPacket);
// Write a message and sent the packet.
pPacket->WriteBool(true);
pPacket->WriteByte(0xff);
pPacket->WriteChar('c');
pPacket->WriteInt32(1024);
pPacket->WriteString(L"Hello Desktop Computer");
pStream->Write(pPacket);
// Check for a packet while communication stream is connected.
f2(&pPacket);
VARIANT_BOOL connected;
pStream->IsConnected(&connected);
while(connected)
{
pStream->IsConnected(&connected);
VARIANT_BOOL available;
// If a packet is found, display the string.
pStream->IsPacketAvailable(&available);
if(available)
{
pStream->Read(&pPacket);
VARIANT_BOOL endofpacket;
pPacket->IsEndOfPacket(&endofpacket);
while (!endofpacket)
{
pPacket->IsEndOfPacket(&endofpacket);
DataTypeEnum datatype;
pPacket->ReadDataType(&datatype);
switch (datatype)
{
case DT_BYTE:
BYTE byteValue;
pPacket->ReadByte(&byteValue);
break;
case DT_INT32:
INT32 intValue;
pPacket->ReadInt32(&intValue);
break;
case DT_WIDECHAR:
wchar_t charValue;
pPacket->ReadChar(&charValue);
break;
case DT_BOOL:
VARIANT_BOOL boolValue;
pPacket->ReadBool(&boolValue);
break;
case DT_BYTEARRAY:
BYTE * buffer[100];
ULONG length;
pPacket->ReadBytes(buffer,&length);
break;
case DT_STRING:
LPWSTR string;
pPacket->ReadString(&string);
MessageBox(NULL, string,string,0);
break;
default:
break;
}
};
}
};
return 0;
}
Verwaltete Entsprechung
Microsoft.SmartDevice.DeviceAgentTransport.IPacket
Anforderungen
DeviceAgentTransport.h
Siehe auch
Weitere Ressourcen
Nicht verwaltete geräteseitige Device Connectivity-API für intelligente Geräte