【问题标题】:GetActiveObject is not a member of MarshalGetActiveObject 不是 Marshal 的成员
【发布时间】: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


【解决方案1】:

@Simon_Mourier 在原始帖子的 cmets 中发布了答案。 Visual Studio 项目的目标是 .NET Core。为了解决这个问题,我只是将项目切换到目标 .NET Framework,错误就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2014-08-10
    • 2014-10-30
    • 2013-09-25
    • 2017-08-21
    • 2019-07-30
    相关资源
    最近更新 更多