Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mopemah Гость
|
Добавлено: Пн Окт 28 2002 17:48 Заголовок сообщения: VC++ and Excel |
|
|
Проблема такая: Надо сделать VC++ dll, в которую поместить маленькую экспортируемую функцию. С этим проблем нет. Но эту функцию надо вызывать из Excel'а примерно так '=MyDLL.dll!MyFunc()' ну или как-нить похоже. Что я пробую сделать: из Excela вызываю функцию регистрации '=REGISTER.ID("MyDLL.dll", "MyFunc","B")' (последний параметр согласно MSDN показывает, что функция должна вернуть double) Нормально, регистрируется, возвращает какую-то цифирю, которая, видимо, является идентификатором моей функции. Но вот дальше - вызвать мою функцию не удается. Пляски с бубном не помогают. Хорошо, пробую другой вариант: с помощью OLE в своей программке создаю инстанс Excela и пытаюсь вызвать функцию регистрации моей dll'ной функции. Попытка приводит не к регистрации (как ожидалось!) а к вызову моей функции, результат вызолва корректный, все хорошо, но мне надо функцию вызывать из Excela!!!! Вобщем полный ступор, помогите, кто чем может, ссылками, примерами кода, хоть на барсике... |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Окт 28 2002 18:33 Заголовок сообщения: Предлагаю, но не гарантирую. Если не получится, бери пример OLE-клиента-сервера на MSDN (тьфу, пакость, весь реестр мне загадил |
|
|
Если есть файл имя_файла0.def со словом EXPORTS, то попробуй такое:
Declare Function имя_функции Lib "имя_файла1.DLL" (параметры) As возвращаемый_тип
Если файла имя_файла0.def нет, то попробуй такое:
Declare Function имя_функции Lib "имя_файла.DLL" Alias "экспортируемое_имя" (параметры) as возвращаемый_тип
"экспортируемое_имя" узнай из карты имен (DLL-ку откомпилируй с созданием карты имен)
Дальше просто вызывай функцию без всяких регистраций |
|
Вернуться к началу |
|
|
mopemah Гость
|
Добавлено: Пн Окт 28 2002 19:04 Заголовок сообщения: Re: Предлагаю, но не гарантирую. Если не получится, бери пример OLE-клиента-сервера на MSDN (тьфу, пакость, весь реестр мне заг |
|
|
Спасибо, попробую. Собственно, проблему решил. Оказывается для регистрации dll'ной функции в Excele из С надо пользовать не Excel::_Application.Run(...) , а Excel::_Application.ExecuteExcel4Macro( "REGISTER(bla-bla-bla)" ) |
|
Вернуться к началу |
|
|
|