2009-10-26 5 views
3

Как создать панель ввода Math в C#?Пытается создать панель ввода Math в C#

Я попытался поместить его в dll и назвать его, но он сразу закрывается.

#include <stdafx.h> 
#include <atlbase.h> 
#include "micaut.h" 
#include "micaut_i.c" 

extern "C" __declspec(dllexport) int run() 
{ 
    CComPtr<IMathInputControl> g_spMIC; // Math Input Control 
    HRESULT hr = CoInitialize(NULL); 
    hr = g_spMIC.CoCreateInstance(CLSID_MathInputControl); 
    hr = g_spMIC->EnableExtendedButtons(VARIANT_TRUE); 
    hr = g_spMIC->Show(); 

    return hr; 
} 

Я вызываю функцию dll в C#, и панель всплывает, но сразу исчезает. Какие-либо предложения?

ответ

8

В проекте C# добавьте ссылку на библиотеку COM micautLib. Затем вы можете использовать следующий код (в C#):

MathInputControl ctrl = new MathInputControlClass(); 
ctrl.EnableExtendedButtons(true); 
ctrl.Show(); 

я не уверен, если это именно то, как вы должны сделать это, но это, кажется, работает чисто (полная программа).

using System; 
using System.Windows.Forms; 
using micautLib; 

namespace MathInputPanel 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      MathInputControl ctrl = new MathInputControlClass(); 
      ctrl.EnableExtendedButtons(true); 
      ctrl.Show(); 
      ctrl.Close +=() => Application.ExitThread(); 
      Application.Run(); 
     } 
    } 
} 
+0

Спасибо, бутон, работает как шарм. – Neosani

+0

Это не объясняет основную проблему или как этот код обращается к ней. Основная проблема заключается в том, что поток, создающий экземпляр Math Input Control, должен запускать цикл сообщений для отправки своих сообщений. Это важная деталь. – IInspectable