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

时间:2018-02-16 18:56:43

标签: c# asp.net dll

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

WebApplication1

MathLibrary.h

1 个答案:

答案 0 :(得分:1)

管理

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

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

未管理

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

要了解如何从.NET中使用ummanaged 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#?