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

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

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

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

По статье сделал 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2014, 11:09
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

Пробовал отменить регистрацию через regsrv, но не получилось... результат тот же.
0
458 / 402 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
02.01.2015, 02:11 11
Попробуйте создать тему на VBA форуме, может там что подскажут.
0
02.01.2015, 02:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2015, 02:11
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru