我有一个运行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也在此文件夹中)。然后,我尝试通过以下方式从MyBeep.DLL在我的C#项目中调用MyBeep函数:
[DllImport("MyBeep.dll", EntryPoint = "MyBeep")]
public static extern bool MyBeep(UInt32 dwFreq, UInt32 dwDuration);
但是它会出现以下异常。
找不到PInvoke DLL 'MyBeep.dll'。
我是否遗漏了什么?请查看上面提供的链接以了解我迄今为止所做的事情。 谢谢。