У меня есть приложение Visual Studio 2008 C ++, где мне нужно получить информацию из функции, которая принимает буфер переменного размера. Итак, у меня есть класс, который поддерживает этот тип с std::vector
и реализует оператор преобразования в тип, который я хочу.
class CMibIpForwardTable
{
public:
operator MIB_IPFORWARDTABLE* ()
{
return reinterpret_cast< MIB_IPFORWARDTABLE* >( &buffer_.front() );
}
ULONG size() const
{
return buffer_.size();
}
void resize( ULONG size )
{
buffer_.resize( size );
}
private:
std::vector< BYTE > buffer_;
};
CMibIpForwardTable Get( DWORD* error_code = NULL )
{
CMibIpForwardTable table;
ULONG size = 0;
DWORD ec = ::GetIpForwardTable( NULL, &size, FALSE );
if( ec == ERROR_INSUFFICIENT_BUFFER )
{
table.resize( size );
ec = ::GetIpForwardTable( table, &size, TRUE );
}
if( NULL != error_code && ec != 0 )
*error_code = ec;
return table;
}
Я бы хотел использовать его следующим образом:
CMibIpForwardTable table = Get();
// error: 'dwNumEntries' : is not a member of 'CMibIpForwardTable'
DWORD entries = table->dwNumEntries;
Есть ли хороший способ получить доступ к базовому типу MIB_IPFORWARDTABLE
? Или я застрял, делая что-то вроде этого:
MIB_IPFORWARDTABLE* t = table;
DWORD entries = t->dwNumEntries;
Спасибо,
PaulH