Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подключение C# dll к проекту Builder с помощью COM 
V
    Опции темы
franzR
Дата 2.3.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вобщем ситуация такова.
Нужно подключить dll написанную на C# к проекту Builder 6.
Нашел пример для Delphi ( http://krez0n.org.ua/archives/248?rcomment...37c#comment-504 ), попробовал - работает. Проделал все манипуляции с созданием DLL, настройкой и регистрацией в винде. Builder увидел dll и  подключил. Обращаться к IMyInterface получается, его видит. А вот дальше сделать так как в примере не выходит..(((

Как можно перевести этот пример кода на с делфи на билдер?

Код

procedure TForm1.btnSumClick(Sender: TObject);
var
  intfRef: IMyInterface;
  result: Integer;
begin
  intfRef := CreateComObject(CLASS_TestClass) as IMyInterface;
  result := intfRef.Sum(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
  lblSum.Caption := IntToStr(result);
end;


Я пробую так, посмотрел в хелпе Buildera
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        IMyInterface *initfRef;

        initfRef = CreateComObject(CLSID_TestClass &IID_IMyInterface);
}


Крутил и так и так.... не запускается пишет
Код

[C++ Error] Unit1.cpp(23): E2093 'operator&' not implemented in type '_GUID' for arguments of the same type


пробую еще так запускается но при выполнении обработчика вылетает ошибка при выполнении....

Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        IMyInterface *initfRef;
        initfRef->Sum(5,5);
        
}


Собственно пытаюсь вызвать Sum из этого кода в либе.

Код

public interface IMyInterface
{
    int Sum(int x, int y);
    string AppendText(string text);
}

[ClassInterface(ClassInterfaceType.None)]
public class TestClass : IMyInterface
{
    //просто суммируем два числа
    public int Sum(int x, int y)
    {
        return x + y;
    }



 
Посоветуйте пожалуйста выход из ситуации. Я с COM-мами еще не сильно дружу, так как только вот первый день воюю, а нужно разрулить быстро... smile 

PM MAIL   Вверх
xvr
Дата 2.3.2010, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223




Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
       DelphiInterface<IMyInterface> initfRef = CreateComObject(CLSID_TestClass);
       lblSum->Caption = IntToStr(initfRef->Sum(StrToInt(Edit1->Text), StrToInt(Edit2->Text)));
}




PM MAIL   Вверх
franzR
Дата 2.3.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 2.3.2010,  18:43)
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
       DelphiInterface<IMyInterface> initfRef = CreateComObject(CLSID_TestClass);
       lblSum->Caption = IntToStr(initfRef->Sum(StrToInt(Edit1->Text), StrToInt(Edit2->Text)));
}


Спасибо все сработало! smile 

Но сразу в догонку еще вопрос, а можно ли обойтись без 
Код

DelphiInterface<IMyInterface>
 ?  smile  Чет он меня смущает...


PM MAIL   Вверх
xvr
Дата 2.3.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(franzR @ 2.3.2010,  19:21)
Но сразу в догонку еще вопрос, а можно ли обойтись без 
Код

DelphiInterface<IMyInterface>
 ?  smile  Чет он меня смущает...

И чем смущает? Обычный Smart Pointer в VCL реализации. Если больше нравится ATL, можно взять оттуда - CComPtr и CComQIPtr

PM MAIL   Вверх
franzR
Дата 23.2.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уже ничем не смущает. Слегка было не понятно как объявить глобальную переменную, разобрался.

Всем откликнувшимся спасибо!

Тему можно считать закрытой.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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