相关疑难解决方法(0)

如何使用后期绑定来获取excel实例?

我正在使用

[DllImport("Oleacc.dll")]
static extern int AccessibleObjectFromWindow(
int hwnd, 
uint dwObjectID, 
byte[] riid,
ref Excel.Window ptr);
Run Code Online (Sandbox Code Playgroud)

使用他的句柄获取Excel实例,我从excel实例的进程ID获取.

这就是我使用这些功能时的样子

const uint OBJID_NATIVEOM = 0xFFFFFFF0;
Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
Excel.Window ptr = null;  
int hr = AccessibleObjectFromWindow(hwndChild, OBJID_NATIVEOM, 
          IID_IDispatch.ToByteArray(), ref ptr);

Object objApp = ptr.Application;
Run Code Online (Sandbox Code Playgroud)

这种代码安静很有效,但唯一的问题是我必须添加对Office 2003主互操作程序集的引用.

正如你所看到的,函数中的最后一个参数是我需要添加对Pias的引用的原因,所以我的问题是如果有一种方法可以避免使用Interop程序集,我尝试过后期绑定但是也许我一直在做错,因为我无法让它发挥作用.

c# excel

18
推荐指数
2
解决办法
1万
查看次数

是否可以在PowerShell会话之间传递com对象的实时实例

我有一个第三方应用程序,到目前为止使用插件与quickbooks交谈.该插件不再适用于最新版本的Windows操作系统,因此我将使用PowerShell脚本替换它.插件将实现QBXMLRP.RequestProcessor com对象,然后打开连接并开始与QuickBooks的会话,处理来自我的应用程序的各种请求,然后关闭并断开与quickbooks的连接.连接打开时,QuickBooks提供的票证用于处理来自我的应用程序的任意数量的请求.

使用PowerShell,我执行命令行提示以"PowerShell"启动PowerShell,并运行PowerShell .ps1脚本文件.正如插件所做的那样,PS脚本实例化com对象,打开qb连接,开始qb会话,发送qb请求,结束qb会话,关闭qb连接.

这很好用,除了与插件不同,我在使用QuickBooks的单个打开会话期间无法从我的应用程序发送多个请求.一旦我发出命令行提示符,PS脚本会执行此操作并且PS退出并且com对象丢失.无论如何,它们是保留qb com对象的实时实例并在后续PowerShell会话中重用它...

我的应用程序发出命令行提示符以运行开始qb会话的PowerShell ...

(.ps1 script)    
$myqbxmrlp = New-Object -com QBXMLRP.RequestProcessor
$myqbxmrlp.OpenConnection(...)
$ticket = $myqbxmrlp.BeginSession(....) 
$ticket | Export-CliXml $ticket (or set-content)
?? preserve the live $myqbxmrlp com object ??
Run Code Online (Sandbox Code Playgroud)

我的应用程序发出命令行调用打开PS Session 2发送请求到qb ...

(.ps1 script)    
$myqbxmrlp = ?? get the live com object back ??
$ticket = Import-CliXml $ticket (or get-content)
$myqbxmrlp.ProcessRequest($ticket,....)      
Run Code Online (Sandbox Code Playgroud)

用另一个请求打开PS Session 3的命令行调用...

用另一个请求打开PS Session 4的命令行调用...

命令行调用打开PS Session 5并结束qb会话并关闭qb连接...

(.ps1 script)    
$myqbxmrlp = ?? get the com object back ??
$ticket = Import-CliXml $ticket …
Run Code Online (Sandbox Code Playgroud)

powershell quickbooks

5
推荐指数
1
解决办法
367
查看次数

标签 统计

c# ×1

excel ×1

powershell ×1

quickbooks ×1