Как использовать метод из VB6 dll в .NET? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть ActiveX VB6 DLL (нет доступа к ее источникам), и я хочу вызвать метод 'GetUnitInfo'

Я использую его для импорта, как:

[DllImport(@"C:\Users\R\Documents\lab.dll")]
public static extern long GetUnitInfo(String strRequest, String strInfo, String strName);

Но я получаюисключение:

Невозможно найти точку входа с именем 'GetUnitInfo' в DLL

Также я попытался загрузить ее:

Assembly myAssembly ;
myAssembly = Assembly.LoadFile("C:\\Users\\R\\Documents\\lab.dll");

но получаю исключение

Модуль должен содержать манифест сборки.(Исключение из HRESULT: 0x80131018)

Я попытался очистить решение, отключить манифест в настройках проекта, создать новый файл манифеста, но мне это не помогло ...

1 Ответ

0 голосов
/ 27 сентября 2018

Найденное решение, м.б., кто-то другой найдет полезным, (это работало в моем случае):

  1. Создание .Net-оболочки VB6 ActiveX dll

    1.1 Запустите CMDкак администратор

    1.2. Переместить в папку .NET SDK - cd C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ (в моем случае).

    1.3 Запуск - TlbImp.exe C:\path_to_old.dll \out: new.dll

  2. Регистрация ActiveX dll

    2.1 Запуск CMD от имени администратора

    2.2 Запуск - regsvr32.exe C:\path_to_old.dll

  3. Добавить ссылку на преобразованную dll ("new.dll") в проекте c #

Я использовал для добавления ссылки "new.dll" раньшепри регистрации файла old.dll возникла следующая исключительная ситуация

Получение фабрики классов COM для компонента с CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B} не удалось из-за следующей ошибки: 80040154 Классне зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Чистящий раствор, удаление ссылки и последующие шаги 2,3 - помогло

Вы также можете найти полезными эти статьи

C-Sharp-and-activex-dll

Ошибка добавления ссылки на dll: Solution tlbimp.exe

...