我有一个名为“MathLibrary”的C ++ DLL项目和一个名为“WebApplication1”的C#asp.net项目。我将项目“MathLibrary”添加到“WebApplication1”中,然后添加了对MathLibrary.dll的引用(如图所示)。但是我无法从MathLibrary.dll调用这些函数。我虽然必须在.cs文件的顶部添加“使用MathLibrary”,但名称无法识别。如何从MathLibrary.dll中调用函数?
答案 0 :(得分:1)
如果MathLibrary.dll是.NET程序集,则可以按如下方式解决问题:
但是,从外观来看,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"
)。