【问题标题】:How to call functions after adding DLL reference to a C# asp.net project将 DLL 引用添加到 C# asp.net 项目后如何调用函数
【发布时间】:2018-02-16 18:56:43
【问题描述】:

我有一个名为“MathLibrary”的 C++ dll 项目和一个名为“WebApplication1”的 C# asp.net 项目。我将项目“MathLibrary”添加到“WebApplication1”中,然后添加了对 MathLibrary.dll 的引用(如图所示)。但我无法调用 MathLibrary.dll 中的函数。我虽然必须在 .cs 文件的顶部添加“使用 MathLibrary”,但无法识别名称。如何从 MathLibrary.dll 中调用函数?

WebApplication1

MathLibrary.h

【问题讨论】:

  • 这里的实际问题是什么?

标签: c# asp.net dll


【解决方案1】:

托管

如果 MathLibrary.dll 是 .NET 程序集,您可以按如下方式解决该问题:

  • 在解决方案资源管理器(右侧)中,找到“WebApplication1”并右键单击“引用”节点。
  • 选择“添加参考”,然后选择“项目”(在左侧),然后选择“MathLibrary.dll”。

非托管

但是,从外观上看,MathLibrary.dll 不是 .NET 程序集。它似乎是一个标准的 Win32 DLL(我可以从 declspec(dllexport) 的使用中看出),这意味着它包含非托管代码和一系列符号和入口点(与公开类型的 .NET 程序集 DLL 不同)。如果是这种情况,设置参考将无济于事。使用 DLL 需要一个特殊的过程,因为它是非托管的。

要了解如何使用 .NET 中的非托管 DLL,请参阅 this article

重要的是:

使用 DllImportAttribute 来识别 DLL 和函数。用 static 和 extern 修饰符标记方法。

您的 C# 代码可能如下所示:

namespace WebApplication1
{
    class ExternalFunctions
    {
        [DllImport("MathLibrary.dll")]
        public static extern bool fibonacci_next();
    }

    class Program
    {
        static void Main()
        {
            //call it
            var foo = ExternalFunctions.fibonacci_next();
        }
    }
}

如果您遇到上述问题,您可能需要修改 MathLibrary.dll 导出其符号的方式(必须使用extern "C")。

另见How does Extern work in C#?

【讨论】:

  • 已经完成了。从图中可以看出,“MathLibrary”已经在“WebApplication1”的引用列表中。这就是我的观点,即使这样做,我仍然无法调用“MathLibrary”中的函数......为什么?
  • 我已根据您问题中的其他信息修改了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 2012-08-25
  • 1970-01-01
  • 2018-12-26
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多