ユーザーが Web カメラの物理スナップショット ボタンを押すたびに、C# コードで検出したいと考えています。
ウェブカメラ自体のソフトウェア アプリケーションに、さまざまな機能を含む dll () があることを発見し、emDLL.dll
Dependency Walker を使用して、必要な機能を実行するエクスポートされた機能が含まれているかどうかを確認しました。はい、それには 1 つあり、その完全な名前は次のとおりです。int IsButtonPressed(void)
この問題に関するさまざまな回答を確認した結果、アンマネージ DLL の機能をテストするために、以下の C# コードを書くことができました。
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 関数を呼び出す方法があるかどうかを知る必要があります。
ありがとうございます。