|
|
|
Supreme 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
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252,
Visits: 13 544
|
|
| Откуда полезла необходимость в подобном ужасе: Разрабатываю программу, которая запускает VBA приложение, которое должно периодически докладывать запустившему процессу "я живое, все в порядке". Решить задачу можно другими способами, но хочется именно таким. "Мы знаем, что это нельзя сделать. Мы хотим понять - как именно это можно сделать" (Ц) "Понедельник начинается в субботу"
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252,
Visits: 13 544
|
|
|
|
|
|
Forum 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блем не имел.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.11.2007 17:38
Сообщ.: 1 252,
Visits: 13 544
|
|
| Спасибо, но речь шла несколько не о том. COM DLL - это по определению IN PROCESS SERVER. Мне же нужен - out of process (или - ЕХЕ файл). Примеров написания IN PROCESS SERVER в инете полно, на мсдн-е тоже инфы хватает.
|
|
|
|
|
Forum Member
      
участник
Last Login: 27.02.2008 16:42
Сообщ.: 43,
Visits: 1 569
|
|
| Извиняюсь, невнимaтелънo прoчитaл Вaш пoст.
|
|
|
|