Hi, You could try something like this:
// CnvBuffLib.h
#pragma once
#include <memory.h>;
#include <string.h>;
using namespace System;
namespace CnvBuffLib
{
public __gc class ConvertBuffer
{
const char __nogc * const _buffer;
static const int bsize = 256;
public:
ConvertBuffer()
: \_buffer(new char \_\_nogc \[bsize\])
{
}
~ConvertBuffer()
{
delete \[\] \_buffer;
}
int GetPacket()
{
// sample of source data
char tmp\[\] = {'t', 'e', 's', 't'};
int tmplen = sizeof(tmp);
// clear buffer
char \_\_nogc \* \_bp = const\_cast<char\*>(\_buffer);
\_bp = static\_cast<char\*>(memset(\_bp, 0, bsize));
// copy data to buffer
memcpy(\_bp, tmp, tmplen);
return tmplen;
}
// this function copies native buffer to managed buffer (C# side)
SByte GetData() \_\_gc \[\]
{
int rlen = strlen(\_buffer);
if(rlen == 0)
return 0;
SByte result\[\] = new SByte\[rlen\];
char \_\_pin \* presult = &result\[0\];
memcpy(presult, \_buffer, rlen);
return result;
}
};
}