Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2014, 00:40   #1
Crococo
Новичок
Джуниор
 
Регистрация: 17.04.2014
Сообщений: 3
По умолчанию Использование библиотеки на C# в Delhi

Доброго времени суток. Столкнулась с необходимостью использования библиотек написанных на C# в Delphi. Необходимо включить в библиотеку форму и вызывать эту форму из Delphi. Может у кого-нибудь есть подобный опыт. Буду очень признательна за любую помощь.
Crococo вне форума Ответить с цитированием
Старый 17.04.2014, 11:05   #3
MrCold
Пользователь
 
Регистрация: 23.12.2011
Сообщений: 17
По умолчанию

Использование управляемых библиотек в неуправляемом коде , вполне реальная задача.Но Придется заниматься правкой IL-кода. Смотрите статьи на подобии этой
http://www.codeproject.com/Articles/...anaged-methods.
На Delphi не программирую, но для С++ вот вам вполне рабочий пример.
Простейшая библиотека написана на C#.
После некоторых "махинаций" она готова к использованию и в С++, и в С#.
Код:
using System;

    public static class CSharpClass
    {
        public static void ShowMessageBox()
        {
            System.Windows.Forms.MessageBox.Show("Hello from C Sharp!");
        }

        public static void ShowForm()
        {
            System.Windows.Forms.Form form = new System.Windows.Forms.Form();
            form.Text = "Hello from C Sharp!";
            form.ShowDialog();
            form.Close();
        }
    }
Вызов в С++

Код:
#include <iostream>
#include <Windows.h> 
 
typedef void ( WINAPIV * LPFN ) ( ); 


int main()
{
	HINSTANCE hMyDLL = LoadLibrary("DLLCSharpMessageBox.dll"); 
	if (NULL == hMyDLL) 
		std::cout << "LoadLibrary failed\n"; 
	else
	{
		LPFN fnName = (LPFN)GetProcAddress( hMyDLL, "ShowMessageBox" );
		if (NULL == fnName) 
			std::cout << "GetProcAddress ShowMessageBox failed\n"; 
		else
		{                                                         
			fnName();  
		}
		fnName = (LPFN)GetProcAddress( hMyDLL, "ShowForm" );
		if (NULL == fnName) 
			std::cout <<  "GetProcAddress ShowForm failed\n"; 
		else
		{                                                         
			fnName();  
		}
		FreeLibrary( hMyDLL );
	}
	system("PAUSE");
	return EXIT_SUCCESS;
}
Вызов в С#
Код:
using System;

    class Program
    {
        static void Main(string[] args)
        {            
            CSharpClass.ShowMessageBox();
            CSharpClass.ShowForm();
            Console.ReadKey();
        }
    }
В обоих случаях сначала появится месседжбокс, затем форма.
Библиотеку приложил.
Вложения
Тип файла: zip DLLCSharpMessageBox.zip (1.4 Кб, 8 просмотров)
MrCold вне форума Ответить с цитированием
Старый 17.04.2014, 12:08   #4
Crococo
Новичок
Джуниор
 
Регистрация: 17.04.2014
Сообщений: 3
По умолчанию

Спасибо, но вопрос был именно в вызове формы.
Уже получилось
Crococo вне форума Ответить с цитированием
Старый 17.04.2014, 12:26   #5
Crococo
Новичок
Джуниор
 
Регистрация: 17.04.2014
Сообщений: 3
По умолчанию

MrCold, спасибо, попробую, у меня получилось следующим образом:

test.dll на C#
к библиотеке подключила форму Form1
namespace test
{
public interface IMyInterface
{
void FormShow();
}

[ClassInterface(ClassInterfaceType.N one)]
public class TestClass : IMyInterface
{
public void FormShow()
{
Form Form1 = new Form1();
Form1.ShowDialog();
}

}
}
код на Delphi
procedure TfrmTest.btn3Click(Sender: TObject);
var
_Ref: IMyInterface;
begin
_Ref := CreateComObject(CLASS_TestClass) as IMyInterface;
_Ref.FormShow();
end;
Crococo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование poi библиотеки на сервере SkrudjMakdak Общие вопросы по Java, Java SE, Kotlin 0 25.07.2012 15:33
Вопрос: Классы и библиотеки. Использование. MooNDeaR Помощь студентам 17 07.08.2011 21:50
Использование библиотеки <stdio.h> Ame Помощь студентам 0 11.05.2011 22:32
Использование библиотеки C и C++ demon9992 Помощь студентам 3 30.03.2011 22:14
Создание и использование библиотеки DLL Blew Помощь студентам 0 06.02.2011 14:56