我是C#的新手,我正在努力学习使用DLL。我正在尝试将我的对象包装在DLL中,然后在我的程序中使用它。
public class Foo // its in the DLL
{
public int ID;
public void Bar()
{
SomeMethodInMyProgram();
}
}
所以我尝试将其打包到DLL但我不能,因为编译器不知道SomeMethodInMyProgram()是什么。
我想用它来表达:
class Program // my program, using DLL
{
static void Main(string[] args)
{
Foo test = new Foo();
test.Bar();
}
}
答案 0 :(得分:37)
取决于什么类型的DLL。这是用.NET构建的吗?如果它是非托管代码,那么这里是一个例子,否则Rob的答案将起作用。
非托管C ++ DLL示例:
using System;
using System.Runtime.InteropServices;
您可能需要使用 DllImport
[DllImport(@"C:\Cadence\SPB_16.5\tools\bin\mpsc.dll")]
static extern void mpscExit();
或
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
然后每个人都这样调用:
// a specific DLL method/function call
mpscExit();
// user32.dll is Microsoft, path not needed
MessageBox(new IntPtr(0), "Test", "Test Dialog", 0);
答案 1 :(得分:25)
通过解决方案资源管理器添加DLL - 右键单击引用 - >添加引用,然后“浏览”到您的DLL - 然后它应该可用。
答案 2 :(得分:4)
您需要在运行时将DLL实际加载到应用程序中,因此DLL的动态部分。您还需要头文件来定义DLL中的函数,以便您的编译知道已定义的函数。我的知识基于C ++,所以这对C#有用吗我不确定,但是会有类似的东西......
答案 3 :(得分:4)
我在这里参加派对已经迟到了,但我正在留下这个答案,因为有人像我一样把头发拉出来。所以基本上,在面对这个问题时,我没有VS IDE的奢侈。我正在尝试使用csc通过cmdline编译代码。要引用dll,只需将编译器标志/ r:PathToDll / NameOfTheDll添加到csc。
该命令看起来像
csc / r:PathToDll / NameOfTheDll / out:OutputExeName FileWhichIsReferencingTheDll.cs
在 FileWhichIsReferencingTheDll.cs 中添加using namespace AppropriateNameSpace;
以访问函数(通过调用class.functionName,如果是静态的,或者通过创建类的对象并在对象上调用函数)。 / p>
答案 4 :(得分:1)
这是我的 DLL (AllInOne)源代码,其中包含一个名为Calculate的类,该类具有方法GetAreaofSquare。
namespace AllInOne
{
public class Calculate
{
public double GetAreaOfSquare(double side)
{
return side * side;
}
}
}
我已将此DLL添加到项目的解决方案资源管理器中的引用中,该引用是一个控制台应用程序,并在系统名称空间中添加了AllInOne。请仔细查看“使用AllInOne” 。我们可以如下所示实例化Calculate类,然后可以使用GetAreaofSquare方法来计算Square的面积。
using AllInOne;
namespace UsingDLLinApplication
{
public class GetResult
{
static void Main()
{
Calculate myEveryCalculation = new Calculate();
double storeAreaOFSquare = myEveryCalculation.GetAreaOfSquare(4.5);
Console.WriteLine("The area of Square is {0}", storeAreaOFSquare);
Console.ReadLine();
}
}
}