Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Экспорт класса из DLL на VC++6.0


Автор: neutrino 23.12.2003, 12:59
Приветствую!

Не говоря уже о том, что я ни разу не экпортировал классы из DLL в VC++6.0, то и говорить нечего о том как их втыкать в программу, написанную под C#.NET. Объясните мне пожалуйста (или покажите на простом примере) как импортировать класс из библиотеки написанной в VC++6.0 в среду .NET и его использовать (e.g. вызвать конструктор - достаточно).

Спасибо.

Автор: AntonSaburov 23.12.2003, 14:01
Цитата
Не говоря уже о том, что я ни разу не экпортировал классы из DLL в VC++6.0,


Если подразумевается, что надо использовать COM-объекты, то можно посмотреть прямо в "Находках" по ключу "как в VC++.net работатьс EXEL"

Если не так понял вопрос - надо подробности.

Автор: neutrino 24.12.2003, 19:39
Нет, что ты, никаких COM-объектов. Элементарный класс с набором методов. Просто как это чисто технически реализовать?

Автор: Гость_dim 24.12.2003, 22:26
Просто так такой класс не вызовешь. Для этого нужно писать враппер, например на Managed C++, класс который будет являтся managed классом и подгружать твой VC6 класс.

Автор: AntonSaburov 25.12.2003, 13:01
RTFM - MSDN "Platform Invoke Examples"

Код

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
   public class Win32
   {
       [DllImport("user32.dll", CharSet=CharSet.Auto)]
           public static extern int MessageBox(int hWnd, String text,
               String caption, uint type);
   }

   class Class1
   {
       [STAThread]
       static void Main(string[] args)
       {
           Win32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);
       }
   }
}

Автор: neutrino 1.1.2004, 12:33
Однако это импорт функции. А как с классом проделать тоже самое?

Автор: stab 1.1.2004, 15:31
Думаю это тебе должно помочь, программер ты опытный, разберешся, а если что милости просим с вопросами.

http://forum.vingrad.ru/index.php?act=ST&f=2&t=13274
http://forum.vingrad.ru/index.php?act=ST&f=2&t=15002

метод, правда, хакерский...

Автор: dim 2.1.2004, 14:19
Если есть header файл(ы) и библиотека импорта все будет намного проще.

Автор: neutrino 4.1.2004, 19:54
Если эти хедеры написанны на С++, а мне надо в С# то как они помогут?

Автор: dim 5.1.2004, 15:01
Очень просто - пишется на managed C++ managed класс который является простой оберткой для твоего реального класса. Сборку с managed классом ты уже сможешь подключать в C# и использовать свой оберточный класс как .NET класс.

Автор: neutrino 5.1.2004, 16:05
Вы наверное не обратили внимание, что я написал в начале темы: "...я ни разу не экпортировал классы из DLL в VC++6.0..." И как пользоваться классами из библиотек я тоже не знаю. В книгах дома ничего не нашел.

А оборточные классы на управляемом С++ я умею делать. Проблема именно в импорте класса из библиотеки.

Автор: neutrino 5.1.2004, 16:09
Cully Спасибо. Я лучше введу ясность. А то у вас из-за меня голова заболит.

Мне нужно просто (как я понимаю) объявить интерфейс класса из библиотеки для программы. И указать, что он находится в такой-то библиотеке. Как это чисто технически реализовать?

Автор: dim 5.1.2004, 18:10
Дело в том, что исходный класс надо указать как експортируемый. Это можно сделать таким образом:
class __declspec( dllexport ) SomeClass
{
...
};
Далее - подключить библиотеку импорта этой длл-ки в тот проект где будет использаться класс.

Автор: neutrino 8.1.2004, 00:13
Я экспортирую класс. Как импортировать? Как интерфейс объявить для внешней программы?

Автор: stab 9.1.2004, 12:39
neutrino, опиши, плиз, подробно какими файлами ты располагаешь или, если это не военная тайна, пришли по мылу, вместе раберемся.

cully(sobaka, mlin)ngs.ru

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)