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

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

27 голосов
/ 16 февраля 2011

Я новичок в 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();
    }
 } 

Ответы [ 4 ]

39 голосов
/ 03 апреля 2013

Зависит от того, какой тип 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);  
26 голосов
/ 16 февраля 2011

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

4 голосов
/ 29 мая 2017

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

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

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

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

4 голосов
/ 16 февраля 2011

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

...