Out of process COM server
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Out of process COM server Expand / Collapse
Автор
Сообщение
02.04.2007 13:42
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252, Visits: 13 544
Всех приветствую. Видимо, несколько отстал от жизни разработчика, ибо есть очередной ) вопрос.

Собственно - сабж - можно ли на Цэ-Шарп создать оut of process COM server? Насколько я понял, порыв интернет - сие невозможно. У МС-а везде говорится только про КОМПОНЕНТЫ (Без расшифровки - что это за зверь такой), другие сайты - молчат как рыба об лед... В общем - все свидетельствует о том, что низзя... Но! вижуал студия 2005 (+ 2-ой фреймворк) позволяет скомпилить некий ехе-файл, который даже потом через ВБА можно ПОПЫТАТЬСЯ запустить на исполнение. При этом в скрипте ворда вылетает ошибка - еррор 70 - пермишн денайд.

ВБА-шный код прилагаю:

Option Explicit

Public Sub test()
    Dim obj As Object
    Set obj = CreateObject("MyComPlusClass")
    Stop
    Set obj = Nothing
    Stop
End Sub

Выдержку из кода собственно СиШарпного ехе-шника прилагаю:

//Если задать ComInterfaceType.InterfaceIsIUnknown, то это означает, что наш интерфейс

//является производным от интерфейса IUnknown и имеет раннее связывание

//Если задать ComInterfaceType.InterfaceIsIDispatch, то наш интерфейс является

//производным от IDispatch (так называемые disp-интерфейсы) и имеет позднее связывание

//ComInterfaceType.InterfaceIsDual - дуальный интерфейс, обладающий как поздним так

//и ранним связыванием

[InterfaceType(ComInterfaceType.InterfaceIsDual)]

[Guid("A707BF29-D091-4b11-AFA3-7917F44F187E")]

public interface IMyComPlusInterface

{

void MyComPlusMethod();

}

[ClassInterface(ClassInterfaceType.None)]

[Guid("62B4C28E-F345-4cc1-8D85-63A98DE5240B")]

public class MyComPlusClass : ServicedComponent, IMyComPlusInterface//ServicedComponent должен наследоваться всеми классами, реализующими COM интерфейсы

{

[AutoComplete(true)] //используется в схеме транзакций COM+

public void MyComPlusMethod()

{

int a = 5, b = 4, c = a + ~b + 1; //реализуем метод

}

}

Кусок кода из файла AssemblyInfo.cs прилагаю:

[assembly: ApplicationAccessControl(false)]

[assembly: ApplicationActivation(ActivationOption.Server)]

[assembly: Guid("86AB0026-8FFB-4887-894E-48BD7D1ECEDE")]

[assembly: ApplicationID("F3CF583A-2AE7-4857-AEA8-8D74FA2C18F8")]

[assembly: ApplicationName("ComPlusServer")]

//[assembly: System.Reflection.AssemblyKeyFile(@"D:\VS2005\test\testApp\testApp\testApp.snk")]

/* /keyfile:"D:\VS2005\test\testApp\testApp\testApp.snk" */

Среда разработки - 2005-ая студия + сервис-пак №1

Сообщ. #912142
02.04.2007 13:46
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252, Visits: 13 544
Откуда полезла необходимость в подобном ужасе:

Разрабатываю программу, которая запускает VBA приложение, которое должно периодически докладывать запустившему процессу "я живое, все в порядке".

Решить задачу можно другими способами, но хочется именно таким.

"Мы знаем, что это нельзя сделать. Мы хотим понять - как именно это можно сделать" (Ц) "Понедельник начинается в субботу"

Сообщ. #912143
02.04.2007 14:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252, Visits: 13 544
http://www.rsdn.ru/article/dotnet/complusnet.xml

Занятно. Судя по статье - можно делать и СОМ и ЕХЕ. Буду пробовать...

Сообщ. #912144
02.04.2007 16:17
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 27.02.2008 16:42
Сообщ.: 43, Visits: 1 569
Ничегo не мoгу скaзaть пo пoвoду VBA и oшибки, кoтoрую Вы пoлучили, нo тoлъкo две недели нaзaд зaкoнчил делaтъ COM dll для рaбoты из VB6 с web сервисoм. Бoлъших прoблем не имел.
Сообщ. #912149
02.04.2007 18:49
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252, Visits: 13 544
Спасибо, но речь шла несколько не о том.

COM DLL - это по определению IN PROCESS SERVER. Мне же нужен - out of process (или - ЕХЕ файл). Примеров написания IN PROCESS SERVER в инете полно, на мсдн-е тоже инфы хватает.

Сообщ. #912160
02.04.2007 19:15
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 27.02.2008 16:42
Сообщ.: 43, Visits: 1 569
Извиняюсь, невнимaтелънo прoчитaл Вaш пoст.
Сообщ. #912162
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 4:01