将 DLL 引用添加到 C# asp.net 项目后如何调用函数

Posted

技术标签:

【中文标题】将 DLL 引用添加到 C# asp.net 项目后如何调用函数【英文标题】:How to call functions after adding DLL reference to a C# asp.net project 【发布时间】: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

【问题讨论】:

这里的实际问题是什么? 【参考方案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”中的函数......为什么? 我已根据您问题中的其他信息修改了我的答案。

以上是关于将 DLL 引用添加到 C# asp.net 项目后如何调用函数的主要内容,如果未能解决你的问题,请参考以下文章

关于dll文件的引用问题

.net中如何引用Dll文件?

将 C++ DLL 添加到 C# 项目

从另一个项目/dll 引用的 Asp.NET 用户控件具有 NULL 属性

Asp.net C# 使用Newtonsoft.Json 实现DataTable转Json格式数据

ASP.NET MVC - 使用 C# 将引用不同程序集的模型从控制器传递到视图