Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействия приложений через COM, Delphi7 и C# 
:(
    Опции темы
Certain
Дата 8.11.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.6.2008
Где: Moscow

Репутация: нет
Всего: 4



Всем добрый вечер!
Ситуация: есть программа(prog1), написана на Delphi7(с дистрибутивом), результатом работы является база данных. Есть 2-я программа(prog2), вызывается из prog1, написана на C#(с дистрибутивом), которая просматривает эту базу(сортирует, фильтрует, ищет и т.п.), вобщем выступает в роли некой утилиты для prog1. У каждой записи в БД есть поле idModel (принадлежность к определённой моделе). По какому-то действию пользователя из prog2 нужно передать этот idModel в prog1. P.S. Всё находится на одной машине
Неделю мучаюсь, но задачу так и не решил. Хотя за неделю мог и переписать на Delphi7 эту утилиту, но это уже дело принципа.
Пробую через COM:
1. Добавил .cs в проект С#(Events.exe):
Код

using System;
using System.Runtime.InteropServices;

namespace COMEvents
{
    [ComVisible(false)]
    public delegate void COMMEvent(Int32 idModel);

    [ComVisible(true),
     InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface ICOMM
    {
        [DispId(1)]
        void ChangeId(Int32 idModel);
    }

    [ComVisible(true),
     InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ICOMMEvents
    {
        [DispId(2000)]
        void OpenView(Int32 idModel);
    }

    [Guid("19FCDC6B-A06B-44cc-9A3B-A533DA592ACD"),
     ClassInterface(ClassInterfaceType.None),
     ComVisible(true),
     ComSourceInterfaces(typeof(ICOMMEvents)),
     ProgId("COMEvents.CoComEvents")]
    public class CoComEvents : ICOMM
    {
        public event COMMEvent OpenView;
        public CoComEvents()
        { }
        public void ChangeId(Int32 idModel)
        {
            if (OpenView != null) OpenView(idModel);
        }
    }
}


Подписал ключём.
Регистрирую:
Код

regasm Events.exe /tlb
 
Регестрирует, создаёт tlb файл, запись в реестре есть

и, чтобы не добавлять в глобальный кеш,
Код

regasm Exents.exe /codebase


Создаю проект в Delphi для теста, импортирую COM при помощи "Import Type Library", появляется в виде компонента TCoComEvents на панеле инструметов
Добавляю на форму этот компонент, свойство  ConnectKind = ckRunningOrNew.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleServer, Events_TLB, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    CoComEvents: TCoComEvents;
    procedure FormCreate(Sender: TObject);
    procedure CoComEventsOpenView(ASender: TObject; idModel: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  CoComEvents.Connect();
end;

//обработка события
procedure TForm1.CoComEventsOpenView(ASender: TObject; idModel: Integer);
begin
  Edit1.Text := IntToStr(idModel);
end;

end.


В проекте C# создаю экземпляр этого класса и добавляю кнопку:
Код

CoComEvents obj = new CoComEvents();

private void button1_Click(object sender, EventArgs e)
        {
            obj.ChangeId(30);
        }

запускаю C# приложение, объект obj создаётся, запускаю Delphi приложение, должен присоедениться и отслеживать событие
нажимаю кнопку в шарп приложении, ничего не происходит, delphi не ловит... Друг друга не видят.
Как библиотека и там и там всё работает. Есть подозрение, что в шарпе я что-то не так делаю.
please помогите!!!
--------------------
Работа программиста и шамана имеет много общего - оба боpмочyт непонятные слова, совершают непонятные действия и не могут объяснить, как оно работает.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.