微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 DLLImport 和 dnlib

如何解决使用 DLLImport 和 dnlib

我有一个要使用 dnlib 修改的 C# 项目。 用 dnspy 修改,我可以添加代码就好了。 但是,我无法找到将 DLLImport 添加到 dnlib 中的方法,并且所有搜索都没有结果。 我怎么能把它拉下来?甚至可以做到吗?

编辑:我翻阅了 dnSpy 的源代码并找到了一种方法。 我把它放在这里让每个人都能看到它:

var _loadedEXE = ModuleDefMD.Load("EXE.exe");
var _dllReference = new ModuleRefUser(_loadedEXE,"DLL_NAME.dll");

var _flagsDLL = MethodAttributes.PinvokeImpl | MethodAttributes.Public | MethodAttributes.Static;
var _flagsPDLL = MethodImplAttributes.PreserveSig;

var _mapDLL = new ImplMapUser(_dllReference,"",PInvokeAttributes.CallConvCdecl);
            
var _method = new MethodDefUser("METHOD_NAME",MethodSig.CreateStatic(_loadedEXE.CorLibTypes.Int32,_loadedEXE.CorLibTypes.Int32),_flagsPDLL,_flagsDLL);
_method.ImplMap = _mapDLL;

这将导致 dnSpy 的以下解压缩:

[DllImport("DLL_NAME.dll",CallingConvention = CallingConvention.Cdecl)]
public static extern int METHOD_NAME(int);

我希望这对你有帮助,这样你就不会像我一样受苦了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。