每当用户按下网络摄像头中的物理快照按钮时,我想在我的C#代码中进行检测。
我发现网络摄像头自己的软件应用程序有一个包含各种功能的dll(emDLL.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函数。
感谢所有人。