Я разрабатываю простой компилятор для .Net, в C ++, но у меня проблемы с моей системой включения, поэтому, похоже, не нашел способа узнать, какой метод я вызываю из dll, если это void, string, int …
Итак, мой включаемый системный вызов. NET DLL вызова
@include System
@include System:Windows:Forms
когда будет генерировать код, нужно знать, что это за метод …
Интересно, кто-нибудь знает способ получить тип методов, без использования инструментов .net
Один из способов, которым я подумал об этом: создать приложение на C # или другом языке .net для генерации TXT и этого txt, содержащего имена методов и их правильный тип, и во время компиляции я несу этот txt и пойман на время компиляции тип метода
Но я хочу знать, есть ли другой путь.
Об этой программе, о которой я говорил, это:
using namespace System;
using namespace System::IO;
using namespace System::Reflection;
ref class Reflector
{
public:
void LoadAndReflect(String^ assemblyFileName)
{
Assembly^ assembly = Assembly::Load(assemblyFileName);
array<Type^>^ types = assembly->GetTypes();
StreamWriter^ sw = gcnew StreamWriter("mscorlib.txt");
for each(Type^ t in types)
{
array<MethodInfo^>^ methods = t->GetMethods();
for each(MethodInfo^ method in methods)
{
String^ base = method->ReturnType->ToString();
array<String^>^ auxBase = base->Split('.');
if(auxBase->Length > 1)
sw->WriteLine(String::Format("{0} <::> {1}", auxBase[1], method->Name));
else
sw->WriteLine(String::Format("{0} <::> {1}", auxBase[0], method->Name));
}
}
sw->Close();
}
};
int main(array<System::String ^> ^args)
{
Reflector^ ref = gcnew Reflector();
Console::WriteLine("Reflection on {0}", "mscorlib.dll");
ref->LoadAndReflect("mscorlib.dll");
return 0;
}
И во время компиляции я открываю этот текст и получаю тип метода
Задача ещё не решена.
Других решений пока нет …