C ++ сериализует класс - данные, передаваемые по именованному каналу, - десериализуется в C # - PullRequest
0 голосов
/ 04 июля 2018

То, что я пытаюсь достичь, это - C ++ DLL выполняет поиск устройств Bluetooth, когда находит один экземпляр класса и заполняет новый объект. Это должно быть сериализовано, отправлено по именованному каналу в вызывающую C # DLL, которая имеет поток, который читает из канала и обновляет пользовательский интерфейс. Отправка строки по каналу работает нормально, например SendDataToPipe (_T ("Phone \ n")); но мне нужно будет изменить тип параметра для обработки класса. Не уверен, как получить сериализацию и отправить результат по каналу. Эта ссылка Сериализация в C ++, а затем десериализация в C # выглядит хорошо для последней части моей головоломки. Модераторы, если это просто и непонятно, просто заблокируйте их, и я попробую еще раз. Благодарю.

UINT SendDataToPipe(LPTSTR data)
{
    DWORD numBytesWritten = 0;
    BOOL result = WriteFile(pipe, data, _tcslen(data) * sizeof(TCHAR), &numBytesWritten, NULL);

    if (result) 
        return numBytesWritten;
    else
        return -1;
}  

В заголовочном файле

class CFoundDevice : public CObject
{
public:
    CFoundDevice();
    ~CFoundDevice();
    DECLARE_SERIAL(CFoundDevice);

public:
    CString fdtype;
    CString fdname;

protected:

public:
    virtual void Serialize(CArchive& ar);

protected:
};

В файле cpp

#include "stdafx.h"
#include "FoundDevice.h"

IMPLEMENT_SERIAL(CFoundDevice, CObject, 1)

CFoundDevice::CFoundDevice()
{
    fdtype = "";
    fdname = "";
}

CFoundDevice::~CFoundDevice()
{
}

void CFoundDevice::Serialize(CArchive& ar)
{
    DWORD dwVersion = 0x00000000;

    if (ar.IsStoring())
    {
        ar << dwVersion;
        ar << fdtype;
        ar << fdname;
    }
    else
    {
        ar >> dwVersion;
        ar >> fdtype;
        ar >> fdname;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...