2013-10-05 100 views
1

假設我有一個ILASM庫下面的代碼:調用ILASM全局函數

.assembly extern mscorlib{} 
.assembly TestMe{} 
.module TestMe.dll 
.method public static void PrintMe() cil managed 
{ 
    ldstr "I'm alive!" 
    call void [mscorlib]System.Console::WriteLine(string) 
    ret 
} 

我如何可以調用從C#代碼全球PrintMe()函數?

+0

只需添加到從該代碼建成集的引用。現在,這一切都像你在C#中熟悉的那樣工作。 –

+0

如果我只是添加對.dll的引用,我的.cs代碼不會看到PrintMe()函數。 – user2341923

+0

您尚未編寫有效的IL,請使用ildasm.exe來查看IL的外觀。方法必須是類的一部分。 –

回答

2

您可以通過反射..但沒有任何真正有用的辦法:

var module = Assembly.LoadFile("path_to_dll.dll").GetModules()[0]; 
// the first and only module in your assembly 
var method = module.GetMethod("PrintMe"); 

method.Invoke(null, 
       BindingFlags.Public | BindingFlags.Static, 
       null, 
       null, 
       CultureInfo.CurrentCulture); // Prints "I'm alive!" to console. 
1

就我所知,你不能。 C#只能「知道」在類型中聲明的方法 - 而不是在頂層。將你的方法移動到一個類型中。