Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/503: Рейтинг темы: голосов - 503, средняя оценка - 4.54
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
1

Создать библиотеку со своей функцией

09.03.2012, 09:50. Показов 100988. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать программу, которая принимает набор чисел на вход и выдаёт тоже набор чисел. Как именно это будет организовано, как массив или что-то другое - неважно. Важно, что программа будет вызываться из другой программы, написанной на другом .NET-языке. Мне просто нужна заготовка, в которую останется только вбить свой алгоритм. Пусть, например, на вход подаётся десять чисел, а на выход - два. Первое из выходных чисел - сумма входных, а второе - их произведение. Если знаете, как сделать это на C++, тоже говорите, мне в общем-то всё равно (алгоритм надо переписывать с Java).
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2012, 09:50
Ответы с готовыми решениями:

Свой блок со своей с-функцией и блок Step
Не могу понять поведение simulink Пишу собственную s-функцию, непрерывная система. В примере...

Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
Создать абстрактный базовый класс Figure с виртуальной функцией -периметр.Создать производные...

Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: ариф
Здравствуйте, помогите разобраться с задачей Создать абстрактный базовый класс с виртуальной...

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы - Параллелепипед, Шар со схожими функциями объема
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы -...

13
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
06.04.2012, 13:46 2
Лучший ответ Сообщение было отмечено как решение

Решение

1) файл - создать проект - Библиотека классов (и пишем ее имя, назовем Func)
дальше пишем саму нашу функцию (библиотеку):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace Func
{
    public class Class1
    {
        public static void SumFunc(double x, double y)
        {
            double Sum = x + y;
            double Mult = x * y;
            Console.WriteLine("Summ = {0} Multiply= {1}", Sum, Mult);
            Console.ReadLine();
        }
    }
}
затем к создаем новый проект (ConsoleApplication2) и подключаем библиотеку Func:
(смотрим картинки)
Создать библиотеку со своей функцией

Создать библиотеку со своей функцией


вот сам код основной программы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Func; // подключение нашей библиотеки
 
namespace ConsoleApplication2
{
    class Program
    {
        
      static void Main(string[] args) 
      {
          
          double i, j;
          i = Convert.ToDouble(Console.ReadLine());
          j = Convert.ToDouble(Console.ReadLine());
          Class1.SumFunc(i, j); // вызов функции с библиотеки Func
          // Func.Class1.SumFunc(); 
 
      }
        
        
    }
}
результат:
Создать библиотеку со своей функцией


как видим на вход поступают два числа, а функция SumFunc() из библиотеки Func проводит сложение и умножение этих чисел, и выводит на консоль.(как для примера я использовал две входные переменные, но их может быть сколько угодно, и функции делать что-угодно, главное изложил суть процесса)
25
60 / 57 / 22
Регистрация: 15.12.2009
Сообщений: 231
Записей в блоге: 1
25.04.2012, 10:32 3
buntar, А как можно тестировать библиотеку во время её создания?
0
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
25.04.2012, 11:00 4
Цитата Сообщение от chesar Посмотреть сообщение
А как можно тестировать библиотеку во время её создания?
отладьте ее как обычную программу, а потом создайте Библиотеку классов сначала уже с проверенного проекта.
0
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 65
31.05.2012, 16:52 5
После того как я подключил Calc.dll он появился в ссылках, но проект не запускается, хотя using Calc; в начале проекта прописал, говорит: Ошибка 1 Не удалось найти имя типа или пространства имен "Calc" (пропущена директива using или ссылка на сборку?) D:\Ynever\второй симместор\Программирование С#\Курсавая\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 11 7 WindowsFormsApplication1
0
Администратор
Эксперт .NET
9615 / 4757 / 761
Регистрация: 17.04.2012
Сообщений: 9,611
Записей в блоге: 14
02.06.2012, 10:31 6
Цитата Сообщение от Shaitan63 Посмотреть сообщение
После того как я подключил Calc.dll он появился в ссылках, но проект не запускается, хотя using Calc
Видимо в вашей Calc.dll нет типа или пространства имён Calc
Нужно что-то вроде этого (в файле Calc.dll):
C#
1
2
3
4
5
6
using System;
 
