Mono.Cecil - Как я могу узнать имя DLL PInvoke? - PullRequest
0 голосов
/ 09 января 2019

Mono.Cecil предоставляет способ проверить, является ли метод pinvoke или нет с помощью method.IsPInvokeImpl, а также предоставляет дополнительную информацию с помощью method.PInvokeInfo. Как я могу узнать имя dll?

1 Ответ

0 голосов
/ 09 января 2019

IL для методов P / Invoke выглядит следующим образом (например, kernel32!LockFile):

.method assembly hidebysig static pinvokeimpl("kernel32.dll" lasterr winapi) 
    bool LockFile (
        class Microsoft.Win32.SafeHandles.SafeFileHandle handle,
        int32 offsetLow,
        int32 offsetHigh,
        int32 countLow,
        int32 countHigh
    ) cil managed preservesig 
{
}

Mono.Cecil отражает метаданные pinvokeimpl в классе PInvokeInfo, причем первая строка упакована как ModuleReference. Следовательно, method.PInvokeInfo.Module.Name дает имя DLL / dylib.

...