C ++ APIをC#でラップしました。このAPIは、提供されたメモリ位置をプログラム設定を表すバイト配列で埋めます。その状態を判断するには、ビット0を取得する必要があります。C++APIと使用法のドキュメントは次のとおりです。
DECL_FOOAPIDLL DWORD WINAPI FOO_GetVal(
VOID *Val, //pointer to memory where the data will be stored by the function
DWORD Len, //length of Val in bytes
DWORD Id //identification number of the parameter
);
これが私のC#ラッパーと呼び出しです(私が正しいと思うもの):
[DllImport(FOO_API, CharSet = CharSet.Auto)]
static public extern uint FOO_GetVal(IntPtr val, uint len, uint id);
IntPtr Ptr = Marshal.AllocHGlobal(5);
uint hr = NativeWrapper.FOO_GetVal(Ptr, 5, 1181);
var byteArray = new byte[5];
Marshal.Copy(Ptr, byteArray, 0, 5);
Marshal.FreeHGlobal(Ptr);
ビット0を取得するにはどうすればよいですか?
私は試しました(成功しませんでした):
bool b = GetBit(bytearray[0],0);
private bool GetBit(byte b, int bitnum)
{
return (b & (1 << nitnum)) != 0;
}