Есть COM-интерфейс в EXE-модуле, написанный на C++.
Клиент, использующий эти методы, написанный на C#.
Увидел, что одна из функций COM-интерфейса не используется на клиенте. Решил её вообе удалить.
Удалил эту функцию из idl-файла.
Здравствуйте, PavelT100, Вы писали: PT>Всё компилируется. Сервер EXE запускается. Но при запуске клиента падает на первом же вызове COM-функции. Что надо ещё удалить или исправить?
tlb?
Здравствуйте, mDmitriy, Вы писали:
D>Здравствуйте, PavelT100, Вы писали: D>tlb?
Да. MIDL запускается и делает всё, что полагается, 4 новых текстовых файла AutoSvr.h, AutoSvr_i.c, AutoSvr_p.c, dlldata.c, в них уже нет упоминаний о моей удалённой функции и создаётся новый tlb файл.
Здравствуйте, PavelT100, Вы писали:
PT>Есть COM-интерфейс в EXE-модуле, написанный на C++. PT>Клиент, использующий эти методы, написанный на C#. PT>Увидел, что одна из функций COM-интерфейса не используется на клиенте. Решил её вообе удалить. PT>Удалил эту функцию из idl-файла.
PT>Всё компилируется. Сервер EXE запускается. Но при запуске клиента падает на первом же вызове COM-функции. Что надо ещё удалить или исправить?
На что стоит ссылка в C# проекте? Может Interop не перегенерился (или старый используется)
Удалить-добавить ссылку в C# проекте на свою DLL не пробовал (тогда студия сделает новый интероп)?
Здравствуйте, PavelT100, Вы писали:
PT>Всё компилируется. Сервер EXE запускается. Но при запуске клиента падает на первом же вызове COM-функции. Что надо ещё удалить или исправить?
Честно поменять GUID, и всё, что нужно, перегенерится само.
Здравствуйте, PavelT100, Вы писали:
PT>Есть COM-интерфейс в EXE-модуле, написанный на C++. PT>Клиент, использующий эти методы, написанный на C#. PT>Увидел, что одна из функций COM-интерфейса не используется на клиенте. Решил её вообе удалить. PT>Удалил эту функцию из idl-файла.
Никогда не удаляйте методы из уже опубликованных COM-интерфейсов. Если же публичного релиза сервера с этим методом ещё не было, то
* убедиться с помощью любого TLB viewer, что метод пропал из интерфейса (и прокси/диспатч-интерфейсов, связанных с ним)
* удалить старую interop-ассембли и сгенерить новую из свежего билда COM-сервера
Здравствуйте, PavelT100, Вы писали:
>PT На С#-клиенте удалил описание этой функции:
Почему в C# пришлось что-то делать? Я подключал в Reference сгенерённый tlb и все автоматом обновлялось (При изменении интерфейса приходилось reference передобавлять, т.к. студия не детектила изменения).