我有一个想用 dnlib 修改的 C# 项目。用dnspy修改一下,我可以把代码加进去就好了。但是,我无法找到使用 dnlib 添加 DLLImport 的方法,并且所有搜索都失败了。我怎样才能做到这一点?甚至可以做到吗?
编辑:我挖掘了 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 的以下 decomp:
[DllImport("DLL_NAME.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int METHOD_NAME(int);
我希望这会对你有所帮助,这样你就不会像我一样受苦。