У меня есть плата ICOP VDX-6354 под управлением Win CE. Я пытаюсь управлять зуммером платы из моей программы на C #. Я перепробовал все звуки и т. Д., Которые вызывает платформа 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 в папку Debug моего запускаемого проекта C # (другие DLL проекта также находятся в этой папке). Затем я пытаюсь вызвать функцию MyBeep из MyBeep.DLL в моем проекте C #:
[DllImport("MyBeep.dll", EntryPoint = "MyBeep")]
public static extern bool MyBeep(UInt32 dwFreq, UInt32 dwDuration);
Но это дает следующее исключение.
Не удается найти DLL PInvoke 'MyBeep.dll'.
Я что-то упускаю? Пожалуйста, проверьте приведенные выше ссылки, которые я обманул при создании библиотеки DLL, чтобы понять, что я сделал до сих пор. С уважением.