Anders Knive Lassen a5e224713a contrib: add .net bindings
DotRocket is a C++/CLI assembly that binds the C-api to Managed
objects for .NET.
2011-04-16 13:47:31 +02:00

47 lines
1.1 KiB
C++

// This is the main DLL file.
#include "stdafx.h"
#include "DotRocket.h"
#include "../../../sync/sync.h"
#include "../../../sync/track.h"
using System::Runtime::InteropServices::Marshal;
using DotRocket::Track;
using DotRocket::PlayerDevice;
private ref class PlayerTrack: public Track {
const sync_track *track;
public:
PlayerTrack(const sync_track *track): track(track) {}
virtual float GetValue(double time) override
{
return sync_get_val(track, time);
};
};
PlayerDevice::PlayerDevice(System::String ^name)
{
char *cname = (char *)(void *)Marshal::StringToHGlobalAnsi(name);
device = sync_create_device(cname);
tracks = gcnew Dictionary<String ^, Track ^>();
}
Track ^PlayerDevice::GetTrack(String^ name)
{
Track ^track;
if (!tracks->TryGetValue(name, track)) {
char *ctrackName = (char *)(void *)Marshal::StringToHGlobalAnsi(name);
track = gcnew PlayerTrack(sync_get_track(device, ctrackName));
Marshal::FreeHGlobal((System::IntPtr)ctrackName);
tracks->Add(name, track);
}
return track;
}
PlayerDevice::!PlayerDevice()
{
sync_destroy_device(device);
}