Откройте Visual Studio. Создайте новый проект. В шаблонах выберите Other Languages / Visual C++ / Win32 / Консольное приложение Win32. В поле имя введите имя проекта, например libCounter. Имя созданной библиотеки будет иметь такое же название, как и имя проекта.
Появляется окно мастера приложений. Next.
Application type выберите DLL, а в Additional options выберите Empty project.
Application type выберите DLL, а в Additional options выберите Empty project.
Visual Studio создала проект.
Выберите папку Resource Files. Правая кнопка мыши. Add. New Item.
В окне мастера выберите C++ File (.cpp). В поле Name введите имя файла, например main.
Внимание!!! По умолчанию расширение файла .cpp. Удалите буквы рр, что бы расширение было .с
Нажмите Add.
Внимание!!! По умолчанию расширение файла .cpp. Удалите буквы рр, что бы расширение было .с
Нажмите Add.
Введите код. Скомпилируйте, но не запускайте на выполнение. Ниже приведен синтаксис, как должна выглядеть функция.
Синтаксис:
тип __declspec(dllexport)имя_метода([список_параметров]) {
//тело функции;
}
тип __declspec(dllexport)имя_метода([список_параметров]) {
//тело функции;
}
main.c
unsignedshortshowStart;unsignedshortshowEnd;doubleprice;void__declspec(dllexport) Set(unsignedshortarg0, unsignedshortarg1,doublearg2) {-
showStart = arg0; -
showEnd = arg1; -
price = arg2; }unsignedshort__declspec(dllexport) ResultShow() {-
return(showEnd - showStart); }double__declspec(dllexport) Sum() {-
return(double)(ResultShow() * price); }
unsignedshortshowStart;unsignedshortshowEnd;doubleprice;void__declspec(dllexport) Set(unsignedshortarg0, unsignedshortarg1,doublearg2) {-
showStart = arg0; -
showEnd = arg1; -
price = arg2; }unsignedshort__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 тип имя_метода(список_параметров);
Введите код.
Если нужно, что бы доступ имела только определенная программа, написанная на языке C#, то нужно скопировать файл библиотеки в папку bin\Debug этой программы. В данном примере, файл библиотеки был скопирован в папку bin\Debug этой программы.
При объявлении внешнего метода используется модификатор extern, так же нужно указать в объявлении, что такой метод должен быть открытым public и статическим static.
Внимание!!! Каждому объявлению метода предшествует атрибут DllImport.
Синтаксис:
[DllImport("имя_библиотеки.dll",CharSet = CharSet.Unicode)]
public static extern тип имя_метода(список_параметров);
Введите код.
Main.cs
usingSystem;//подключить пространство именusingSystem.Runtime.InteropServices;classProgram {-
[DllImport("libCounter.dll", CharSet = CharSet.Unicode)] -
publicstaticexternvoidSet(ushortarg0,ushortarg1,doublearg2); -
[DllImport("libCounter.dll", CharSet = CharSet.Unicode)] -
publicstaticexterndoubleSum(); -
publicstaticintMain() { -
Console.WriteLine("оплата за электроэнергию\n"); -
Console.Write("Введите начальные показания счетчика : "); -
ushortshow_start =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите конечные показания счетчика : "); -
ushortshow_end =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите цену за 1 кВт/ч : "); -
doubleprice =double.Parse(Console.ReadLine()); -
Set(show_start, show_end, price); -
Console.WriteLine("Сумма за электроэнергию : {0:F}", Sum()); -
Console.ReadKey(); -
return0; -
} }
usingSystem;//подключить пространство именusingSystem.Runtime.InteropServices;classProgram {-
[DllImport("libCounter.dll", CharSet = CharSet.Unicode)] -
publicstaticexternvoidSet(ushortarg0,ushortarg1,doublearg2); -
[DllImport("libCounter.dll", CharSet = CharSet.Unicode)] -
publicstaticexterndoubleSum(); -
publicstaticintMain() { -
Console.WriteLine("оплата за электроэнергию\n"); -
Console.Write("Введите начальные показания счетчика : "); -
ushortshow_start =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите конечные показания счетчика : "); -
ushortshow_end =ushort.Parse(Console.ReadLine()); -
Console.Write("Введите цену за 1 кВт/ч : "); -
doubleprice =double.Parse(Console.ReadLine()); -
Set(show_start, show_end, price); -
Console.WriteLine("Сумма за электроэнергию : {0:F}", Sum()); -
Console.ReadKey(); -
return0; -
} }
оплата за электроэнергию
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84
Введите начальные показания счетчика : 0
Введите конечные показания счетчика : 100
Введите цену за 1 кВт/ч : 0,3084
Сумма за электроэнергию : 30,84