- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将一个用 VB6 编写的相当大的项目转换为 C#。考虑到正在迁移的项目的规模,它将在 18 个月的时间内分阶段完成。我在将 VB6 ActiveX dll 的引用添加到 .Net 项目时遇到了问题。
如果您完全按照这些步骤操作,您也应该能够重现问题。
我在 .Net 中编写了一个 COM 可见的接口(interface):
<ComVisible(True)>
Public Interface ITestInterface
Property A As String
Function TestMethod() As String
End Interface
通过在项目属性的“编译”选项卡中选择“注册 COM 互操作”,您将获得一个 TLB 文件。
我创建了一个引用此 TLB 的 VB6 项目和一个实现公开接口(interface)的类。
Implements ITestInterface
Private mA As String
Public Property Get ITestInterface_A() As String
ITestInterface_A = mA
End Property
Public Property Let ITestInterface_A(ByVal value As String)
mA = value
End Property
Public Function ITestInterface_TestMethod() As String
ITestInterface_TestMethod = "From VB6"
End Function
如果我在 VB6 中将项目属性的组件选项卡设置为使用“远程服务器文件”,那么在编译时会自动创建一个 TLB。我可以在 OleView 中查看该 TLB 并看到以下内容(除了 .Net 项目中定义的接口(interface)在 VB6 中完成的具体实现的细节之外):
// typelib filename: TestVB6Interface.dll
[
uuid(**EF005573-BFC7-436D-A382-F906CA09F94A**),
version(3.0)
]
// ... some other stuff
// TLib : // TLib : : {79EC733A-0267-4506-8D38-C4D4655E0755}
importlib("SimpleDotNetLibrary.tlb");
现在,我创建了一个全新的 .Net 项目。如果我添加对 VB6 dll 的引用,我会收到以下错误:
无法解析 COM 引用“ef005573-bfc7-436d-a382-f906ca09f94a”版本 3.0。类型库导入程序在类型验证期间遇到错误。尝试在没有类成员的情况下导入。
但是,如果我启动 Visual Studio 命令提示符并运行以下命令:
tlbimp TestVB6Interface.tlb /out:TestVB6Interface.MyInterop.dll
然后我可以将该 dll 作为引用添加到我的 .Net 解决方案中,它工作得非常好。
我的问题。当我直接添加引用时,tlbimp 在命令行上做了什么而没有完成?当 Visual Studio 中的消息说“尝试在没有类成员的情况下导入”时,我在 Visual Studio 中究竟该怎么做?我知道如何在 tlbimp 中做到这一点。
我为文字墙道歉,但我想尽可能地描述情况,保留我认为相关的信息。
最佳答案
Visual Studio IDE 在为 COM Interop 注册 DLL 时肯定会采用不同的路径,而在从命令提示符运行命令行工具时会采用不同的路径。
我怀疑 Microsoft 是否在任何地方对此进行了记录。然而,我多年的经验证明确实如此。我曾经遇到过这样一种情况,来自 .NET 2.0 Framework 的“regsvcs”命令实际上会导致无限循环。如果你谷歌它,你可能会发现其他人遇到过这个问题。通过使用 VS IDE 执行 .NET 服务组件的 COM 注册,我能够更进一步。然而,它不可避免地以错误告终。该错误是无限循环向前迈出的一步。不管怎样,它向我证明了 VS IDE 在处理 COM Interop 和注册表项时采用不同的代码路径/业务逻辑。
关于c# - 在 Visual Studio 中添加 VB6 引用会得到 "Type library importer encountered an error during type verification",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553705/
我刚刚通过更改 import * as CodeMirror 修复了一个错误简单明了import CodeMirror . 我复制了this code . (从 TypeScript 移植) impo
我调试(在 PyCharm 中)一个脚本。我在断点处停止,然后转到调试控制台窗口,然后从那里调用导入行,如下所示: import my_util1 from my_utils 然后我调用 my_uti
谁能给我解释一下 import 语句是如何工作的? 例如,我在 myapp/app/models 包中有一个类型 User: package models type User struct {
我想导入 Control.App进入一个引用 PrimIO.PrimIO 的模块通过不合格的名称 PrimIO在很多地方。当然,问题在于 Control.App还导出一个名为 PrimIO 的定义.我
我应该使用 from foo import bar 或者 import foo.bar as bar 当导入模块 还有无需/希望更改名称 (bar)? 有什么不同吗?有关系吗? 最佳答案 假设 bar
我正在 Windows 上使用 Theano 进行深度学习实验的第一步,我很惊讶仅仅加载库需要多少时间。 这是小测试程序: from time import time t0 = time() impo
在 TypeScript 中,如何在不创建任何别名的情况下从文件“导入 *”? 例如我有一个包含顶级导出函数的文件“utils”,我想导入所有这些函数而不为每个函数重新创建别名。 像这样: impor
我应该使用 from foo import bar 或 import foo.bar as bar 当导入模块并且不需要/希望更改名称(bar)? 有什么不同吗?有关系吗? 最佳答案 假设bar是fo
这个问题在这里已经有了答案: Use 'import module' or 'from module import'? (23 个回答) 关闭8年前。 我想知道代码片段之间是否有任何区别 from u
我试过了 from urllib import request mine = request.Request() 和 import urllib.request mine = urllib.reque
所以,我有一个关于 Python 导入的小谜团。我确信出于某种原因事情应该是这样的,因为 Guido 很少出错。但是,为什么会这样呢? $ cat myModule.py #!/usr/bin/pyt
我们正在将 Rails 3.2 应用程序升级到 Rails 4.0。 我们有一个 assets/stylesheets/application/index.css.sass加载一些其他 sass 文件
我正在开发一个相当小的 Typescript 代码库,该代码库已经足够大,可以拆分到多个文件中。这是一个二十一点游戏。我目前有一堆代码,看起来像: var player = new Player();
是否可以以当模块为 use 时的方式编写模块? d 没有显式导入所有子例程都被导入,当它是 use d 显式导入只有这些显式导入的子程序可用? #!/usr/bin/env perl6 use v6;
这个问题在这里已经有了答案: how to watch changes in whole directory/folder containing many sass files (9 个回答) 5年前
我真的很难让它在 xcode 4 中工作。 我有一个项目将在许多应用程序(网络)中重用,因此我创建一个工作区并添加我的两个项目。到目前为止,一切都很好....这就是失败的地方.. #import "J
经典提取器和新提取器之间的主要区别是什么,哪个最好用? 最佳答案 经典提取器使用原始工作流程,与爬虫和连接器相同。 新的提取器更加精简,通常看起来和感觉都更好,并且经典提取器中的许多小错误已在新提取器
在处理 google webfont import mixin 时,我注意到无法动态构建 @import URL。 .gFontImport (@name, @weights, @subsets) {
我正在关注Django 1.8 tutorial 。在我的项目中mysite ,有一个源文件夹polls 。文件夹中有views.py模块其中 index函数已定义。还有一个urls.py文件: fr
我想使用名为 warp 的第三方库编译一个简单的 Rust 程序: [package] name = "hello-world-warp" version = "0.1.0" [dependencie
我是一名优秀的程序员,十分优秀!