C#导入的DLL函数名称case忽略

时间:2014-12-22 14:05:15

标签: c# winapi dll import dllimport

有没有办法从kernel32大写调用“IsWow64Process”函数?喜欢“ISWOW64PROCESS”?或完全降低像“iswow64process”?

如果没有,是否有任何黑客攻击来完成这项任务?谢谢!

2 个答案:

答案 0 :(得分:3)

C#是区分大小写的语言,但您可以按照自己喜欢的方式定义pinvoke调用,只需要保持一致即可。您可以在PInvoke调用中映射EntryPoint,并将函数定义为全部大写,如下所示:

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, EntryPoint = "IsWow64Process")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ISWOW64PROCESS([In] IntPtr processHandle,
     [Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process);

private void button1_Click_2(object sender, EventArgs e)
{
    bool is64;

    ISWOW64PROCESS(Process.GetCurrentProcess().Handle, out is64);

    MessageBox.Show(is64.ToString());
}

答案 1 :(得分:1)

DllImportAttribute.EntryPoint字段允许您指定导入函数的真实名称。

直接来自该链接的示例是两行,显示如何重命名MessageBox函数:

[DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "MessageBox")]
public static extern int MyNewMessageBoxMethod(IntPtr hWnd, String text, String caption, uint type);