annotate Examples/Cpp/HelloWorld.cpp @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 //@ example:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 //@ emit Emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 #include "stdafx.h"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using namespace System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using namespace NUnit::Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using namespace BLToolkit::Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using namespace BLToolkit::Reflection::Emit;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 namespace Examples {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 namespace Reflection {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 namespace Emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public ref class HelloWorld
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 interface class IHello
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 void SayHello(String ^toWhom);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 AssemblyBuilderHelper ^assembly = gcnew AssemblyBuilderHelper("HelloWorld.dll");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 EmitHelper ^emit = assembly
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 ->DefineType ("Hello", Object::typeid, IHello::typeid)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 ->DefineMethod(IHello::typeid->GetMethod("SayHello"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 ->Emitter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 // string.Format("Hello, {0} World!", toWhom)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 ->ldstr ("Hello, {0} World!")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 ->ldarg_1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 ->call (String::typeid, "Format", String::typeid, Object::typeid)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 // Console.WriteLine("Hello, World!");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 ->call (Console::typeid, "WriteLine", String::typeid)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 ->ret()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 Type ^type = emit->Method->Type->Create();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 IHello ^hello = (IHello^)TypeAccessor::CreateInstance(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 hello->SayHello("C++");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 }}}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57