8

我正在尝试使用 C# 中的 Microsoft调试接口访问 SDK。这是随 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

4 回答 4

15

您需要先将 IDL 转换为 typelib:

就像是:

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

然后你可以导入tlb。

我从来没有这样使用过 DIA SDK,所以不知道它有多友好。您还可以考虑直接从托管 C++ 程序集中使用它,并为您需要的功能提供托管接口。

于 2009-03-30T15:09:07.620 回答
3

以前的说明有效,但需要一些更新。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,我将其添加为参考 - 右键单击​​参考,添加参考,浏览,找到该文件。它有效,我现在可以构建和运行符号排序。

于 2017-01-09T01:00:16.060 回答
3

如果有人对路径有疑问,这对我来说适用于 VS 2017。

  1. 打开 x86_x64 Cross Tools 命令提示符(在管理员模式下从 start/programs/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.dllC:\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

解决这个问题

于 2017-07-25T19:31:22.293 回答
1

我已经成功使用 C# 中的 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>

这是因为 COM 服务器 dll 实际上将类型库作为资源嵌入其中。

也可以使用 Visual Studio UI 添加引用,方法是打开项目,右键单击 Dependencies->Add COM Reference...,然后搜索“dia”。如果 COM 服务器已注册,则名为“dia 2.0 类型库”的条目应该可用。

假设您的架构是 AMD64 并且您安装了 Visual Studio 2019 Enterprise,请按如下方式注册两个所需的 COM 服务器。可以更改路径以匹配您的特定安装和体系结构。这必须在提升的命令提示符下完成(右键单击并以管理员身份运行)。

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 Installer 来完成,为您的安装选择“修改”,然后选择“使用 C++ 进行桌面开发”并安装。

于 2020-12-17T03:21:14.207 回答