2

ユーザーが Web カメラの物理スナップショット ボタンを押すたびに、C# コードで検出したいと考えています。

ウェブカメラ自体のソフトウェア アプリケーションに、さまざまな機能を含む dll () があることを発見し、emDLL.dllDependency 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 関数を呼び出す方法があるかどうかを知る必要があります。

ありがとうございます。

4

0 に答える 0