2 / 2 / 1
Регистрация: 12.03.2015
Сообщений: 99

На C# написать dll, функции которой можно будет вызывать в программе на Delphi

26.05.2015, 18:49. Показов 2646. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не знаю в какой раздел писать.
В общем, нужно на с# написать dll , функции которой можно будет вызывать в программе на делфи.
Нашел вот такое [url]

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace DLLEx
{
    public class Func
    {
        public static void ShowMess(string s)
        {
            Go(s);
        }
 
        private static void Go(string s)
        {
            MessageBox.Show(s);
            return;
        }
    }
}
Delphi
1
2
3
4
5
6
7
8
9
var
 
function ShowMess(AText: String): string; external 'твоя dll'; 
 
begin
 
ShowMess('блa бла бла');
 
end;
Все делаю так же, но в строке
Delphi
1
end;
и в строке после данной строки
Появляется ошибка:
Delphi
1
E2029 '.' expected but ';' found
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2015, 18:49
Ответы с готовыми решениями:

Можно передавать и вызывать из функции в DLL динамические массивы?
Мне нужно создать перегруженные функции удаления элемента из динамического массива с заданным ключом!Можно передавать в функцию и вызывать...

Написать программу, в которой можно будет переключаться между модулями...
Написать модуль к каждой задаче, написать программу(где будут все модули этих задач) в которой можно будет переключаться между модулями и...

Как вызывать функции из DLL?
Здравствуйте. Как вызывать функции из DLL? Вот например, если функция представляет собой что - то такое: void setValue( int x, int...

9
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
26.05.2015, 18:53
String нельзя из dll передавать, нужно указатель передавать на начало твоих строковых данных, тобишь используют PChar для этого, как с этим поступить в c# я не знаю, нужно читать как там передаются такие данные
0
2 / 2 / 1
Регистрация: 12.03.2015
Сообщений: 99
26.05.2015, 19:28  [ТС]
ладно, есть идея костыля. Сохранять результат выполнения функции в n.txt , n-число. в ответ передается число,а делфи-программа читает файл этот.

Но я вообще не могу понять. Єтот шаблон не работает, который я нашел. Кто подскажет, как осуществить работу с шарп дллки в делфи?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
26.05.2015, 20:35
стой функцию же не в var разделе надо разсмещать, где-то выше, по коду размести

Добавлено через 25 минут
что-то я тебе тут ерунды всякой насоветовал..

но я сейчас сам поигрался с этим, но видно так нельзя делать. так как в c# мы создем класс а тут пытаемся обратиться как к обычной библиотеке. как-то через COM это проворачивать надо. а в примере который ты нашел, там что-то все бухты-барахты.. непонятно что хотел автор на другом форуме этим сказать
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
26.05.2015, 22:09
Лучший ответ Сообщение было отмечено MorgunZ как решение

Решение

в общем, как создать и использовать тебе dll ))) если будет желание поковыряйся, мне интересно стало я поковырялся и у меня получилось, в общем создаем COM локальный сервер в виде dll'ки как описано вот тут вот за 11 шагов, http://stackoverflow.com/quest... x-com-in-c

у меня получилось нечто такое
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Runtime.InteropServices;
 
//using System.Windows.Forms;
 
namespace Launcher
{
 
    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("C8D80BAE-83B0-4312-A72D-29044EDACBA1")]
    public interface ILauncher
    {
        void launch();
        string Hello(string str);
        int Add(int a, int b);
    }
 
    [ClassInterface(ClassInterfaceType.None), Guid("23008950-183C-4EB2-85E8-DAD5E49E3096"), ProgId("Test.ComObjFromCCharp")]
    public class Launcher : ILauncher
    {
 
        public string Hello(string str)
        {
            return str + '\n' + str;
        }
 
        public int Add(int a, int b)
        {
            return a + b;
        }
 
        public void launch()
        {
            Console.WriteLine("Hello world");
 
        }
 
    }
}
после компиляции этого кода, появится в проекте, куда все компилировалось, dll'ка и TLB'шка, как на картинке примерно


далее в дельфи, устанавливаем эту tlb'шку, через импорт компонентов(надеюсь знаешь как, если нет найди в инете, у меня дельфи немецкий, не смогу подробно объясниить куда тыкать)

далее если все получилось импортировать удачно, туда куда импортировали появится .pas файл, с названием того что импортировали и на окончании TLB, вот его скопируем в папку с проектом, и в uses подлючим


и далее вот такой вот простенький код на дельфи, который запускает весь механизм в действие!

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, TestComObj_TLB;
var test: ILauncher;
begin
 
  test := CoLauncher.Create;
  test.launch;
  Writeln(test.Hello('Ololo'));
  Writeln(test.Add(5, 13));
 
  Readln;
 
end.
и вот такой вот результат


приложу все что мне потребовалось для создания данной махины
-программа на C#
-скомпилированные причуды из TLB
-тест-проект на дельфи

надеюсь поможет дальше
Вложения
Тип файла: 7z com ccharp_delphi.7z (698.0 Кб, 102 просмотров)
2
2 / 2 / 1
Регистрация: 12.03.2015
Сообщений: 99
27.05.2015, 21:29  [ТС]
Позже попробую, но огромное спасибо за такой полный и ясный ответ, даже с скриншотами и прилагающимися файлами. Огромное спасибо.
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 20
17.04.2019, 06:34
Если запускаю пример мне выдает ошибку
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleSysError with message 'Не был произведен вызов CoInitialize'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Добавлено через 17 минут
А сейчас ругается на строку
test := CoLauncher.Create;

project raised exception class eolesyserror with message. класс не зарегистрирован
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
17.04.2019, 10:16
если вы сделали все шаги, которые описаны, проблем возникнуть не должно, у меня же как-то 4 года назад это работало
Цитата Сообщение от illiona Посмотреть сообщение
класс не зарегистрирован
значит точно не все шаги были сделаны, тогда

http://docwiki.embarcadero.com... tion_Toolм
0
0 / 0 / 0
Регистрация: 21.02.2018
Сообщений: 20
18.04.2019, 06:10
Теперь ошибка такая выскакивает Ошибка: access violation at address 0045fd9b in module project1.exe read of address 00000000
0
Модератор
 Аватар для D1973
9854 / 6393 / 2453
Регистрация: 21.01.2014
Сообщений: 27,170
Записей в блоге: 3
18.04.2019, 07:15
Цитата Сообщение от illiona Посмотреть сообщение
read of address 00000000
Какой-то объект не создали и пытаетесь им оперировать...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.04.2019, 07:15
Помогаю со студенческими работами здесь

Можно ли процедуры вынести в отдельный файл и вызывать в основной программе
У меня есть некоторая программа с процедурами и функциями. Вопрос, можно ли процедуры вынести в отдельный файл и вызывать в основной...

Как правильно вызывать функции в программе
Логику программы вроде реализовал, подскажите пожалуйста как это все теперь собрать. Мне бы это собрать, а остальное уже доработаю. ...

Добавление функции, чтобы ее можно было вызывать с функции загрузки формы
Здравствуйте! Подскажите как правильно добавить функцию, чтоб ее можно было вызывать с функции загрузки формы, функция без каких либо...

Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица
помогите пожалуйста, очень нужна помощь! нужно написать программу, с помощью которой изображение будет разбиваться по пикселям и будет...

как к GUI-проекту на qt creatore подключить dll сделанную в MSVS2010 и вызывать из нее функции?
Сделал проект типа калькулятора на 3 текстовых полях(2 числа и результат)+ 4 кнопки(+-*/)... в длл прописаны функции(сложение и.т.п) каким...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru