首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从setupapi.dll p/Invoke函数时引发EntryPointNotFound异常

尝试从setupapi.dll p/Invoke函数时引发EntryPointNotFound异常
EN

Stack Overflow用户
提问于 2011-08-11 08:36:21
回答 1查看 429关注 0票数 1
代码语言:javascript
复制
[Flags]
public enum DiGetClassFlags : uint
{
    Default         = 0x01,
    Present         = 0x02,
    AllClasses      = 0x04,
    Profile         = 0x08,
    DeviceInterface = 0x10
}

[StructLayout(LayoutKind.Sequential)]
public struct SpDeviceInfoData
{
    public uint Size;
    public Guid ClassGuid;
    public uint DevInst;
    public IntPtr Reserved;

    public SpDeviceInfoData(Guid classGuid, uint devInst)
    {
        Size = 0;
        ClassGuid = classGuid;
        DevInst = devInst;
        Reserved = IntPtr.Zero;
        Size = (uint)Marshal.SizeOf(this);
    }
}

public class SetupApi
{
    public const int SP_MAX_MACHINENAME_LENGTH = 263;

    [DllImport("setupapi.dll", CharSet=CharSet.Auto)]
    public static extern IntPtr SetupDiGetClassDevsEx(
        ref Guid classGuid,
        IntPtr enumerator,
        IntPtr hwndParent,
        DiGetClassFlags flags,
        IntPtr deviceInfoSet,
        IntPtr machineName,
        IntPtr reserved);

    [DllImport("setupapi.dll", SetLastError = true)]
    public static extern bool SetupDiEnumDeviceInfo(
        IntPtr deviceInfoSet, 
        uint memberIndex, 
        ref SpDeviceInfoData deviceInfoData);
}

我像这样使用上面的函数:

代码语言:javascript
复制
public class DisplayInformation
{
    public static string GetDisplayName()
    {
        Guid classMonitor = new Guid(0x4D36E96E, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);

        IntPtr deviceInfo = SetupApi.SetupDiGetClassDevsEx(
            ref classMonitor, 
            IntPtr.Zero, 
            IntPtr.Zero, 
            DiGetClassFlags.Present,
            IntPtr.Zero,
            IntPtr.Zero,
            IntPtr.Zero);

        if (deviceInfo == IntPtr.Zero)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error(), "SetupDiGetClassDevs failed.");
        }

        ...
    }
}

当调用SetupApi.SetupDiGetClassDevsEx时,它会抛出一个EntryPointNotFound异常。我无论如何也搞不懂为什么。有什么想法?我是不是在互操作描述中遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-12 06:39:17

我不小心将我的互操作dll命名为setupapi.dll。这阻止了系统找到真正的setupapi.dll。现在我觉得有点傻..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7019583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档