This example demonstrates how to send packets from C++.
#define WIN32_LEAN_AND_MEAN
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#include <atlbase.h>
#include <stdio.h>
#include <time.h>
#import "PacketX.dll" no_namespace, named_guids
BYTE Packet[] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#define PacketSize sizeof(Packet)
int main(int argc, char* argv[])
{
CoInitializeEx(NULL,COINIT_MULTITHREADED);
IPktXPacketXPtr pPktX(__uuidof(PacketX));
LONG lCount= IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetCount();
for (int i=0; i < lCount; i++)
{
IPktXAdapterPtr pAdapter = IPktXAdapterCollectionPtr(pPktX->GetAdapters())->GetItem(i+1);
if (pAdapter->GetIsGood())
{
_bstr_t bstrtDesciption = pAdapter->GetDescription();
printf("(%d) %s\n",i+1,(char*)bstrtDesciption);
}
}
pPktX->PutAdapter(NULL);
while (pPktX->GetAdapter() == NULL)
{
char buffer[256];
printf("Choose adapter#");
try { pPktX->PutAdapter(IPktXAdapterCollectionPtr(
pPktX->GetAdapters())->GetItem(atoi(gets(buffer)))); }
catch ( _com_error& ) {}
}
LPSAFEARRAY psa = SafeArrayCreateVector(VT_VARIANT,0,PacketSize);
LPVARIANT rgElems;
SafeArrayAccessData(psa,(LPVOID*)&rgElems);
for (i=0; i < PacketSize; i++)
{
VariantInit(&rgElems[i]);
V_VT(&rgElems[i])=VT_UI1;
V_UI1(&rgElems[i])=Packet[i];
}
VARIANT Buffer;
VariantInit(&Buffer);
Buffer.vt = VT_VARIANT|VT_ARRAY;
Buffer.parray = psa;
IPktXAdapterPtr(pPktX->GetAdapter())->SendPacket(Buffer, CComVariant(100));
SafeArrayUnaccessData(psa);
SafeArrayDestroy(psa);
pPktX = NULL;
CoUninitialize();
return 0;
}