создание компонента на языке С

Откройте Visual Studio. Создайте новый проект. В шаблонах выберите Other Languages / Visual C++ / Win32 / Консольное приложение Win32. В поле имя введите имя проекта, например libCounter. Имя созданной библиотеки будет иметь такое же название, как и имя проекта.
Появляется окно мастера приложений. Next.
Application type выберите DLL, а в Additional options выберите Empty project.
Visual Studio создала проект.
Выберите папку Resource Files. Правая кнопка мыши. Add. New Item.
В окне мастера выберите C++ File (.cpp). В поле Name введите имя файла, например main.
Внимание!!! По умолчанию расширение файла .cpp. Удалите буквы рр, что бы расширение было
Нажмите Add.
Введите код. Скомпилируйте, но не запускайте на выполнение. Ниже приведен синтаксис, как должна выглядеть функция.
Синтаксис:
тип __declspec(dllexport)имя_метода([список_параметров]) {
 //тело функции;
}
Скрыть

Показать

Копировать
  main.c  
  • unsigned short showStart;
  • unsigned short showEnd;
  • double price;
  •  
  • void __declspec(dllexport) Set(unsigned short arg0, unsigned short arg1, double arg2) {
  •  showStart = arg0;
  •  showEnd = arg1;
  •  price = arg2;
  • }
  •  
  • unsigned short __declspec(dllexport) ResultShow() {
  •  return (showEnd - showStart);
  • }
  •  
  • double __declspec(dllexport) Sum() {
  •  return (double)(ResultShow() * price);
  • }
Создайте приложение на C#.
Что бы доступ к файлу библиотеки был общим, его нужно скопировать в системную папку C:\Windows\System32, где хранятся библиотеки.

Если нужно, что бы доступ имела только определенная программа, написанная на языке C#, то нужно скопировать файл библиотеки в папку bin\Debug этой программы. В данном примере, файл библиотеки был скопирован в папку bin\Debug этой программы.

При объявлении внешнего метода используется модификатор extern, так же нужно указать в объявлении, что такой метод должен быть открытым public и статическим static.
Внимание!!! Каждому объявлению метода предшествует атрибут DllImport.

Синтаксис:
[DllImport("имя_библиотеки.dll",CharSet = CharSet.Unicode)]
public static extern тип имя_метода(список_параметров);

Введите код.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  • //подключить пространство имен
  • using System.Runtime.InteropServices;
  •  
  • class Program {
  •  
  •  [DllImport("libCounter.dll", CharSet = CharSet.Unicode)]
  •  public static extern void Set(ushort arg0, ushort arg1, double arg2);
  •  
  •  [DllImport("libCounter.dll", CharSet = CharSet.Unicode)]
  •  public static extern double Sum();
  •  
  •  
  •  public static int Main() {
  •   Console.WriteLine("оплата за электроэнергию\n");
  •   Console.Write("Введите начальные показания счетчика : ");
  •   ushort show_start = ushort.Parse(Console.ReadLine());
  •   Console.Write("Введите конечные показания счетчика  : ");
  •   ushort show_end = ushort.Parse(Console.ReadLine());
  •   Console.Write("Введите цену за 1 кВт/ч              : ");
  •   double price = double.Parse(Console.ReadLine());
  •   Set(show_start, show_end, price);
  •   Console.WriteLine("Сумма за электроэнергию              : {0:F}", Sum());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
оплата за электроэнергию

Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84