我有运行 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 的链接,以了解我到目前为止所做的事情。问候。