информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяСтрашный баг в WindowsВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
И еще. 06.06.04 22:33  Число просмотров: 1401
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>
И еще.

Нельзя ли как-то обойти необходимость сразу жестко указать расположение dll в VBA программе? Чтобы макрос искал ее, например, там же, где находится вызывающий файл. Скажем в ..\Library\ ?

А то даже у Уокенбаха написано - поместить в системную директорию.

Да, в path тоже не хочется писать всякий мусор.
<programming>
Вопрос по vba и fortranу - вызов функции из dll 24.05.04 02:44  
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Формально вроде все просто, если правильно понял.
Делаем проект dll-библиотеки (делаю из-под Fortran PS4), после заголовка нужной функции, например testqp, ставим инструкцию !MS$ ATTRIBUTES DLLEXPORT::testqp.
Компилируем, бросаем dll-ку в ...system32 и прбуем вызвать из модуля МВА.
Там пишу
Private Declare Sub testqp Lib "testq" ()
(после некоторой суеты с реальной программой делаю тестовую программку без параметров)
и вызываю
Call testqp

Получаю сообщение, что невозможно найти entry point.
Чего, блин, не хватает?
Инструкции так лаконичны, что промахнуться негде, вроде бы.
В реальной программе можно делать исправления, исходник имеется, но переводить его на МВА импосибельно (более 3000 строк). Больше нигде такую прогу найти не могу, так что нужно работать с fortran"ом.
Может кто подскажет?

И еще. 06.06.04 22:33  
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>
И еще.

Нельзя ли как-то обойти необходимость сразу жестко указать расположение dll в VBA программе? Чтобы макрос искал ее, например, там же, где находится вызывающий файл. Скажем в ..\Library\ ?

А то даже у Уокенбаха написано - поместить в системную директорию.

Да, в path тоже не хочется писать всякий мусор.
можно 07.06.04 01:54  
Автор: Korsh <Мельников Михаил> Статус: Elderman
<"чистая" ссылка>
> И еще.
>
> Нельзя ли как-то обойти необходимость сразу жестко указать
> расположение dll в VBA программе? Чтобы макрос искал ее,
> например, там же, где находится вызывающий файл. Скажем в
> ..\Library\ ?
regsvr32 Name_of_dll.dll
[Win32] хм 07.06.04 12:07  
Автор: paganoid Статус: Member
<"чистая" ссылка>
> > И еще.
> >
> > Нельзя ли как-то обойти необходимость сразу жестко
> указать
> > расположение dll в VBA программе? Чтобы макрос искал
> ее,
> > например, там же, где находится вызывающий файл.
> Скажем в
> > ..\Library\ ?
> regsvr32 Name_of_dll.dll

Это он видимо про DLL, которые через Declare вызываюца, а не про COM компоненты. И регсвр на них -
как мёртвому припарки.

А про необходимость жёстко указывать путь - либо суй в System32, автоматом найдёца, либо в папку, где сам *.exe лежит.
Да, я все про ту же dll, из которой вызывается программа с... 07.06.04 13:15  
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>

Да, я все про ту же dll, из которой вызывается программа с "тяжелыми" вычислениями.

Но кто такой exe-шник, если dll-ка вызывается из надстройки Excel? Во всяком случае, если файл с dll лежит там же, где и надстройка*xla, при простом упоминании имени dll в DECLARE она не находится.

А так как директория самого офиса может быть разной на разных компах, то зашить жесткий путь C:\...\Library\***.dll нельзя. А в DECLARE можно поставить только константу в качестве имени. Т.е. простой путь, определитьpath и задать его в DECLARE не проходит.
не знаю :( 07.06.04 13:54  
Автор: paganoid Статус: Member
<"чистая" ссылка>

> А так как директория самого офиса может быть разной на
> разных компах, то зашить жесткий путь
> C:\...\Library\***.dll нельзя. А в DECLARE можно поставить
> только константу в качестве имени. Т.е. простой путь,
> определитьpath и задать его в DECLARE не проходит.

проблему понял, что посоветовать - не знаю :( Разве что какойнить стартер
написать => грузится XLA №1 => копирует лежащую рядом DLL в System32 => загружает вторую XLA.

Криво.
Но делать, видимо, нечего. Конечно, две XLA не нужны... 11.06.04 22:30  
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> проблему понял, что посоветовать - не знаю :( Разве что
> какойнить стартер
> написать => грузится XLA №1 => копирует лежащую рядом
> DLL в System32 => загружает вторую XLA.
>
> Криво.
Но делать, видимо, нечего. Конечно, две XLA не нужны. Достаточно в рабочей прописать в какой-нибудь функции типа before open() чтоб записала dll в директорию windows.
Просто как-то неаккуратненько, по виндузовому, оставляя мусор после сноса продукта.

Правда, если и сборщик добавить, чтоб в какой-нибудь before close() потиралась dll-ка из системной директории, выгрузив ее предварительно из памяти, то может и ничего?
Даже лучше это сделать при добавлении и удалении надстройки через меню Надстройки.
Попробуем.
функции надо stdcall в фортране делать 24.05.04 10:29  
Автор: paganoid Статус: Member
<"чистая" ссылка>
google: vba declare fortran

http://www.tek-tips.com/gviewthread.cfm/pid/214/qid/773921
Главное alias задать! 26.05.04 00:20  
Автор: vagrant Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Да, я тоже нашел. Спасибо, что откликнулся.
Правда мой запрос небыл так блестящ и в ссылках пришлось долго копаться.
Все дело в декорировании имен, о чем я напроч забыл. Так что когда VBA декорирует имя функции, то в dll он ее, ясен перец не находит. Так что достаточно было воткнуть инструкцию типа
!MS$ ATTRIBUTES ALIAS:'DLL_fracdf' :: DLL_fracdf.
Блин.
Тяжко все же писать сразу на нескольких языках. Пока фортрановскую прогу правишь, забываешь как писать оператор цикла на С++.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach