c# - 使用 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
}
解决方案
推荐阅读
- javascript - 如何接受来自 Botkit 听到方法的多个值?
- apache-zookeeper - Zookeeper 中的 upconfig 和 downconfig 是什么?
- python - 无法使用 pip3 安装 eth-testrpc
- java - javax.validation 约束,给某个属性的属性添加违例
- docker - 将链接 docker 容器与网络混合
- python - GeoPandas .to_file 给出了错误的列?
- python - Python Pandas- Groupby 列获取 Pandas 数据框列中的两个峰值
- macros - 用户更改已编译宏中的变量
- javascript - React + .jsx + Spread Operator -- 添加样式?
- mysql - 哪个数据库和索引最适合这种情况?