gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:59:40 26 4
gpt4 key购买 nike

我有运行 Win CE 的 ICOP VDX-6354 板。我正在尝试通过我的 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)

希望我能够控制蜂鸣器。我的问题是我无法成功编译它。我按照步骤 here但这对我没有帮助。

我应该怎么做?

编辑:

我想我构建了 DLL。我尝试了另一种构建 DLL 的方法 found here .

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

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

但它给出了以下异常。

Can't find PInvoke DLL 'MyBeep.dll'.

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

最佳答案

您有两个问题:

  1. 您需要构建 dll,而不是尝试和调试它。如果它与您的 C# 项目位于同一项目中,则将 C# 项目设置为启动项目(右键单击项目文件),否则您只需选择 Build 而不是 Start Debugging(如果您使用的是快捷方式这可能是 Ctrl+Shift+B [如果使用 C# 环境设置] 或 F7 [如果您使用 C++ 环境设置])。

  2. 您需要将 DLL 放在正确的位置。如果您想自动执行此操作,则只需向 C++ 项目添加一个构建后步骤(项目属性、构建操作(如果我没记错的话)和构建后),它会执行类似 copy "$(TargetPath)""$ (SolutionDir)\CsProj\bin\$(ConfigurationName)\*.*"

其中一些宏可能有点偏差,但您应该了解总体思路。

编辑:您还需要确保在 C# 项目之前构建 C++ 项目。右键单击您的 C# 项目文件,然后转到“项目依赖项”,然后在“依赖项”框中勾选 C++ 库。为确保构建后步骤正常运行,请尝试自行构建 C++ 项目并检查它是否将 DLL 复制到 C# 项目中的正确目录。如果没有,它将在输出窗口中标记错误。如果您按照该教程创建了一个 DLL,您应该没问题。

关于c# - 如何创建将在 C# 中使用的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7917805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com