从DLL调用函数?

时间:2011-02-15 23:58:56

标签: c# dll interop call dllimport

我是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();
    }
 } 

5 个答案:

答案 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();
        }
     }
}