Подтвердить что ты не робот

Вызов функции из DLL?

Я новичок в С#, и я пытаюсь научиться использовать библиотеки 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();
    }
 } 
4b9b3361

Ответ 1

Добавьте DLL через обозреватель решений - щелкните правой кнопкой мыши по ссылкам → добавьте ссылку, затем "Обзор" в вашей DLL - тогда она должна быть доступна.

Ответ 2

Зависит от того, какой тип DLL. Это встроено в .NET? если это неуправляемый код, то вот пример, иначе будет работать Ответ от Роба.

Пример неуправляемого 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);  

Ответ 3

вам нужно фактически загрузить DLL в ваше приложение во время выполнения, таким образом, динамическую часть DLL. Вам также нужен файл заголовка, который определяет, какие функции находятся в DLL, чтобы ваш компилятор знал, какие функции были определены. Мои знания здесь основаны на С++, поэтому, как это работает для С#, я не уверен, но это будет что-то вроде этого...

Ответ 4

Я опаздываю на вечеринку здесь, но оставляю этот ответ, потому что кто-то вытаскивает его волосы, как я. Таким образом, в основном у меня не было роскоши VS IDE, когда вы столкнулись с этой проблемой. Я пытался скомпилировать код через cmdline с помощью csc. Чтобы ссылаться на dll, просто добавьте флаг компилятора /r: PathToDll/NameOfTheDll в csc.

Команда будет выглядеть как

csc/r: PathToDll/NameOfTheDll/out: OutputExeName FileWhichIsReferencingTheDll.cs

В FileWhichIsReferencingTheDll.cs добавьте using namespace AppropriateNameSpace; для доступа к функциям (вызывая class.functionName, если статические или создавая объект класса и вызывая функцию на объекте).