我有一个名为NativeMethods.cs的类,它包含所有extern方法:
internal static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool wow64Process);
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
internal static extern int RegOpenKeyEx(
IntPtr hKey,
string subKey,
int ulOptions,
int samDesired,
out int hkResult);
}
包含此类的程序集具有相应的.Moles文件。除了这一个之外,程序集中包含的所有其他类都可以正确地进行存根和存根。
我们可以使用MNativeMethods
来绕行。是否有针对班级名称的特殊情况" NativeMethods" (不大可能)?或者针对外部方法的特殊情况?
答案 0 :(得分:0)
Moles能够绕过对托管代码的调用。这个类显然没有处理托管代码。尝试手动为此类创建存根。这意味着创建一个INativeMethods接口,让NativeMethods实现INativeMethods,然后像往常一样使用接口作为存根。然后,Moles将从界面生成存根类型的SINativeMethods,用于测试项目。
答案 1 :(得分:0)
“因此,如果方法没有正文(例如抽象方法),我们就不能绕道而行。” - Moles Dev