问题标签 [tlbexp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
378 浏览

c++ - 互操作程序集引用了 .NET 框架的哪些功能?

我们有一个包含大约 90 个项目的 Visual Studio 解决方案。它们中的大多数都是针对 DLL 文件构建的,有些是用 C++ 编写的,有些是用 C# 编写的。项目通过 COM 相互通信。我们使用 tlbexp 来生成一些 C# 项目(在 C++ 项目中引用的那些)的 TLB 文件。我们使用 tlbimp 生成 C++ 项目的互操作 DLL。我没有完全深入这个话题,但我认为,互操作文件只是定义了 C++ 类的接口,使它们可以在其他项目中使用,对吗?

现在,问题如下:为了将整个解决方案升级到 Visual Studio 2015 并让它针对 .NET 4.6.1 进行编译,我使用 JetBrains 的 dotPeek 检查了生成的程序集。我可以看到,所有 C# 项目都正确使用 .NET 4.6.1,C++ DLL 本身是本机的,不引用任何 .NET。现在,令我惊讶的是,dotPeek 告诉我,互操作 DLL(由 C++ 项目产生)正在引用 .NET 4.0。

在尝试让他们参考 .NET 4.6.1 和大量研究之后,我终于没有找到任何方法让互操作参考 .NET 4.6.1。这甚至可能吗?我目前的猜测是,所有像这个参考一样生成的互操作 DLL 只是基本的 .NET 4.0,只是因为它使用与 .NET 4.6.1 相同的 CLR。

那正确吗?应该可以在任何安装了 .NET Framework 4.6.1 的系统上执行程序集,不是吗?

0 投票
1 回答
345 浏览

c# - 解析 .net tlb 引用


现在我正在编写一个.net dll,它应该可以在 VBA 代码(Excel、Access 等)中使用。以下设置工作正常:

通过引用生成的 tlb 文件,我可以正确使用 Property 以及 Disconnect 函数,但是调用 Login 函数会导致问题(Excel 中的“文件未找到”消息框),我猜这与引用的 BouncyCastle 的使用有关。

处理对 com 可见库中其他 .net 程序集的引用的最佳方法是什么?到目前为止,我尝试向 GAC 注册 bouncycastle 没有成功。

谢谢 :)

0 投票
2 回答
4479 浏览

.net - .NET Core 2.1 - 如何创建 COM 对象并生成 *.tlb 文件

我想在 .net Core 中构建 COM 对象,然后通过 RegAsm 注册。

我的 .csproj 文件:

我的程序.cs:

在 .netcore2.1 目标框架中发布项目后,我无法使用来自 c:\Windows\Microsoft.NET\Framework64\v4.0.30319 的 RegAsm 注册 COM。

将项目发布到 net4.7.2 后,我可以通过 RegAsm 注册程序集,然后在 CPP 项目中使用它。

我也无法使用 TblExp.exe 从 .net 核心项目生成 tlb 文件。

看起来很奇怪。我可以注册 .Net 标准程序集。如果我使用上述源代码和 csproj 创建 .Net 标准库:

然后 RegAsm 效果很好

但是我不能注册.Net Core 程序集吗?

0 投票
1 回答
222 浏览

c# - “公共结构包含一个或多个将被导出的非公共字段” - 但是没有字段?

我有下面的结构,它正在为 COM 互操作编译。我收到以下构建警告:

警告:类型库导出器警告处理“MyNamespace.MyStruct.k__BackingField,MyAssemblyName”。警告:公共结构包含一个或多个将被导出的非公共字段

但我看不出它指的是什么——根本没有非公共领域或领域。也许编译器正在生成我看不到的东西?这个警告是什么意思,如果我能做些什么来清理它?

这是正在构建的(稍微清理过的)代码:

为了更好地衡量,这里是生成的 IDL:

由 OleView 生成。我可以看到它包含与k__BackingField警告中相同的内容 - 但不清楚这意味着什么。

0 投票
1 回答
152 浏览

c# - C# 结构的属性在 COM 和 VB6 中获得不可用的名称?

我的 C# 代码有一个struct我要导出到 COM 的代码。该结构的属性带有奇怪的名称,在 VB6 中甚至不是有效的语法,因此无法访问它们。

有没有办法让这些以正常、可用的名称导出?我错过了一个属性还是什么?


COM/VB6 中名称的格式为:

只有original_name部分在我的 C# 代码中。

我只能在 VB6 对象浏览器中看到这些疯狂的属性名称,Intellisense 不会显示它。

这是正在构建的(稍微清理过的)代码:

为了更好地衡量,这里是生成的 IDL:

如 OleView 所示。我可以看到它包含与k__BackingField上述相同的内容。因此,这些名称似乎来自 C# typelib 导出过程。

0 投票
0 回答
129 浏览

visual-c++ - VC++ DLL 项目中缺少 Visual Studio 2017 选项卡 MIDL

请为 Visual C++ DLL 项目生成 TLB 文件的任何想法。加载项目属性时,我的项目没有选项卡 MIDL。

在此处输入图像描述

0 投票
0 回答
215 浏览

c# - 注册 COM 互操作 (.tlb),包括程序集 (.dll) 引用

我正在尝试注册我的 Classlib.dll,以便将 COM 互操作与 regasm.exe 工具一起使用。一般来说,这不是问题。

像这样:> regasm.exe MyAsm.dll /tlb: MyAsm.tlb

但现在我在我的 classlib 项目中使用了 .dll 引用。一般注册仍然有效,但 dll 引用丢失并且功能无用。

我确信有一个简单的解决方案,因为通过 VisualStudio 构建设置的自动注册工作正常。

那么如何手动调整我的脚本呢?

我目前的做法是:

  1. 使用选项: regasm /asmpath
  2. 使用工具:Tlbexp.exe、Tlbimp.exe

我目前的信息来源:

由于纪录片非常有限,而且我是 COM 主题的新手,如果您能帮助我,那就太好了。

0 投票
0 回答
183 浏览

.net-core - .NET 核心项目中 tbleexp 的路径是什么?

我正在尝试为 F# DLL 导出 TLB 文件。对于最高 4.8 的 .NET Framework,以下自定义构建命令有效:

我已切换到 .NET 6.0 (Visual Studio 2022),并且TargetFrameSDKToolsDirectory指向

查找 .NET Core 6.0 版本的 tlbexp 的等效变量是什么?