Вам необходимо создать класс-оболочку, который предоставляет определенные функции вашей игры.
Например. Эта функция в моей оболочке редактора игрового движка c ++.
extern "C" _declspec(dllexport) void SetPlayerPos(int id, const float x, const float y, const float z);
Затем в вашем приложении c # wpf вы можете создать статический класс, позволяющий вам использовать эти функции
[DllImport(editorDllName, CallingConvention = CallingConvention.Cdecl)]
public static extern void SetPlayerPos(int id, float x, float y, float z);
Вы должны будете иметь функции для вашей основной функциональности игрового движка через dll.
такие вещи, как
EditorMain
RenderFrame / Обновление
DXShutdown
Итак, вы можете вызвать editormain в конструкторе приложений wpf
System.IntPtr hInstance = System.Runtime.InteropServices.Marshal.GetHINSTANCE(this.GetType().Module);
IntPtr hwnd = this.DisplayPanel.Handle;
NativeMethods.EditorMain(hInstance, IntPtr.Zero, hwnd, 1, this.DisplayPanel.Width, this.DisplayPanel.Height);
Вам потребуется создать класс фильтра сообщений и инициализировать его также в конструкторе
m_messageFilter = new MessageHandler(this.Handle, this.DisplayPanel.Handle, this);
вот как может выглядеть ваш класс фильтра сообщений
public class MessageHandler : IMessageFilter
{
const int WM_LBUTTONDOWN = 0x0201;
const int WM_LBUTTONUP = 0x0202;
IntPtr m_formHandle;
IntPtr m_displayPanelHandle;
EngineDisplayForm m_parent;
public MessageHandler( IntPtr formHandle, IntPtr displayPanelHandle, EngineDisplayForm parent )
{
m_formHandle = formHandle;
m_displayPanelHandle = displayPanelHandle;
m_parent = parent;
}
public bool PreFilterMessage(ref Message m)
{
if (m.HWnd == m_displayPanelHandle || m.HWnd == m_formHandle)
{
switch (m.Msg)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
{
NativeMethods.WndProc(m_displayPanelHandle, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32());
if (m.Msg == WM_LBUTTONUP)
{
m_parent.SelectActor();
}
return true;
}
}
}
return false;
}
public void Application_Idle(object sender, EventArgs e)
{
try
{
// Render the scene
NativeMethods.RenderFrame();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
для получения выигрышных форм и взаимодействия wpf смотрите здесь
http://msdn.microsoft.com/en-us/library/ms742474.aspx