如何创建将在C#中使用的DLL

Oğu*_*zer 9 c# dll compact-framework beep windows-ce

我有运行Win CE的ICOP VDX-6354板.我正试图从我的C#程序中控制电路板的蜂鸣器.我尝试了所有的playound等"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;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以在电路板的数据表中找到.我想将它编译为DLL,然后在我的C#程序中调用它

[DllImport("Buzzer.dll", EntryPoint = "MyBeep")]
public static extern void MyBeep(uint dwFreq, uint dwDuration);
Run Code Online (Sandbox Code Playgroud)

我编译时使用了如下的前缀:

extern "C" __declspec(dllexport) bool MyBeep(DWORD dwFreq, DWORD dwDuration)
Run Code Online (Sandbox Code Playgroud)

所以希望我能够控制蜂鸣器.我的问题是我无法成功编译它.我按照这里的步骤,但它没有帮助我.

我应该一步一步做什么?

编辑:

我想我构建了DLL.我尝试了另一种方法来构建这里找到的DLL .

现在,我将DLL复制到我的C#启动项目的Debug文件夹(该项目的其他DLL也在此文件夹中).然后我尝试通过以下方式从我的C#项目中的MyBeep.DLL调用MyBeep函数:

[DllImport("MyBeep.dll", EntryPoint = "MyBeep")]
public static extern bool MyBeep(UInt32 dwFreq, UInt32 dwDuration);
Run Code Online (Sandbox Code Playgroud)

但它给出了以下例外.

找不到PInvoke DLL'MyBeep.dll'.

我错过了什么吗?请检查我上面给出的链接,以便构建DLL以了解到目前为止我做了什么.问候.

小智 0

即使错误消息另有提示,您也应该检查导出函数的名称。对于Win32我总是使用这个工具。对于 CE dll,也许DUMPBIN /EXPORTS有效。

函数名称很可能被称为__MyBeep: 我相信这个前缀是 C 约定。