Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание COM на C# и дальнейшее использование

842
22 июля 2009 года
sigmov
301 / / 16.09.2008
Вот решил создать первый COM используя NET платформу.
Простенький класс, печатающий сообщение в консоль.

Код:
namespace COMNET
{
    [ComVisible(true)]
    [Guid("3e131206-aca8-4530-b2b9-308e16f81bda")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]   //Интерфейс IUnkown
    public interface IReal
    {
        [DispId(1)]
        void Message();
    }
    [ComVisible(true)]
    [Guid("b1fe8884-c20c-4743-a1b3-851daad6d188")]
    [ClassInterface(ClassInterfaceType.None)]               //Не создавать искуственный интефейс
    public class Real: IReal
    {
        public void Message() { System.Windows.Forms.MessageBox.Show("YRA"); }
    }
}


Затем полученную сборку (COMNET.dll):

regasm COMNET.dll /tlb:COMNET.tlb
gacutil.exe -i COMNET.dll

Пытаюсь использовать Компоненту на С++
Код:
#import "E:\Мои документы\Программирование\IPM\COMNET.tlb" //raw_interfaces_only

using namespace COMNET;

int _tmain(int argc, _TCHAR* argv[])
{
    CoInitialize(NULL);
    IRealPtr *pIR;
    CoCreateInstance( __uuidof(Real), NULL, CLSCTX_RESERVED1, __uuidof(IReal), reinterpret_cast<void**>(&pIR));
    pIR->Detach()->raw_Message();
    CoUninitialize();
    return 0;
}


Но сообщение говорит о том, что объект имеет 0 адрес(не создан)

Если кто-нить сможет помочь - буду благодарен!

dll и tlb в архиве
58K
01 марта 2010 года
dulotanka
1 / / 01.03.2010
gacutil.exe -i COMNET.dll
я сомневаюсь, что утилита успешно занесла сборку в GAC, т.к. нужна пара ключей для индетификации сборки.

Нужно сначала сгенерировать пару ключей
sn -k key.snk

Поместить сгенирированный файл "key.snk" в папку спроектом

и добавить код

[assembly:AssemblyKeyFile("key.snk")]
842
02 марта 2010 года
sigmov
301 / / 16.09.2008
Цитата: dulotanka
gacutil.exe -i COMNET.dll
я сомневаюсь, что утилита успешно занесла сборку в GAC, т.к. нужна пара ключей для индетификации сборки.



Я просмотрел кэш сборок. Сборка была там.

Тема кстати "древняя".

Обошел использование COM оберткой на MC++.

Но за идею спасибо. На досуге попробую сборку с ключами в COM закатать.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог