首页 > 解决方案 > 使用 C# Marshall.GetActiveObject 获取目标的特定实例

问题描述

我打开了多个 MS Access 实例,以便我可以 Alt-TAB 在它们之间切换。我正在尝试将我的 C# 代码连接到特定的 Access 实例,但该Marshal.GetActiveObject("Access.Application")调用要求任何 Access 应用程序,而不是特定的应用程序。

我尝试了文档,但所有GetActiveObject示例都使用“XXX.Application”而不是特定的文件名或路径名。

有什么方法可以连接到特定的数据库?我尝试使用数据库的路径名,但它导致了 COMException "Invalid class string" 错误。

using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Access;
using Microsoft.Office.Interop.Access.Dao;  // *MUST* have DAO as well
using Access = Microsoft.Office.Interop.Access; // Access = a namespace qualifier

[TestMethod()]
  public void MsAccessComInteropTest() {
    // explicitly cast the object to an Access.Application
    var app = (Access.Application) Marshal.GetActiveObject("Access.Application");
    Dprint($"{app.Name}"); // prints Microsoft Access
    Dprint($"{app.CurrentUser()}"); // prints Admin

    var db = app.CurrentDb();
    Dprint($"{db.Name}");    // this is not the database I want to connect to

}

标签: c#ms-accesscom

解决方案


推荐阅读