2

每当用户按下网络摄像头中的物理快照按钮时,我都想在我的 C# 代码中进行检测。

我发现网络摄像头自己的软件应用程序有一个emDLL.dll包含各种功能的 dll ( ),我使用 Dependency Walker 来了解它是否包含执行我想要的导出功能。是的,它有一个,其完整的名字是int IsButtonPressed(void)

查看有关此问题的各种回复,我设法自己编写了下面的 C# 代码来测试该非托管 DLL 的功能:

using System;
using System.Runtime.InteropServices;

class PlatformInvokeTest3
{
    // EntryPoint is assigned with the mangled name of the exported unmangled function int CEM2800Prop::IsButtonPressed(void)
    [DllImport(@"emDLL.dll", EntryPoint = "?IsButtonPressed@CEM2800Prop@@QAEHXZ")]

    [return: MarshalAs(UnmanagedType.I4)]
    public static extern int IsButtonPressed();

    public static void Main()
    {
       int Aux;
       Aux = IsButtonPressed();

    }
}

问题是当代码到达调用函数的点时,出现异常,错误如下:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我需要知道我的代码有什么问题,以及是否有某种方法可以从我的 C# 代码中调用 emDLL.dll 函数。

谢谢大家。

4

0 回答 0