namespace Calc
{
    // тут код Calc.dll
}
0
24 / 24 / 8
Регистрация: 27.02.2010
Сообщений: 74
02.06.2012, 14:21 7
копируй свою .dll c проекта библиотеки классов bin->debug-.dll , в папку с нужным проектом bin->debug

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Reflection;
 
 
class Program
{
    const string ASSEMBLY = "ClassLibrary1";
    const string ERROR_ASSEMBLY_EXIST = "Не получилось подключить зборку";
    const string FULL_NAME_OF_TYPE = "ClassLibrary1.MyClass";
    const string ERROR_TYPE_EXIST = " '"+FULL_NAME_OF_TYPE + "' не найден";
    static void Main()
    {
        Console.WriteLine("это базовая реализация нашей программы");
        Console.ReadLine();
        Console.WriteLine("А это уже пошла дополнительная реализация  доустановленых компонент");
        Console.ReadLine();
 
        Assembly ass;
 
        try
        {
             ass = Assembly.Load(ASSEMBLY);//загрузка библиотеки
        }
        catch 
        { 
            Console.WriteLine(ERROR_ASSEMBLY_EXIST);
            Console.ReadLine();
            return;
        }   
      
 
        Type myClass ;
        try
        {
            myClass = ass.GetType(FULL_NAME_OF_TYPE);//вытягивание информации о типе
            if (myClass == null)
                throw new Exception(ERROR_TYPE_EXIST);
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
            return;
        }
 
        object instance = Activator.CreateInstance(myClass);//создание объекта нового класса
 
        MethodInfo[] M = myClass.GetMethods();
 
        if (M.Length < 5)
            return;
 
        MethodInfo mi = myClass.GetMethod("MyMethod");//получение метаданных о интересующем нас методе
        object[] paramaters = { true, "YPA", 10 };
        
        
        mi.Invoke(instance,paramaters); // вызов метода по ссылке mi
 
        Console.ReadLine();
    }
}
А вот к примеру подключение библиотеки ClassLibrary1 и вызова метода MyMethod без использования using и добавления ссылки в решении.
0
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 11
03.06.2012, 19:23 8
Я знаю что это преглупейший вопрос, но все же.
Сделал как указал уважаемый buntar . Все хорошо. Но теперь вопрос,а можно ли из библотеки текст или цифры выводить в textbox в другом проекте (конечно с подключенной библиотекой?)
0
Администратор
Эксперт .NET
9615 / 4757 / 761
Регистрация: 17.04.2012
Сообщений: 9,611
Записей в блоге: 14
03.06.2012, 19:29 9
Цитата Сообщение от MPSF Посмотреть сообщение
а можно ли из библотеки текст или цифры выводить в textbox в другом проекте (конечно с подключенной библиотекой?
Да:
Пусть это Calc.dll
C#
1
2
3
4
5
6
7
8
9
namespace Calc
{
    public class TestCalc
    {
        public static string GetSomeDummy() {
            return "Hey, man!";
        }
    }
}
Тогда в проекте пишете
C#
1
2
3
4
using Calc;
....
textBox1.Text = TestCalc.GetSomeDummy();
....
1
0 / 0 / 0
Регистрация: 01.06.2012
Сообщений: 11
04.06.2012, 10:50 10
Странно, сделал следующее:
В библиотеке написал :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Func
{
    public class Class1
    {
        public int SumFunc(int x, int y)
        {
            
            int Mult = x * y;
            return Mult;
        }
           
      }
 
}
В проекте пытаюсь сделать следующее:
есть 3 текст бокса, в первых двух заносятся переменные (х и у) , по кнопке данные передаются в библиотеку,происходит умножение и возвращается результат в 3ий текст бок.

Сам проект:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
namespace Test1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int x;
            x = Convert.ToInt32(textBox1.Text);
        }
 
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            int y;
            y = Convert.ToInt32(textBox1.Text);
        }
 
        public void button1_Click(object sender, EventArgs e)
        {
 
           textBox3.Text = Class1.SumFunc(x, y);
        }
 
       
    }
}
 
и вот вся проблема в текст боксе,

Я заранее извиняюсь -я только учусь. А если есть ребята,у которых есть время и терпение, то можете скинуть аську, я чутка помучаю вас вопросами , естественно не за просто так

Добавлено через 12 часов 32 минуты
Написал фигню.
Все умещается в один код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public void button1_Click(object sender, EventArgs e)
        {
 
            int x;
            x = Convert.ToInt32(textBox1.Text);
            int y;
            y = Convert.ToInt32(textBox2.Text);
 
            Func.Class1 f = new Func.Class1();
 
            int rez = f.SumFunc(x,y);
 
            label1.Text = rez.ToString();
            
             
           
        }
0
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 24
15.07.2016, 11:13 11
Здравствуйте, подключаю как у вас описано, у меня возникает ошибка "Не удается добавить ссылку на C:\...\..\...dll"Убедитесь что файл доступен, и является допустимой сборкой или компонентом COM"
Что не так? библеотека кривая?
0
Администратор
Эксперт .NET
17573 / 13793 / 5301
Регистрация: 17.03.2014
Сообщений: 28,276
Записей в блоге: 1
15.07.2016, 12:34 12
mader, подобная ошибка говорит о том что ты пытаешься добавить ссылку на неуправляемую DLL. Если в этой библиотеке есть экспортированные методы, то с ней надо работать через p/invoke.
0
0 / 0 / 0
Регистрация: 11.05.2013
Сообщений: 24
15.07.2016, 20:43 13
OwenGlendower, ок. а как? можете подсказать, или ссылку дать где почитать, я C# редко использую плохо знаю.
0
Администратор
Эксперт .NET
17573 / 13793 / 5301
Регистрация: 17.03.2014
Сообщений: 28,276
Записей в блоге: 1
15.07.2016, 21:55 14
mader, начни со статьи Marshaling Data with Platform Invoke
0
15.07.2016, 21:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2016, 21:55
Помогаю со студенческими работами здесь

Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы:...

Создать установщик своей программы
Здравствуйте Господа! Есть проблемка... Программирую на VB .NET 2008. В последнем своем проекте...

Создать диалог со своей разметкой
В инете полно примеров с километровыми кодами. Не верится, что подключить свою разметку к диалогу...

Создать библиотеку
Привет всем! нужно ввести данные в базу. сделал проcтенкий меню #include&lt;stdio.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru