【问题标题】:HowTo use oldest DLL on VS2010 c# project如何在VS2010 c#项目中使用最新的DLL
【发布时间】:2014-11-06 08:52:04
【问题描述】:

我需要在最新的 VS2010 c# 项目中引用最旧的 DLL(不是 .Net DLL)。 DLL 文档向我展示了如何使用 ReadObject 函数:

MyDll rc=ReadObject (HEQUIP hEquip, UCHAR uchSegment, UCHAR uchType, 给我们留言首先, USHORT usQty, PUCHAR pValue);

同时展示如何在 VB6 项目中使用:

Declare Function ReadObject Lib "MyDll.dll" (ByVal DriverId As Integer, ByVal uchSegment As Byte, ByVal uchType As Byte, ByVal usFirst As Integer, ByVal usQty As Integer, ByRef pValue As Any) As Integer

谁能解释我如何在 c# 项目中引用 DLL?还有关键字“ByVal”和“ByRef”在 c# 语言上的正确转换是什么? 非常感谢您的任何建议

跳跃者

【问题讨论】:

    标签: c# visual-studio-2010 dll


    【解决方案1】:

    我假设“最旧的 DLL”是指本机 DLL。为此,您需要使用P/Invoke

    确保 DLL 位于系统可以找到它的位置。然后,像这样导入函数:

    [DllImport("MyDll.dll"])
    private static int ReadObject(...);
    

    您需要使用上述链接教程中概述的约定来传递参数。我的第一枪是:

    [DllImport("MyDll.dll"])
    private static int ReadObject(int driverId, byte segment, byte type, int first, int qty, ref byte value);
    

    ByValByRef 在 C# 中无效。您需要省略ByVal 并将ByRef 更改为ref

    【讨论】:

    • 我已经尝试过您的建议。我已将 .exe 和 MyDll.dll 文件复制到同一个文件夹中,然后运行我的应用程序。尝试使用 ReadObject 函数时出现此错误:“无法加载 DLL 'MyDll.dll':我找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)”} System.DllNotFoundException。有什么想法??
    • 修复了我的回答中的属性。也许您的 DLL 依赖于其他 DLL?
    • 不,DLL 是独立的。 “修复了我的答案中的属性”是什么意思?谢谢
    • 我忘记在DllImport 属性中包含要加载的DLL 的名称。我在回答中改变了这一点。
    • 更新 ...我在 .DLL 文档中读到,有时将库称为“MyDll.dll”和其他一些“My Dll.dll”(“My”和“Dll”之间的空格.dll”)。我尝试将 dll 从“MyDll.dll”重命名为“My Dll.dll”,现在使用 [DllImport("My Dll.dll"]) 工作正常。我不知道为什么....(可能是 .DLL 内部引用)。谢谢 Thorsten Dittmar
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多