C# 反编译使用extern关键字实现的方法

C# 反编译使用extern关键字实现的方法,c#,dll,decompiling,extern,reflector,C#,Dll,Decompiling,Extern,Reflector,当我用Reflector反编译dll文件时,我看到我需要的方法实现如下。这是什么意思?有可能看到它背后的源代码吗 [return: MarshalAs(UnmanagedType.BStr)] [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x3a)] public virtual extern string GetCOLDText([In] int PageN

当我用Reflector反编译dll文件时,我看到我需要的方法实现如下。这是什么意思?有可能看到它背后的源代码吗

[return: MarshalAs(UnmanagedType.BStr)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime), DispId(0x3a)]
public virtual extern string GetCOLDText([In] int PageNumber, [In] int Row, [In] int Column, [In, Optional, DefaultParameterValue(0x7fffffff)] int Length);

这意味着这是非托管(互操作)DLL中的一个方法。最有可能用C++和/或c

编写
您可以尝试反编译(使用其他工具,而不是Reflector),但这并不容易,结果也不会很好

看起来像是对非托管(可能是COM)dll的调用。因此reflector将无法对其进行反编译/反汇编;但是,如果您能够阅读x86汇编程序,您可能会有所收获。

这是您在使用Reflector查看由tlbimp.exe创建的COM互操作库时看到的。或者通过在IDE中从COM选项卡或浏览选项卡向COM服务器添加引用,同样

如果您查看包含此方法的外部类或接口,那么您将看到包含此方法的COM类或接口。它的重要属性是[ComImport],表示它是在另一个DLL和[Guid]中实现的,即所有重要的接口IID或coclass CLSID。COM类和接口由guid而不是名称唯一标识。CLSID guid存在于注册表中,
HKCR\CLSID\{guid}


这样的COM服务器几乎总是以非托管语言实现,C++是最典型的,但也是Delphi或VB6。在编译C++代码之后反编译是徒劳的,但是你可以用Dumpbin.exe / DISASH选项从中得到一些东西。需要汇编语言编程技能和大量的空闲时间。在许可协议中,它几乎总是被明确禁止的。

你的意思是它调用另一个DLL,对吗?我怎样才能找到另一个DLL,那么:)好问题,它通常列在一个属性中。不确定这一个是如何工作的。您完全正确,接口如下开始:[ComImport,TypeLibType((短)2),ClassInterface((短)0),Guid(“1CA8A500-E55C-11CF-9D38-00A02457680B”)]。但我不明白我怎么能找到“另一个DLL”?我想试着了解一下这个集合。