【发布时间】:2019-05-18 07:14:11
【问题描述】:
我在 Visual Studio 2017 的 vb.net 中工作。我对 Visual Basic 还是很陌生。我对 VBA 比较熟悉。
我制作了代码原型以访问 Autodesk Vault 2019、下载文件并在 Autodesk Inventor 2019 中打开它。此代码是使用 Visual Studio 中的 Autodesk Inventor 插件模板创建的。代码编译无误并按预期运行。
此应用程序的最终目的是将代码编译为 DLL,然后在另一个软件 (CorelDraw) 中从 VBA 调用该 DLL(带参数)。为此,据我了解,我需要将代码放在类库模板中,以便正确编译为 DLL。
在执行此操作时,我遇到以下代码行的问题:
ActiveInvApp = Marshal.GetActiveObject("Inventor.Application")
“Marshal”来自应用程序开头导入的“System.Runtime.InteropServices”,代码如下:
Imports System.Runtime.InteropServices
问题在于 Visual Studio 无法识别“GetActiveObject”。它用一条红色波浪线突出显示它。当我将光标悬停在它上面时,它会显示工具提示:“'GetActiveObject' 不是 'Marshal' 的成员”。
在撰写本文时,我打开了两个 Visual Studio 2017 实例。一个带有此代码的类库版本,另一个带有 Autodesk Inventor AddIn 版本。 AddIn版本这行代码没有问题,类库有问题。
根据有关创建 DLL 类库的一些说明,我的代码以以下内容开头:
Namespace VaultCOMFunctions
Public Module StringLibrary
<Extension>
Public Sub OpenFromVault(PartNum As String)
'Code for opening the file goes here
我不确定这是否相关。就像我说的,我对 VB.net 有点陌生。
我花了很多时间在参考资料上弄乱,试图解决这个问题,但没有运气。这可能是什么原因造成的?我找不到任何存在类似问题的现有论坛帖子(此处或其他地方)。
【问题讨论】:
-
您是否安装了 ReSharper?有时它的缓存会被破坏,它会开始突出显示(红色曲线)实际正确编译的东西(重新启动 VS 通常会修复它)。
GetActiveObject从一开始就是Marshal的成员,所以......如果解决方案没有建立,请注意错字? -
感谢您的建议!我没有安装那个。此代码是从工作项目中复制和粘贴的。我已经看过至少 100 次了,所以我已经排除了拼写错误。我编辑了原始帖子以添加可能相关的信息。
-
Marshal.GetActiveObject 在 .NET Core 上不可用。确保您引用的是 .NET Framework 而不是 .NET Core。
-
就是这样!这是一个 .NET Core 项目。我将代码复制到一个新的 .NET Framework 项目中,它编译得很好。感谢您的帮助!
标签: vb.net dll com autodesk-inventor