⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex32a.h

📁 不好意思
💻 H
字号:
// Ex32a.h

#pragma once

using namespace System;

#using <System.DLL>
#using <System.Drawing.DLL> 
#using <System.Windows.Forms.DLL>
#using <System.Runtime.Remoting.DLL>

using namespace System;
using namespace System::Collections;

namespace Ex32a
{

// C++ Assembly full of managed types...
public __value enum DaysOfTheWeek {
	Monday, 
	Tuesday, 
	Wednesday, 
	Thursday, 
	Friday, 
	Saturday, 
	Sunday
};

public __value struct AManagedValueStruct {
	int m_n;
	double m_x;
	String* m_str;

	AManagedValueStruct() {
		m_n = 0;
		m_x = 1.1;
		m_str=new String("Hi there from AManagedValueStruct");
	}

	void Method1() {
		Console::WriteLine("Called AManagedValueStruct::Method1()");
	}
};

public __gc struct AManagedGcStruct {
	AManagedGcStruct() {
		m_str=new String("Hi there from AManagedGcStruct");
	}
	~AManagedGcStruct() {
		System::Console::WriteLine("AManagedStruct Going Away\n");
	}
	void Method1() {
		Console::WriteLine("Called AManagedGcStruct::Method1()");
	}
	int m_n;
	double m_x;
	String* m_str;
};

public __gc __interface IPerson {
	void Eat();
	void Sleep();
	void Work();
};

public __gc class SoftwareDeveloper : public IPerson{
	~SoftwareDeveloper() {
		System::Console::WriteLine("Finalize called for SoftwareDeveloper");
	}
	void Eat() {
		System::Console::WriteLine("Eat pizza");
	}
	void Sleep() {
		System::Console::WriteLine("Sleep during the day");
	}
	void Work() {
		System::Console::WriteLine("Work during the night");
	}
};

public __gc class DotCOMVP : public IPerson {
	~DotCOMVP() {
		System::Console::WriteLine("Finalize called for DotCOMVP");
	}
	void Eat() {
		System::Console::WriteLine("Eat to Schmooze");
	}
	void Sleep() {
		System::Console::WriteLine("Never sleep");
	}
	void Work() {
		System::Console::WriteLine("Work to get Venture Capital");
	}
};

public __gc class Bum : public IPerson {
	~Bum() {
		System::Console::WriteLine("Finalize called for Bum");
	}
	void Eat() {
		System::Console::WriteLine("Eat sporadically");
	}
	void Sleep() {
		System::Console::WriteLine("Sleep whenever possible");
	}
	void Work() {
		System::Console::WriteLine("Work?");
	}
};

public __delegate void AManagedDelegate(String* strMessage);

public __gc __interface IAManagedInterface {
	void MethodA();
	int MethodB();
};

public __gc class AManagedClass : public IAManagedInterface {

	int m_n;
	int m_nSize;
	double m_f;
	String *m_str;

	DaysOfTheWeek m_DayOfWeek;
	ArrayList *m_rgManagedArray;

public:

	AManagedClass() {
		m_str = new String("This is AManagedClass\n");
		m_DayOfWeek = Friday;
	}

	~AManagedClass() {
		System::Console::WriteLine("AManagedClass going away\n");
	}

	__property int  get_Size() {
		return m_nSize;
	}

	__property void set_Size(int value) {
		m_nSize = value;
	}

	void MethodA() {
		Console::WriteLine("Here's some managed C++ code. This is MethodA.");
	}

	int MethodB()  {
		Console::WriteLine("Here's some managed C++ code. This is MethodB.");
		return 0;
	}

	void FillArray() {
		m_rgManagedArray = new ArrayList();

		Console::WriteLine("Creating a DotCOMVP");
		m_rgManagedArray->Add(new DotCOMVP());
		Console::WriteLine("Creating a Bum");
		m_rgManagedArray->Add(new Bum());
		Console::WriteLine("Creating a Software Developer");	
		m_rgManagedArray->Add(new SoftwareDeveloper());
	}


	void ShowArray() {
		Console::WriteLine();	
		if(m_rgManagedArray) {
			for(int i = 0; i < m_rgManagedArray->Count; i++) {
				Console::Write("Type: ");
				Console::WriteLine((m_rgManagedArray->get_Item(i))->GetType()->ToString());
				IPerson* person;
				person = __try_cast<IPerson*>(m_rgManagedArray->get_Item(i));
				person->Eat();
				person->Work();
				person->Sleep();
				Console::WriteLine();	
			}
		}
	}

	void UseDelegate(AManagedDelegate *d) {
		d->Invoke("This is called through the delegate...");
	}

};

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -