Я пытаюсь достичь этого - C++ DLL ищет устройства bluetooth, при обнаружении одного создает экземпляр класса и заполняет новый объект. Его необходимо сериализовать, отправить по именованному каналу в вызывающую библиотеку C#, имеющую поток, который читает из канала и обновляет пользовательский интерфейс. Отправка строки по каналу работает нормально, например, 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;
}
}
Извините, мне следовало добавить - заголовок определения класса и файлы cpp находятся в собственной библиотеке DLL, и ссылка на эту dll добавлена в ссылки моей основной библиотеки DLL C++. Когда я добавляю строку CFoundDevice cfd; в основной C++ DLL указано, что CFoundDevice не определен. Думаю, это всего лишь первая проблема.





С какой проблемой вы столкнулись с этим кодом?