Win CE を実行している ICOP VDX-6354 ボードがあります。C# プログラムからボードのブザーを制御しようとしています。私はすべてのplaysoundなど「coredll.dll」プラットフォームが呼び出すことを試しました。それらのどれもこれまでに機能しませんでした。したがって、私の最後のチャンスは、独自の DLL を作成することです。
unsigned char inp(short addr)
{
unsigned char cValue;
_asm
{
mov dx, addr
in ax, dx
mov cValue, al
}
return cValue;
}
void outp(int addr, unsigned char val)
{
__asm
{
push edx
mov edx, DWORD PTR addr
mov al, BYTE PTR val
out dx, al
pop edx
}
}
bool MyBeep(DWORD dwFreq, DWORD dwDuration)
{
outp(0x43, 0xb6); // Set Buzzer
outp(0x42, (0x1234dc / dwFreq)); // Frequency LSB
outp(0x42, (0x1234dc / dwFreq) >> 8); // Frequency MSB
outp(0x61, inp(0x61) | 0x3); // Start beep
Sleep(dwDuration);
outp(0x61, inp(0x61) & 0xfc); // End beep
return TRUE;
}
上記のコードは、ボードのデータシートで入手できます。それをDLLとしてコンパイルしてから、C#プログラムで次のように呼び出したい
[DllImport("Buzzer.dll", EntryPoint = "MyBeep")]
public static extern void MyBeep(uint dwFreq, uint dwDuration);
コンパイル時に次のようにプレフィックスを使用しました。
extern "C" __declspec(dllexport) bool MyBeep(DWORD dwFreq, DWORD dwDuration)
うまくいけば、ブザーを制御できるようになります。私の問題は、コンパイルに失敗したことです。ここの手順に従いましたが、役に立ちませんでした。
段階的に何をすべきですか?
編集:
DLLをビルドしたと思います。ここで見つかった DLL をビルドする別の方法を試しました。
ここで、DLL を C# スタートアップ プロジェクトの Debug フォルダーにコピーしました (プロジェクトの他の DLL もこのフォルダーにあります)。次に、C# プロジェクトで MyBeep.DLL から MyBeep 関数を呼び出そうとします。
[DllImport("MyBeep.dll", EntryPoint = "MyBeep")]
public static extern bool MyBeep(UInt32 dwFreq, UInt32 dwDuration);
ただし、次の例外があります。
PInvoke DLL 'MyBeep.dll' が見つかりません。
何か不足していますか?上記のリンクをチェックして、これまでに行ったことを理解するために DLL をビルドするためにごまかしたことを確認してください。よろしく。