C ++序列化一个类-通过命名管道发送的数据-在C#中反序列化

时间:2018-07-03 22:31:30

标签: c# c++ serialization

我要实现的目标是- C ++ DLL搜索蓝牙设备,找到一个实例化一个类并填充新对象。这需要进行序列化,通过命名管道发送到具有线程从管道读取并更新UI的调用C#DLL。通过管道发送字符串可以正常工作,例如SendDataToPipe(_T(“ Phone \ n”));但是我将需要更改参数类型以处理类。不确定如何获取序列化结果以及如何通过管道发送结果。这个链接Serialize in C++ then deserialize in 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;
    }
}

0 个答案:

没有答案