Tengo la placa ICOP VDX-6354 ejecutando Win CE. Estoy tratando de controlar el zumbador del tablero desde mi programa C#. Probé todo el playsound, etc. invoca la plataforma "coredll.dll". ninguno de ellos funcionó tan lejos. Así que mi última oportunidad es crear mi propia DLL.Cómo crear una DLL que se usará en C#
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;
}
El código anterior está disponible en la ficha técnica de la placa. Quiero compilarlo como un archivo DLL invocarla en mi programa en C# como
[DllImport("Buzzer.dll", EntryPoint = "MyBeep")]
public static extern void MyBeep(uint dwFreq, uint dwDuration);
he usado un prefijo de la siguiente manera cuando compilé:
extern "C" __declspec(dllexport) bool MyBeep(DWORD dwFreq, DWORD dwDuration)
Así que es de esperar que sería capaz de controlar la zumbador. Mi problema es que no podría ser exitoso compilarlo. Seguí los pasos here pero no me ayudó.
¿Qué debo hacer paso a paso?
EDIT:
creo que he construido la DLL. Intenté otra manera de construir el DLL found here.
Ahora, copié el archivo DLL a la carpeta de depuración de mi proyecto de inicio C# (otras DLL del proyecto también están en esta carpeta). Entonces trato de invocar la función de MyBeep MyBeep.DLL en mi proyecto de C# por:
[DllImport("MyBeep.dll", EntryPoint = "MyBeep")]
public static extern bool MyBeep(UInt32 dwFreq, UInt32 dwDuration);
pero da la siguiente excepción.
No se encuentra PInvoke DLL 'MyBeep.dll'.
¿E-cando algo? Por favor, compruebe los enlaces anteriores que hice trampa para construir el archivo DLL para comprender lo que hice hasta ahora. Saludos.
¿Qué falló? ¿Error de mensajes? ¿Cómo construiste? En resumen, más detalles por favor. –
+1 parece una pregunta muy real, no estoy seguro de por qué alguien votó para cerrar. –
simplemente no se compiló correctamente. Como dije en mi pregunta, seguí paso a paso el tutorial de "cómo hacerlo". Cuando traté de compilar, solicité "Ejecutable para la sesión de depuración". Y el único ejecutable disponible en Dropbox es RegSvr32. Cuando elijo RegSvr32 y continúo, dice uso: regsrv32 [/ u] [/ s] [/ n] [/ i] etc. en una pantalla de advertencia separada y no da ningún error en el compilador. –