class CDemo
{
public:
std::string VerlantA (const char *chaine);
std::wstring VerlantW (const WCHAR *chaine);
int Moyenne (int *values, int count);
void Reverse (unsigned char *src, unsigned char *dst, int size);
};
public ref class CDemoWrapper
CDemo *m_pDemo;
CDemoWrapper();
~CDemoWrapper();
String^ VerlantA (String^ chaine);
String^ VerlantW (String^ chaine);
int Moyenne (array<int>^ values);
array<byte>^ Reverse (array<byte>^ values);
#include "stdafx.h"
#include "wrapper.h"
#include <vcclr.h>
wrapper::CDemoWrapper::CDemoWrapper()
m_pDemo = new CDemo;
}
wrapper::CDemoWrapper::~CDemoWrapper()
delete m_pDemo;
String^ wrapper::CDemoWrapper::VerlantA(String^ chaine)
IntPtr tmp = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(chaine);
String^ result = gcnew String(m_pDemo->VerlantA((char *)tmp.ToPointer()).c_str());
System::Runtime::InteropServices::Marshal::FreeHGlobal(tmp);
return result;
String^ wrapper::CDemoWrapper::VerlantW(String^ chaine)
pin_ptr<const wchar_t> tmp = PtrToStringChars(chaine);
return gcnew String(m_pDemo->VerlantW(tmp).c_str());
int wrapper::CDemoWrapper::Moyenne(array<int>^ values)
pin_ptr<int> tmp = &values[0];
return m_pDemo->Moyenne(tmp, values->Length);
array<byte>^ wrapper::CDemoWrapper::Reverse (array<byte>^ values)
// En passant par une copie
unsigned char *tmp = new unsigned char[values->Length];
pin_ptr<unsigned char> src = &values[0];
m_pDemo->Reverse(src, tmp, values->Length);
array<byte>^ result = gcnew array<byte>(values->Length);
System::Runtime::InteropServices::Marshal::Copy(System::IntPtr(tmp), result, 0, values->Length);
delete[] tmp;
static void Main(string[] args)
wrapper.CDemoWrapper demo = new wrapper.CDemoWrapper();
int[] test = new int[] { 3, 4, 5 };
Console.WriteLine("Moyenne = {0}", demo.Moyenne(test));
Console.WriteLine("Verlant = {0}", demo.VerlantA("verlant"));