【问题标题】:How to use Lib like Visual Basic in C#如何在 C# 中像 Visual Basic 一样使用 Lib
【发布时间】:2013-06-13 12:41:43
【问题描述】:

我遇到了一个问题,我可以告诉你我需要帮助。我有一个库,其中包含我需要的一些方法。但是当我添加它作为参考时,抛出这个错误:

lib.dll 无法添加。请确保该文件是 可访问,并且它是有效的组件或 COM 组件。

我可以告诉你,我不知道是用哪种语言写的,但事实并非如此。我在我工作的一个项目中看到有人在 Visual Basic 中使用保留字 Lib 和相同的 Lib,这对他来说效果很好。他可以消耗 lib 的资源,但问题是他是用 Visual Basic 开发的,我对 Visual Basic 一无所知,只知道 C#

这就是他所做的:

Public Function Amethod Lib "theDLLfile" (ByVal s as String) As String...

问题是:这样做可以吗?如何参考和使用它的方法? Lib这个词有什么作用,怎么用?

我真的需要帮助。

小更新:

引用DLL时,url可以是绝对的还是相对的?

【问题讨论】:

  • 这是 P/Invoke。查看[DllImport] 属性。您将需要完整的原生签名。
  • @SLaks 也一样???

标签: c# vb.net dll


【解决方案1】:

这是在 VB 中执行 DllImport 的旧方法。您还忘记了“声明”关键字。 VB 代码应该是这样的:

Public Declare Function Amethod Lib "theDLLfile" (ByVal s as String) As String

C# 中的等价物是:

[System.Runtime.InteropServices.DllImport("theDLLfile")]
public static extern string Amethod(string s);

现在在 VB 中通常的做法是:

<System.Runtime.InteropServices.DllImport("theDLLfile")>
Public Shared Function Amethod(ByVal s As String) As String
End Function

【讨论】:

    【解决方案2】:

    使用[DllImport]

    例子:

    [DllImport("DllFile.dll", EntryPoint = "dllFunctionName"]
    public static extern string functionName (string s);
    

    【讨论】:

    • 方法名不能包含's.
    • 用您的方法名称替换“功能”。 (不要写')并且EntryPoint是您喜欢使用的dll中的FunctionName。
    【解决方案3】:

    听起来该库是本机库(即非托管代码,而不是 .NET)。您需要 P/Invoke 才能调用它。

    你可以找到这个here的基本介绍。

    您将需要一些附加信息(可能来自您同事的 VB 项目)来正确声明您要调用的库函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2011-05-17
      • 2017-11-25
      相关资源
      最近更新 更多