Как использовать MS DIA SDK из C#?

Я пытаюсь использовать Microsoft Debug Interface Access SDK из C#. Это установлено с Visual Studio, но в документах не упоминается, как вы используете это из C#.

Я нашел пример кода на веб-сайте, но нет информации о том, как связать его с DIA SDK. Т.е. я не могу импортировать его как сборку. Я не думаю, что должен включать его в управляемое приложение C++ и использовать его как COM (это было бы адом).

Есть файл IDL, это правильный путь? Если так, то как?


Редактировать: Следующее создаст библиотеку типов для использования в качестве ссылочной сборки. Вставьте в пакетный файл.

call "%VS80COMNTOOLS%\vsvars32.bat"
midl /I "%VSINSTALLDIR%\DIA SDK\include" "%VSINSTALLDIR%\DIA SDK\idl\dia2.idl" /tlb dia2.tlb
tlbimp dia2.tlb

4 ответа

Решение

Сначала вам нужно конвертировать IDL в typelib:

Что-то вроде:

midl /I "%VSINSTALLDIR%\DIA SDK\include" dia2.idl /tlb dia2.tlb
tlbimp dia2.tlb

Затем вы можете импортировать TLB.

Я никогда не использовал DIA SDK таким образом, поэтому не знаю, насколько он будет дружелюбным. Вы также можете рассмотреть возможность его использования непосредственно из управляемой сборки C++ и представления управляемого интерфейса с необходимой вам функциональностью.

Предыдущие инструкции работали, но нуждались в обновлении. VSINSTALLDIR больше не существует (и неоднозначно, когда у вас установлено несколько версий VS), поэтому я обобщил и исправил инструкции. Вот версия VS 2015:

"%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" amd64
set DIASDK=%VS140COMNTOOLS%..\..\DIA SDK
midl /I "%DIASDK%\include" "%DIASDK%\idl\dia2.idl" /tlb dia2.tlb
tlbimp dia2.tlb

Измените VS140 в соответствии с любой версией, которую вы пытаетесь использовать.

Это создало dia2lib.dll, который я добавил в качестве ссылки - щелкните правой кнопкой мыши по ссылке, Добавить ссылку, Обзор, найдите файл. Это работает, и теперь я могу создавать и запускать сортировку символов.

В случае, если у кого-то возникнут проблемы с путем, вот что сработало для меня на VS 2017.

  1. Откройте командную строку Cross Tools x86_x64 (из меню Пуск / Программы /Visual Studio 2017 в режиме администратора)

  2. cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional

  3. midl /I "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\idl";"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\include" dia2.idl /tlb dia2.tlb

  4. tlbimp dia2.tlb

Dia2Lib.dll сейчас в C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional папка.

Используя его в коде C#, я получил незарегистрированное исключение DLL! Я должен был бежать

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK\bin>regsvr32 msdia140.dll

чтобы решить это

Мне удалось успешно использовать DIA из С# без необходимости вручную создавать библиотеку типов или импортировать библиотеку из исходного кода с помощью Visual Studio 2019. Если COM-серверы зарегистрированы, можно просто добавить ссылку COM в csproj, как это :

      <ItemGroup>
  <COMReference Include="Dia2Lib.dll">
    <WrapperTool>tlbimp</WrapperTool>
    <VersionMinor>0</VersionMinor>
    <VersionMajor>2</VersionMajor>
    <Guid>106173a0-0173-4e5c-84e7-e915422be997</Guid>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
  </COMReference>
</ItemGroup>

Это работает, потому что dll COM-сервера фактически имеет библиотеку типов, встроенную в нее в качестве ресурса.

В качестве альтернативы ссылку можно добавить с помощью пользовательского интерфейса Visual Studio, открыв проект, щелкнув правой кнопкой мыши Зависимости->Добавить ссылку COM..., затем выполните поиск «dia». Запись под названием «Библиотека типов dia 2.0» должна быть доступна, если COM-сервер зарегистрирован.

Зарегистрируйте два необходимых COM-сервера следующим образом, при условии, что у вас архитектура AMD64 и у вас установлена ​​Visual Studio 2019 Enterprise. Путь можно изменить в соответствии с вашей конкретной установкой и архитектурой. Это необходимо сделать из командной строки с повышенными привилегиями (щелкните правой кнопкой мыши и запустите от имени администратора).

      regsvr32 /s "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\DIA SDK\bin\msdia140.dll"
regsvr32 /s "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\DIA SDK\bin\amd64\msdia140.dll"

Разумеется, необходимо установить DIA SDK, что можно сделать, запустив установщик Visual Studio, выбрав «Изменить» для вашей установки, затем выбрав «Разработка рабочего стола с C++» и установив.

Другие вопросы по тегам