Создание COM на C# и дальнейшее использование
Простенький класс, печатающий сообщение в консоль.
Код:
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"); }
}
}
{
[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;
}
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 в архиве
я сомневаюсь, что утилита успешно занесла сборку в GAC, т.к. нужна пара ключей для индетификации сборки.
Нужно сначала сгенерировать пару ключей
sn -k key.snk
Поместить сгенирированный файл "key.snk" в папку спроектом
и добавить код
[assembly:AssemblyKeyFile("key.snk")]
Цитата: dulotanka
gacutil.exe -i COMNET.dll
я сомневаюсь, что утилита успешно занесла сборку в GAC, т.к. нужна пара ключей для индетификации сборки.
я сомневаюсь, что утилита успешно занесла сборку в GAC, т.к. нужна пара ключей для индетификации сборки.
Я просмотрел кэш сборок. Сборка была там.
Тема кстати "древняя".
Обошел использование COM оберткой на MC++.
Но за идею спасибо. На досуге попробую сборку с ключами в COM закатать.