C ++で.Net用の単純なコンパイラを開発していますが、インクルードシステムに問題があるため、dllから呼び出しているメソッドが void 、 string 、 int の場合、どのような種類のメソッドを呼び出すかを認識する方法が見つからないようです...だから、私のインクルードシステムは.net dll呼び出しを呼び出します
@include System
@include System:Windows:Forms
いつコードを生成するのか、知る必要があるのは、どのようなメソッドなのか...ツール.netを使用せずに、メソッドのタイプを取得する方法を誰かが知っているのだろうか
私が考えた 1 つの使用方法: 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;
}
そして、コンパイル時にその txt を開き、メソッドの型を取得します。