Как создать DLL, которая будет использоваться в C #

У меня есть плата 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, чтобы понять, что я сделал до сих пор. С уважением.

9
задан Oğuz Sezer 28 October 2011 в 06:32
поделиться