【问题标题】:How do I use a DLL function in C# without adding the DLL as reference?如何在 C# 中使用 DLL 函数而不添加 DLL 作为参考?
【发布时间】:2015-07-13 11:05:23
【问题描述】:

我正在尝试使用无法通过 Visual Studio 添加为引用的 DLL 中的函数(出现“无法添加引用”的消息)。但是,我从 DLL 的创建者那里得到了指示,他们建议我在 VB.Net 中像这样使用它们:

Private Declare Function Prn_Init Lib "VAx_VPOS396_APPAPI.dll" () As Integer

这行得通,但现在我想用 C# 编写一个程序。如何将该声明“翻译”为 C#?

附加:在 C++ 中,声明位于 *.h 文件中,其中包含以下几行:

#ifndef  _VPOS396DLL_API_H
#define  _VPOS396DLL_API_H
VPOS396_DLL_API     int Prn_Init(void);

【问题讨论】:

    标签: c# dll namespaces declaration


    【解决方案1】:

    您应该创建要在 C# 中使用的方法,将它们设为 extern 并添加 [DllImport] 属性。例如:

    [DllImport("kernel32.dll")]
    static extern bool Beep(uint dwFreq, uint dwDuration);
    

    见https://msdn.microsoft.com/en-us/library/aa984739%28v=vs.71%29.aspx

    【讨论】:

    • 我使用了这个(在“静态”之前添加了“私有”),但出现“无法 PInvoke”错误。按照这个速度,我可能不得不参考 C++ 示例。可以在 C# 文件中使用 C++ *.h 文件吗?以及如何?
    • @Yves 你得到的确切错误是什么?您是否将 dll 与 .NET 可执行文件放在同一文件夹中? dll 是否有其他依赖项,您是否也包含了它们?
    【解决方案2】:

    [System.Runtime.InteropServices.DllImport("VAx_VPOS396_APPAPI.dll")]

    public static extern unsafe Int32 Prn_Init(void);

    (“不安全”是可选的)

    【讨论】:

    • 请格式化您的代码并尽量避免只回答代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多