4 / 4 / 1
Регистрация: 03.09.2012
Сообщений: 22
|
|||||||||||
1 | |||||||||||
Транслировать Delphi код в C#11.03.2015, 18:49. Показов 1611. Ответов 6
Метки нет (Все метки)
Здравствуйте.
Помогите пожалуйста транслировать Delphi в С#. Сам код в понимании не сложен, но вот его представление в C# вызывает много вопросов. Суть в следующем - данный код, есть пример плагина для программы, которая в свою очередь, так же написана на Delphi. В коде плагина 2 структуры, через которые и реализован обмен между плагином и самой программой. Первая структура InitStruct содержит кол-во и названия экспортируемых в программу функций, заполняется в функции InitPlugin, вызываемая при инициализации плагина. Из этой функции возвращается указатель на саму структуру InitStruct. Вторая структура InitParams, заполняется самой программой и указатель на нее передается в качестве параметра в пользовательские экспортируемые функции. Сама структура содержит различные данные, которые могут помочь при работе с программой, а также символьный массив, в который записывается результат ака возвращаемое значение, сами экспортируемые функции могут возвращать только булевы true и false. Никак не могу додуматься, как это все реализовать на C#. Нужно оперировать указателями на структуры, которые содержат, строки, массивы и массивы строк. Да так, чтобы ничего не потерлось в процессе сборки мусора. Подскажите пожалуйста, возможно ли все это реализовать? Буду очень признателен за помощь или совет.
0
|
11.03.2015, 18:49 | |
Ответы с готовыми решениями:
6
Транслировать программный код с Pascal Транслировать заданный код с языка Pascal в исходный код ассемблер Транслировать код с Pascal Возможно ли транслировать код Си в MathCAD |
80 / 58 / 11
Регистрация: 16.12.2013
Сообщений: 175
|
|
12.03.2015, 07:14 | 2 |
А чего вы хотите добиться? Писать плагины для Delphi на С#, что ли? Если так, то пишите простейший плагин на Delphi, который вызывает функции COM-объекта, написанного на С#. Просто wrapper. Если вам надо написать модуль на С#, который будет доступен из Delphi, то тогда сразу пишите COM-объект на С# и вызывайте его функции из кода на Delphi.
Написать плагин для Delphi на чистом C# можно, но это очень сильное колдунство.
1
|
4 / 4 / 1
Регистрация: 03.09.2012
Сообщений: 22
|
|
12.03.2015, 10:17 [ТС] | 3 |
Австрал, Да, Вы правильно поняли - хочу написать плагин на C#. Честно признаться программист из меня никакой и с темой вызова управляемого кода из неуправляемого я столкнулся впервые, так что прошу прощения если мой вопрос абсурден. Прочитал про маршалинг и попытался вникнуть, как это происходит. В голове каша и было много сомнений - может я что-то упустил или не дочитал. Скорее всего так и есть, но, судя по Вашему совету, суть я уловил правильно - на чистом C# слишком трудная задача для меня.
Чтобы внести ясность, добавлю еще, что вся эта затея обусловлена тем, что есть уже написанная библиотека на C#, которой и хотелось бы воспользоваться без промежуточного кода на стороннем языке. Похоже что никак без этого. Спасибо за ответ.
0
|
80 / 58 / 11
Регистрация: 16.12.2013
Сообщений: 175
|
|
12.03.2015, 12:15 | 4 |
Сообщение было отмечено tezaurismosis как решение
Решение
Управляемый код из неуправляемого проще всего вызвать написав DLL на C#. Все так и делают. Создаёте проект C# типа Class Library. Затем идёте в меню Project/Properties, выбираете вкладку "Application" и там нажимаете кнопку "Assembly Information". В появившейся форме ставите крыжик "Make Assembly COM Visible". Ну и всё. Пишите туда что хотите на C#, подключайте к этому проекту любые сторонние .NET библиотеки. Все функции, которые будут объявлены как public, будут доступны через COM интерфейс. Delphi умеет автоматически генерировать type library и wrapper для COM объектов. Там в меню где-то есть, типа добавить COM объект. Получите файл, который будет называться <Имя вашей DLL>_TLB.pas. Всё, этим модулем можно пользоваться так, как будто всё там на Delphi написано. Точнее не скажу, Delphi не под рукой.
2
|
4 / 4 / 1
Регистрация: 03.09.2012
Сообщений: 22
|
|
12.03.2015, 14:04 [ТС] | 5 |
Австрал, Большое спасибо. Да, пожалуй это будет самый оптимальный вариант. Буду копать в сторону COM.
0
|
80 / 58 / 11
Регистрация: 16.12.2013
Сообщений: 175
|
||||||
12.03.2015, 15:19 | 6 | |||||
Сообщение было отмечено tezaurismosis как решение
Решение
Удачи вам. Там копать совсем неглубоко. Вот так должно быть примерно:
1
|
4 / 4 / 1
Регистрация: 03.09.2012
Сообщений: 22
|
|
12.03.2015, 22:22 [ТС] | 7 |
Австрал, Супер, спасибо за разъяснения! Безмерно благодарен Вам.
0
|
12.03.2015, 22:22 | |
12.03.2015, 22:22 | |
Помогаю со студенческими работами здесь
7
Транслировать код Turbo Pascal на Visual Basic Как транслировать код с JavaScript на C# используя KnockoutApi Транслировать код Turbo Pascal на Visual Basic Транслировать или не транслировать Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |