Перейти к публикации

Callback Function в Api (2005)


Юрий

Рекомендованные сообщения

Вставил элемент меню с иконкой в SW, связал его с DLL, но, при нажатии, вызов Callback-функции не происходит. Никаких сообщений не выдает. В справке примера нет.

Функция ConnectToSW из SWAddin возвращает нормальный результат.

Ощущение, что я неправильно использую функцию AddMenuItem3. Что нужно передать в параметре"MenuCallback", чтобы она увидела ее?

Если возможно, пришлите фрагмент работающего текста с описанием функции и местом ее регистрации в SW.

Юрий.

Ссылка на сообщение
Поделиться на других сайтах


Визардом пользуешься или сам создаешь проект с нуля?

Менюшка появляется,но при нажатии на неё вызов не происходит - я так понял

Я пользуюсь АПИ SW 2004

success = iSwApp->AddMenuItem2(docType, addinID, item, position, callback, enable, hint, &added);где CComBSTR callback;

callback.LoadString(IDS_MENU_CALLBACK);

IDS_MENU_CALLBACK = MenuEnable - Это название функции

__interface IMyTools : IDispatch

{

[id(2), helpstring("method EnableMenu")] HRESULT MenuEnable([out, retval] long* status);

};

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответ.

Я работаю в Delphi с API SW 2005.

Ты используешь AddMenuItem2, а здесь вместо нее, похоже, AddMenuItem3. В справке по 2005 написана инструкция:

----------

In its implementation of SwAddin::ConnectToSW, the add-in can:

1. Call SldWorks::SetAddinCallbackInfo and pass the instance handle of the add-in and the object that supports the callback methods. The SolidWorks software holds onto this object and makes callbacks.

2. Call SldWorks::AddMenuItem3 and pass the callback method associated with the menu item.

3 .Call SldWorks::AddToolbar4 and pass the callback method associated with the toolbar button.

----------

Вроде, все понятно. Первый этап проходит успешно.

----------

status = SldWorks->SetAddinCallbackInfo ( ModuleHandle, AddinCallbacks, Cookie, &Status )

----------

Второй, вроде тоже, хотя неясно. Пункт меню появляется с иконкой, как положено, нормально нажимается, но дальше ни какой реакции, хоть сто раз нажимай. Главное, никаких сообщений, метод не найден или что-нибудь подобное.

----------

status = SldWorks->AddMenuItem3 ( DocumentType, Cookie, MenuItem, Position, MenuCallback, MenuEnableMethod, HintString, bitmapFilePath, &IsMenuItemAdded)

..........

Input:

(BSTR) MenuCallback

Function to call when this menu item is selected

----------

Но тут же, в справке, непонятная ссылка на AddMenuItem2:

----------

To add a menu separator, specify an empty string for HintString:

' Adds a menu separator

bRet = iSldWorks.AddMenuItem2(swDocNONE, iCookie, "@Sample", -1, "DocNONE_Item", "", "", "")

----------

Или справку не переписали до конца, или ... ?

У тебя callback имеет тип CComBSTR, я так понимаю, это класс COM-строки. Что-же передается в функцию? Идентификатор(номер) метода интерфейса IDispatch или имя метода интерфейса IUnknown?

Ссылка на сообщение
Поделиться на других сайтах

В функцию передается то, что содержится в строке в ресурсах, то бишь строка с названием функции.

А это выписки из АПИ

BSTR MenuCallback - Function to call when this menu item is selected

Но тут же, в справке, непонятная ссылка на AddMenuItem2:

----------

To add a menu separator, specify an empty string for HintString:

' Adds a menu separator

bRet = iSldWorks.AddMenuItem2(swDocNONE, iCookie, "@Sample", -1, "DocNONE_Item", "", "", "")

----------

Это описние как создать сепаратор - разделитель между пунктами в меню

И еще проверь правильное написание Имя пункта в меню

status = SldWorks->AddMenuItem2 ( DocumentType, Cookie, MenuItem, Position, MenuCallback, MenuEnableMethod, HintString, &IsMenuItemAdded )

MenuItem menuItem@subMenuString

Ссылка на сообщение
Поделиться на других сайтах

Должна ли функция быть экспортируемой функцией самой dll-библиотеки, или это функция COM-класса, описанного в библиотеке?

Синтаксис DLL@Function, вроде относится к библиотечной функции, а передача в SetAddinCallbackInfo адреса COM-объекта, вроде говорит о классе, в интерфейс которого включены callback-функции.

Пробовал и так, и так - ничего не получается. Если не сложно, уточни: bstr - адрес первого слова Unicod (двухбайтовой) строки с нулевым словом на конце? Может у меня строка не правильно формируется?

С MenuItem, вроде все нормально. Пункты меню появляются где положено с иконками, как положено.

Ссылка на сообщение
Поделиться на других сайтах
  • 1 месяц спустя...

Спасибо!

Все нормально, за исключением огромного количества глюков в пользовательском интерфейсе и в API. Сырой продукт, но удобный.

Оказывается, вызов пункта меню нормально работает при присоединении Add-in в данном сеансе, т.е. если в меню "Добавить" установить галочку. Если галочка установлена с прошлого сеанса, то пункт меню высвечивается, но Callback-функция не регистрируется и, соответственно ничего не работает.

Юрий

Ссылка на сообщение
Поделиться на других сайтах
  • 1 год спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...