Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Вниз

Смещение адреса метода в COM   Найти похожие ветки 

 
Дмитрий Баранов   (2002-10-17 14:07) [0]

Есть у меня dll-ка, содержащая единственный интерфейс, написана на VC/ATL.
Решил добавить в нее новый метод, назовем его Test(). Добавил, пересобрал. В Delphi после каждого изменения интерфейса удаляю и снова импортирую соотв. Type Library (для синхронизации, естественно). При вызове только этого метода из Delphi вываливается AccessViolation по адресу 000000, т.е. видать, адрес этого метода в run-time не вычисляется и равен 0. Где баг - найти не могу.

Может ли быть дело в порядке объявления методов в исходниках? У меня этот метод в .idl имеет dispid 23, а в реализации класса IDE VC++ запихала его на первое место:

=== IDL ===

interface INewsManager : IDispatch
{
[id(1), helpstring("method AddNewNew")] HRESULT AddNewNew([in] BSTR Data, [in] BSTR Header, [in] BSTR Anons, [in] BSTR Txt, [in] BSTR Reserved);

...
[id(23), helpstring("method Test")] HRESULT Test(); };


=== Хедер ===

class ATL_NO_VTABLE CNewsManager :
....

// INewsManager
public:
STDMETHOD(Test)(); // Здесь - первый.
STDMETHOD(get_RecordCount)(/*[out, retval]*/ long *pVal);
STDMETHOD(get_EOF)(/*[out, retval]*/ BOOL *pVal);


=== _TLB.pas ===


INewsManager = interface(IDispatch)
["{C14A452B-9F84-40E6-BF8E-0613A4B175FB}"]
...


procedure Find(Where: SYSINT; const What: WideString; const Reserved1: WideString;
const Reserved2: WideString); safecall;
procedure Test; safecall; // по порядку - 24 метод!!!
property Data: WideString read Get_Data;


"В чем правда, брат?" :))
Заранее спасибо.


 
Keplin Sergey   (2002-10-17 22:49) [1]

Здесь фишка как раз в добавлении!
Ты не добавляй новый метод,
а создай потомок твоего интерфейса, то бишь новый
и там создай новый метод...
Это самый простой вариант.


 
Suntechnic   (2002-10-18 03:32) [2]

Есть подозрение, что ты просто напросто вызываешь "старый" COM. Т.е. библиотеку типов ты взял новую, а как зарегистрированный сервер в системе у тебя значится старый, ещё без этого метода. Посмотри через OLE Viewer на свой COM. В какую директорию ссылается ProgID и действительно ли ты его пересобрал именно туда. Вообщем покапай в этом направлении, я на такое часто нарывался.


 
Дмитрий Баранов   (2002-10-18 10:10) [3]

Спасибо, разобрался:)
>>Suntechnic Ты прав. Мистика - пересобрал в ReleaseMinDependency - появился метод, опять переключил режим на Debug - появился и там. И - хрен его знает - при сборке появляется сообщение - "performing registation" - а ни фига не перерегистрируется... Руками Regsvr запускать нада.


 
Владислав   (2002-10-18 10:57) [4]

Нада еще раз перечитать Keplin Sergey (17.10.02 22:49) :))
Удачи.


 
Дмитрий Баранов   (2002-10-18 11:03) [5]

Не учите ученого :) Компонент пока не в бизнесе, а потому не надо мне лишних containment`ов и aggreagation"ов, себе дороже :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
3-92337
ruslan_as
2002-10-04 16:27
2002.10.28
Как заставить InterBase в SQL не чувствовать регистр букв


1-92537
plt
2002-10-15 13:42
2002.10.28
Список окон которые видны на десктопе?


1-92602
Yuri Btr
2002-10-17 10:38
2002.10.28
Избитый вопрос по CheckBox, RadioButton ещё раз


6-92634
Mostak
2002-08-28 11:10
2002.10.28
NMFTP не работает?


3-92364
Kolya
2002-10-06 08:58
2002.10.28
База данных БЕЗ dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский