|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.10.2012, 18:32 | #1 |
Регистрация: 16.10.2012
Сообщений: 8
|
Создать dll для использования в Excel на другом компьютере
Появилась необходимость, свои наработки для excel (vba) запихать в dll.
Windows XP Office 2010 .NET Framework v4 Visual Studio 2010 В Visual Studio 2010 VB создаю проект: Проект1 Галочку на : Приложение -> Сведения о сборке -> Сделать сборку видимой для COM Галочку на : Компиляция -> Регистрация для СОМ-взаимодействия Создаю пробную dll. В нем пишу: Код:
Проект2 Создаю новый проект, чтоб протестировать. В нем, подключаю в источниках данных свою dll_ку и пишу: Код:
Проект3 Создаю файл excel, в Tools->References подключаю из проекта_dll файл .tlb В файле пишу макрос: Код:
Теперь переношу на другой комп Windows XP Office 2010 .NET Framework v4 файл exe из проекта 2. Вместе с файлом dll из первого проекта. Запускаю, все ок, работает. Запускаю файл из проекта 3 – на строке MsgBox (qqq.myPlus(2, 3)) выдает: «ActiveX component can't create object» Пробую regsvr32 test.dll выдает: «dll была загружена,но найти точку входа для DLL Register Server не удалось.Зарегистрировать этот файл невозможно.» Как заставить работать эту dll в excel другого компьютера? |
17.10.2012, 10:22 | #2 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Так вы СОМ делаете? А где интерфейсы?
И регистрировать его надо regasm-ом. |
17.10.2012, 14:04 | #3 |
Регистрация: 16.10.2012
Сообщений: 8
|
Спасибо eval.
Regasm – помогло. Создал батник Код:
Код:
Код:
Код:
Или это не находит другое? В этом тестовом проекте, смотрю в «обозреватель решений -> Ссылки» Есть только ссылка на System.dll который находится в «C:\Program Files\Reference Assemblies\Microsoft\Framework\.NET Framework\v4.0\System.dll» Он имеется и на втором компе. P.S. А что Вы писали про интерфейсы? |
17.10.2012, 14:26 | #4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
пробуйте анрегестрировать и потом опять но добавить в конец - /codebase
т.е. C:\1>C:\WINDOWS\Microsoft.NET\Frame work\v4.0.30319\regasm C:\WINDOWS\system32\Connect_B52.dll /tlb:Connect_B52.tlb /codebase |
19.10.2012, 11:53 | #5 |
Регистрация: 16.10.2012
Сообщений: 8
|
Спасибо, что отправили в нужном направлении
Все заработало, и на первом и на втором компе, когда сделал вот так: Код:
|
22.10.2012, 17:08 | #6 |
Регистрация: 16.10.2012
Сообщений: 8
|
С Вашего позволения, прошу еще раз отправить в нужном направлении.
Значит, получилось у меня с 1компа (где есть VS2010) переносить и регистрировать dll файлы. Теперь возникла еще проблема. В dll создал процедуру Код:
Массив и переменную ds обявляю в класе [code Public Class Connect_B52 Implements ompzb52 Dim ds(0 To 3) As String Dim Ohibka As String … [/code] Еще в dll есть функция: Код:
Теперь тестирую dll Код:
Но вот при переносе на 2 комп. в функции «PoluchDostup» происходит ошибка. То есть тест выдает четыре сообщения. Первое «true» (ds(0) = "true"), и три пустые. Если же на втором компе в Exsel-е в макросе вставить процедуру «PoluchDostup» и выполнить ее, подключив «Microsoft ActiveX Data Objects 2.8 Library» все проходит хорошо, выдаются нужные данные. Выудил, что на 2 компе ошибка происходит в строке «Dan.Fields("Server").Value» Из за чего, может, один и тот же код работает в екселевском макросе, а dll нет? P.S. На обоих компах установлен «IBProvider_free_32_3.0.0.8906_RC4. 2» Последний раз редактировалось Filosov; 22.10.2012 в 17:11. |
22.10.2012, 17:17 | #7 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Ниче не понятно.
PoluchDostup какая-то странная... точно она в сом-е ? Все методы которыми хотите пользоваться с наружи должны быть выставлены через интерфейс. |
23.10.2012, 13:38 | #8 |
Регистрация: 16.10.2012
Сообщений: 8
|
Извиняюсь за путаные объяснения. Попробую снова, кое-чего переделав.
Это код dll: Код:
Теперь код в эксельевском файле такой: Код:
Теперь если в ехселе на первом компе запустить процедуры PrimerExsel и Primer выдает одинаковый результат. Когда же я переношу dll и этот самый excel на 2 комп то: процедура PrimerExsel выдает верный результат. А вот процедура Primer нет, то есть в dll не происходит заполнение массива ds(). Получается внутри модуля ексельфайла тот же код работает а dll нет. Выдается ошибка: run-time error '-2146233054(80131522)' Не удалось загрузить тип «ADOBB.ErrorsToIntemalErrorsMarshal er» Если в dll закомментировать Код:
Узнал я это так: в dll файле вместо: Код:
Код:
|
23.10.2012, 13:40 | #9 |
Регистрация: 16.10.2012
Сообщений: 8
|
Так-как в dll проходят эти строки
Код:
Проблема именно на втором компе. Я посмотрел в References «Microsoft ActiveX Data Objects 2.8 Library» ссылается на файл «msado15.dll» на обоих компьютерах они одинаковые версия файла 2.81.3014.0 На первом компе (где VS2010). Работают даже строки Код:
Код:
Повторюсь это на первом компе где VS2010 Надеюсь, этот раз понятней получилось ) |
23.10.2012, 14:18 | #10 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
ну т.е. не лезть в Konekt, а просто закэтчить и вывести. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не работает программа на другом компьютере | MooNDeaR | Помощь студентам | 6 | 04.08.2011 19:23 |
запуск на другом компьютере | kaljan775 | Общие вопросы C/C++ | 3 | 07.12.2010 15:40 |
Как создать в Delphi mp3 плеер? Без использования bass.dll. | megatronx | Помощь студентам | 2 | 10.03.2010 17:15 |
Что необходимо для выполнения на другом компьютере | Sweta | Помощь студентам | 6 | 17.11.2009 10:17 |
Как создать в Дeлфи класс в DLL для использования его в VC++ | Dmitriy.Ch | Общие вопросы Delphi | 0 | 25.07.2009 08:40 |