Объедините два .dll для MS Access - PullRequest
0 голосов
/ 08 июня 2018

Я создал проект в Visual studio, используя библиотеку классов и написанный на C # и использующий библиотеку itextsharp .

В проекте есть две библиотеки dll: project.dll и itextsharp.dll

Я хочу иметь возможность использовать этот проект на ноутбуке другого пользователя, чтобы они могли использовать его в MS Access VBA.

Я провел тестовый прогон этого проекта.Я создал библиотеку классов и скопировал файл .dll на компьютер другого пользователя.Затем я зарегистрировал его, используя "regasm testFile.dll /tlb:testFile.tlb / codebase".Тогда я смог открыть MS Access, ссылаясь на файл testFile.tlb в редакторе VBA Access.

Но теперь, когда у меня есть проект с itextsharp, я не уверен, что делать.Я попытался использовать regasm, как описано выше, он создал файл .tlb, он не зарегистрировал его dll.

Я также попытался использовать ilmerge на project.dll и itextsharp.dll, но этоне произвел строгое имя, несмотря на то, что обе библиотеки имеют строгое имя, и, если я правильно понимаю, для работы требуется строгое имя.

Я попытался дать объединенному dll строгое имя, используя sn.exe , но когда я попытался проверить, имеет ли оно строгое имя, используя «sn -v mergeFile.dll», он возвратил «mergeFile.dll не представляет сборку со строгим именем»

Есть ли способ объединить эти .dll в один или есть способ вставить библиотеку itextsharp в project.dll?

1 Ответ

0 голосов
/ 17 июня 2018

Мне удалось выяснить, как использовать iTextSharp в VBA без объединения библиотек DLL.

Чтобы использовать код C # в Access VBA, необходимо иметь возможность добавлять DLL C # в качестве ссылки на редактор Access VBA.,Когда это делалось в DataCam, нам нужно было использовать стороннюю библиотеку с именем ed iTextSharp.dll, которая может усложнить задачу, если вы хотите использовать ее в VBA

. Выполните следующие действия:

В Visual Studio

  • При создании проекта C # выберите шаблон библиотеки классов
  • Загрузите и добавьте библиотеку iTextSharp в свой проект
  • Напишите свойКод C #
  • Перейти на вкладку проекта
    • Выбрать свойства проекта
    • Выбрать вкладку приложения
    • Выбрать информацию о сборке
    • Галочка "Сделать сборку COM видимой "
    • Выберите вкладку" Сборка "
    • Галочка" Регистрация для взаимодействия COM "*
    • Выберите вкладку" Подписывание "
    • Галочка" Подписать сборку "
    • Выберите файл ключа строгого имени
    • Либо используйте существующий файл ключа, либо создайте новый
  • Когда это будет сделано, выберите "Build" вверхняя часть экрана
    • Это создаст файлы DLL, TLB и PDBчто вам нужно будет использовать в VBA, их можно найти в папках bin, Debug проекта

Зарегистрировать файлы

  • Скопируйте файлы DLL, TLB и PDB проекта в папку SysWOW64 компьютера
  • Также скопируйте DLL-файл и файл TLB iTextSharp из той же папки в SysWOW64
  • Откройте командную строку от имени администратора
    • Зарегистрируйте файл DLL проекта, используя команду Regasm.exe
    • Пример 1:
    • Regasm.exe project.dll /tlb:project.tlb / codebase
    • Пример 2:
    • C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe C: \ Windows \ SysWOW64 \ projectName.dll /tlb:projectName.tlb / codebase

В Access VBA

  • Доступ к редактору VBA
  • Выбор инструментов, затем ссылки
  • ВыборTLB проекта и DLL-файлы iTextSharp
  • Теперь вы сможете использовать код C # в VBA

Примечание 1:

Методы C #, которые я написал, могли использоваться в VBA, но мне пришлось исключить скобки

Например.

methodName ("Hello, World") - не работает в VBA

methodName "Hello, World" - работает в VBA

Примечание 2:

Если вы обновили проект и хотите добавить его, VBA обязательно отмените регистрацию старой библиотеки DLL.

Для этого используйте Regasm.exe project.dll / u

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...