How to transfer IVectorView<InkStroke> in C++/CX

115 Views Asked by At

scenario: I would like to exchange InkStroke between devices running on the same LAN.

Step1: collect all the strokes drawn on the screen from the client:

// Send strokes to a remote server.
strokesToReplay = inkCanvas->InkPresenter->StrokeContainer->GetStrokes();
const int sz = sizeof(strokesToReplay);
char msgToSend[sz];
memcpy(msgToSend, &strokesToReplay, sz);
send(tcpClient.sockfd, msgToSend, sz, 0);

Step2: receive data from the server part:

// tcpServer is an instance of TCPServer, which contains
// a function that calls listen -> accept
// to establish a connection with the client
bytesRecv = tcpServer.recvFromClient();
// Received data was storaged in TCPServer::buffer (char buffer[16384])

What I would like to do is cast the data in the buffer into IVectorView. So that it is possible to iterate InkStroke from it like:

for (InkStroke^ inkStroke : buffer) {
    ... to do
}

But here is the question: how can I cast char * to IVectorView?

I've tried memcpy() and static_cast. But since there is no proper memory allocated in IVectorView, memcpy() will destroy the whole program.

static_cast() won't work with IVectorView.

Now I am thinking about copying the data into the clipboard, then calling the API provided by Microsoft that gets data from the clipboard and cast it into strokes automatically. But I Do Not Know If This Works Or Not... Is there any advice that you guys can give me? Thank you.

0

There are 0 best solutions below