|
1 // Dies ist die Haupt-DLL. |
|
2 |
|
3 #include "stdafx.h" |
|
4 #include <stdio.h> |
|
5 |
|
6 #include "toolkit.h" |
|
7 |
|
8 #using "UIcore.dll" |
|
9 |
|
10 static UIcallback startup_func; |
|
11 void *startup_data; |
|
12 static UIcallback open_func; |
|
13 void *open_data; |
|
14 static UIcallback exit_func; |
|
15 void *exit_data; |
|
16 |
|
17 public ref class AppCallbacks : public UI::IApplicationCallbacks { |
|
18 public: |
|
19 UIcallback startupFunc = NULL; |
|
20 void *startupData = NULL; |
|
21 UIcallback openFunc = NULL; |
|
22 void *openData = NULL; |
|
23 UIcallback exitFunc = NULL; |
|
24 void *exitData = NULL; |
|
25 |
|
26 virtual void __clrcall OnStartup() { |
|
27 if (startupFunc) { |
|
28 startupFunc(NULL, startupData); |
|
29 } |
|
30 } |
|
31 virtual void __clrcall OnOpen() { |
|
32 if (openFunc) { |
|
33 openFunc(NULL, openData); |
|
34 } |
|
35 } |
|
36 virtual void __clrcall OnExit() { |
|
37 if (exitFunc) { |
|
38 exitFunc(NULL, exitData); |
|
39 } |
|
40 } |
|
41 }; |
|
42 |
|
43 |
|
44 void* ObjectToPtr(Object ^obj) { |
|
45 GCHandle handle = GCHandle::Alloc(obj); |
|
46 IntPtr pointer = GCHandle::ToIntPtr(handle); |
|
47 return pointer.ToPointer(); |
|
48 } |
|
49 |
|
50 Object^ PtrToObject(void *ptr) { |
|
51 GCHandle h = GCHandle::FromIntPtr(IntPtr(ptr)); |
|
52 Object^ object = h.Target; |
|
53 //h.Free(); |
|
54 return object; |
|
55 } |
|
56 |
|
57 // EventWrapper |
|
58 |
|
59 ObjEventWrapper::ObjEventWrapper(UIcallback callback, void *eventdata) { |
|
60 this->callback = callback; |
|
61 this->eventdata = eventdata; |
|
62 action = gcnew Action<IntPtr>(this, &ObjEventWrapper::Callback); |
|
63 } |
|
64 |
|
65 Action<IntPtr>^ ObjEventWrapper::GetAction() { |
|
66 return action; |
|
67 } |
|
68 |
|
69 void ObjEventWrapper::Callback(IntPtr uiobj) { |
|
70 if (callback) { |
|
71 callback(uiobj.ToPointer(), eventdata); |
|
72 } |
|
73 } |
|
74 |
|
75 |
|
76 EventWrapper::EventWrapper(UIcallback callback, void *eventdata) { |
|
77 this->callback = callback; |
|
78 this->eventdata = eventdata; |
|
79 } |
|
80 |
|
81 void EventWrapper::Callback(Object ^sender, RoutedEventArgs ^e) { |
|
82 if (callback) { |
|
83 callback(NULL, eventdata); |
|
84 } |
|
85 } |
|
86 |
|
87 |
|
88 |
|
89 UI_EXPORT void __stdcall UIinit(char *appname) { |
|
90 UI::Application ^app = UI::Application::GetInstance(); |
|
91 app->Name = gcnew String(appname); |
|
92 } |
|
93 |
|
94 UI_EXPORT void __stdcall UIonstartup(UIcallback f, void *userdata) { |
|
95 startup_func = f; |
|
96 startup_data = userdata; |
|
97 } |
|
98 |
|
99 UI_EXPORT void __stdcall UIonopen(UIcallback f, void *userdata) { |
|
100 open_func = f; |
|
101 open_data = userdata; |
|
102 } |
|
103 |
|
104 UI_EXPORT void __stdcall UIonexit(UIcallback f, void *userdata) { |
|
105 exit_func = f; |
|
106 exit_data = userdata; |
|
107 } |
|
108 |
|
109 UI_EXPORT void __stdcall UImain() { |
|
110 AppCallbacks ^ac = gcnew AppCallbacks(); |
|
111 ac->startupFunc = startup_func; |
|
112 ac->startupData = startup_data; |
|
113 ac->openFunc = open_func; |
|
114 ac->openData = open_data; |
|
115 ac->exitFunc = exit_func; |
|
116 ac->exitData = exit_data; |
|
117 |
|
118 UI::Application ^app = UI::Application::GetInstance(); |
|
119 app->callbacks = ac; |
|
120 |
|
121 Thread ^thread = app->Start(); |
|
122 thread->Join(); |
|
123 } |
|
124 |
|
125 UI_EXPORT void __stdcall UIshow(gcroot<UI::MainWindow^> *window) { |
|
126 (*window)->ShowWindow(); |
|
127 } |