powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что требуется для вызова COM объекта на Delphi из C#?
6 сообщений из 6, страница 1 из 1
Что требуется для вызова COM объекта на Delphi из C#?
    #40034535
В Дельфи форуме уже спрашивал, там не знают.

Есть ком объект на Дельфи 7.
Интересующий метод выглядит как

Код: pascal
1.
function Func(a, b: WideString) : WideString;



Обратите внимание, что stdcall не используется. Исходники есть, но изменять их не позволено. ТЛБ есть, но показать больше одной строки из неё тоже не позволено. В шарпе добавляю COM-reference на тлб этого объекта, заводится ссылка, и становится видимым неймспейс. В нём виден класс и метод, выглядящий как

Код: c#
1.
string Func(string a, string b)



При вызове ошибка

Код: plaintext
The method or operation is not implemented.

Как правильно подцепить этот ком к шарп и вызвать его?
...
Рейтинг: 0 / 0
Что требуется для вызова COM объекта на Delphi из C#?
    #40034808
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сибирский Пушистый
Обратите внимание, что stdcall не используется.

Ага. И еще обратили внимание, что возвращаемый тип - не то, что положено согласно документации :
A return type is compatible with Automation if its type is an HRESULT, SCODE or void. However, MIDL requires that interface methods return either HRESULT or SCODE. Returning void generates a compiler error.
Такие методы вполне имеют право на жизнь как часть инфраструктурной реализации, но выставление их наружу внешнему потребителю чревато всяческими чудесами.

Сибирский Пушистый
ТЛБ есть, но показать больше одной строки из неё тоже не позволено.

Это задание с собеседования? Или часть исходников чебурнета?
...
Рейтинг: 0 / 0
Что требуется для вызова COM объекта на Delphi из C#?
    #40035227
Сон Веры Павловны
часть исходников чебурнета?

Вот это. Что оно нестандартное, винить надо кого-то, ушедшего за дверь лет 15 назад, так что пользоваться приходится тем, что есть. Значит, шарп такое не съест?
...
Рейтинг: 0 / 0
Что требуется для вызова COM объекта на Delphi из C#?
    #40035230
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сибирский Пушистый
Значит, шарп такое не съест?

Да такое вообще мало кто съест, потому как оно вообще не по канонам COM.
Можно попробовать дёргать это чудо поздним связыванием - есть какая-то мне лично не до конца понятная разница то ли в маршаллинге, то ли в принципе конструирования динамических вызовов, когда раннее свзяывание не работает ни в какую, а позднее - работает ( пример ). Может, и взлетит.
...
Рейтинг: 0 / 0
Что требуется для вызова COM объекта на Delphi из C#?
    #40035232
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, как вариант - раз на дельфи это чудо работает нормально, то на том же дельфи сделать COM-прокси, сделать нормально, со всеми stdcall и HRESULT, который внутри будет вызывать эту штуку, и перенаправлять её результаты. Дело это не особенно хитрое, я такое когда-то делал для использования одного специфического COM-компонента в WSH-скриптах - они не умеют работать с методами, у которых, например, есть аргументы с подтипами SAFEARRAY, прокси просто наружу выставлял методы с аргументами типа VARIANT*, внутри разбирал их в SAFEARRAY, и передавал родному компоненту.
...
Рейтинг: 0 / 0
Что требуется для вызова COM объекта на Delphi из C#?
    #40035583
Сон Веры Павловны
Да, как вариант - раз на дельфи это чудо работает нормально, то на том же дельфи сделать COM-прокси

Спасибо, но мне не дадут такое сделать. Этот вариант уже рассмотрели и отклонили.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что требуется для вызова COM объекта на Delphi из C#?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]