将 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 引用的 Asp.NET 用户控件具有 NULL 属性