Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17

Как написать Dll для использования в VBA (MS Access 2003)

29.12.2014, 11:09. Показов 3250. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

По статье сделал Dll:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
 
//using System.Data.SqlClient;
 
namespace DBCOM_Object
{
  [Guid("694C1820-04B6-4988-928F-FD858B95C880")]
  public interface DBCOM_Interface
  {
    [DispId(1)]
    string GetData(string id);
  }
 
  // Events interface DBCOM_ObjectEvents 
  [Guid("47C976E0-C208-4740-AC42-41212D3C34F0"),
  InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
  public interface DBCOM_Events
  {
  }
 
 
  [Guid("9E5E5FB2-219D-4ee7-AB27-E4DBED8E123E"),
  ClassInterface(ClassInterfaceType.None),
  ComSourceInterfaces(typeof(DBCOM_Events))]
  public class DBCOM_Class : DBCOM_Interface
  {
    private string cs = "__";
 
    public DBCOM_Class()
    {
    }
 
    public string GetData(string id)
    {
      return cs+id;
    }
 
  }
}
Выложил dll-ку поближе - на С:
В MSAccess пишу объявление:
Visual Basic
1
Declare Function GetData Lib "C:\CloudData.dll" (s As String) As String
обернул в метод класса "API":
Visual Basic
1
2
3
Function GetNum(id As String) As String
  GetNum = GetData(id)
End Function
и вызов:
Visual Basic
1
2
Dim a As New API
MsgBox a.GetNum("AA")
при вызове выдаёт ошибку: Не найдена точка входа в dll для метода GetData
Can't find DLL entry point GetData in C:\CloudData.dll
Что сделано не так?

Добавлено через 23 часа 9 минут
Попробовал использовать Dll в C#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sing System;
using System.Text;
using DBCOM_Object;
 
namespace sd
{
  class Program
  {
    static void Main(string[] args)
    {
      DBCOM_Object.DBCOM_Class y = new DBCOM_Class();
    
      Console.WriteLine(y.GetData("ff"));
      Console.ReadLine();
       
    }
  }
}
Работает!

А в VB - нет. Почему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2014, 11:09
Ответы с готовыми решениями:

Как создать правильный DLL для использования в VBA макросе CorelDraw
Есть скрипт на VBA для CorelDraw Нужно спрятать важные процедуры в DLL, написанную в Visual Studio 2017 используя язык VisualBasic.NET....

Написать правильно запрос для Access 2003
Здравствуйте уважаемые форумчане :) Помогите разобраться с запросом Вот таблица нужно посчитать количество различный типов...

Написать dll для дальнейшего использования в программах на других языках
как правильно написать dll чтоб ей можно было пользоваться программам на других языках, например, на delphi

10
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
29.12.2014, 23:56
в файле AssemblyInfo.cs
C#
1
[assembly: ComVisible(true)]
по умолчанию стоит false.
перестройте решение и попробуйте
1
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17
01.01.2015, 20:26  [ТС]
Спасибо большое Prog_maker.

Только при перемещении dll, её становится невозможно подключить через References.

Как можно перерегистрировать местоположение dll- и tlb-файлов?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
01.01.2015, 21:57
Я может не понял вопроса, при перемещении dll в другое место, в references надо указать пусть к этой dll и она подключиться
0
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17
01.01.2015, 22:46  [ТС]
Дело в том, как оказалось, что подключается не сама dll, а tlb-файл, который и указывает на Dll.
Если переместить эту пару в другую папку, то становится невозможно подключить tlb-файл в References - ссылка просто не появляется в списке.
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
01.01.2015, 23:22
dll и tlb должны в одной папке лежать

Добавлено через 19 минут
Я может не догоняю, вы имеет ввиду references - VBA project?
0
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17
02.01.2015, 00:15  [ТС]
Да, dll и tlb-файлы лежат в одной папке.
Но, когда я меняю их местоположение , то не могу их подключить к VBA проекту.
Формально регистрация проходит, но путь указан неверно (старое местоположение файлов). И при запуске, выскакивает ошибка (см скриншот).

Как я понимаю, их нужно как-то разрегистрировать, а потом снова зарегистрировать в системе, указав папку,где они находятся (нужную мне, а не ту в которую компилируется DLL-проект.
Миниатюры
Как написать Dll для использования в VBA (MS Access 2003)  
0
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17
02.01.2015, 00:21  [ТС]
Но, когда я меняю их местоположение (допустим переношу их в папку C:\Program Files\API_project\ ), то не могу их подключить к VBA проекту.
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
02.01.2015, 00:42
Да действительно такая проблема есть, я у себя тоже попробовал, такая же фигня. Ладно ща будем искать решение )

Добавлено через 9 минут
Честно скажу, я VBA уже подзабыл, может решение есть тут
http://support.microsoft.com/kb/308340
0
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 17
02.01.2015, 01:30  [ТС]
Мне кажется что проблема не в VBA, а в регистрации OLE-server, которая происходит при сборке проекта.

Пробовал отменить регистрацию через regsrv, но не получилось... результат тот же.
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
02.01.2015, 02:11
Попробуйте создать тему на VBA форуме, может там что подскажут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.01.2015, 02:11
Помогаю со студенческими работами здесь

Нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате Access 2003?
Здравствуйте! Подскажите пожалуйста, нужно ли устанавливать Access 2003, если в Access 2016 итак возможно разрабатывать БД в формате...

Access 2003 VBA поиск
Дали задание создать VBA поиск по 3 значениям. В базе sport_club поиск в форме "poskuk", выводит лишь первые 2 поля вместо 3-х,...

Поле со списком. VBA в MS Access 2003
Здравствуйте! Я создал форму..на ней одна кнопка и 4 поля со списком выбора телевизора. Когда нажимаю на кнопку должна появиться форма с...

Нужны отдельные программы установки для Access 2003 и Excel 2003
Доброго времени суток. Нужны отдельные программы установки для Access 2003 и Excel 2003. Если будут с аптекой, то хорошо. Кто знает где...

MS Access 2003 как открыть отчет для редактирования
Модератора прошу прощения за то, что два вопроса в одной теме. Мне 79-й год, не судите меня и не обзывайте дураком, сам не думал, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru