问题标签 [com-server]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
16094 浏览

excel - Excel 2007 UDF:如何添加函数描述、参数帮助?

说明

我正在 COM 服务器中编写几个 Excel UDF。我想获得按fx时获得的标准帮助(插入函数对话框) 。是的,我可以在“类别”下拉列表中看到我的 COM 服务器,但是

  • 我还看到了 Equals、GetHashCode、GetType 和 ToString(它们对于 Excel 用户来说是相当不希望的),
  • 选择我的 COM 服务器会弹出 *Function Arguments*[1] 对话框,其中没有参数信息和函数描述。

这是我得到的跛足:

插入函数对话框 http://www.iwebthereforeiam.com/files/Insert%20function%20dialog.gif

Excel 函数参数对话框 http://www.iwebthereforeiam.com/files/Function%20Arguments%20dialog.gif

问题

是否有 .NET 属性可以放在将其传递给 Excel 的方法上?

  • 我可以提供功能的描述吗?
  • 我可以提供参数的描述吗?
  • 我可以为我的函数提供一个类别名称,以便获得比 ProgID 更好的东西吗?

(我发现它在 ExcelDNA 中看起来很容易做到,但我不会走那条路。模拟 govert 的代码 [自定义属性、某种加载器等] 看起来会很困难。)


附加背景

如果您之前没有使用过 Excel + COM 服务器,这里有一些有用的资源可以帮助您快速上手:

以前的 StackOverflow 问题:
如何在自动化服务器列表中安装并注册用 VB.NET 编写的 COM Server for Excel?
如何将 COM 公开的 .NET 项目添加到 VB6(或 VBA)引用对话框?

其他资源:
在 .NET 中为 Excel 编写用户定义的函数
构建和部署 .NET COM 程序集
在 C# 中编写自定义 Excel 工作表函数


编辑 2009-10-20 14:10

我尝试调用Application.MacroOptions一个Sub New().

  1. 否 Sub New()
    半可接受:函数列在 ProgID 类别下。
  2. Shared Sub New()
    不可接受:构建时错误。
    /blockquote>
  3. Sub New()
    不可接受:类别未在“插入函数”对话框中列出。

我怀疑这对于 MacroOptions 和 Charles 推荐的更复杂的路线都是一个问题。


编辑 2009-10-20 14:55

从好的方面来说,Mike 建议创建一个接口来实现确实消除了暴露出来的烦人的额外方法。


编辑 2009-10-20 15:00

这篇 2007 年初的 Microsoft 文章(通过Mike 的链接)似乎是关于该主题的一个相当完整的答案:

自动化插件和函数向导

每个自动化加载项在 Excel 函数向导中都有自己的类别。类别名称是插件的 ProgID;您不能为自动化插件功能指定不同的类别名称。此外,无法在函数向导中为自动化加载项函数指定函数描述、参数描述或帮助。


1嗯,一个 StackOverFlow 错误。看起来您不能将显式 HTML ul-list 中的字符串斜体化?

0 投票
2 回答
137 浏览

c++ - 进程外 COM 服务器 - 无法创建文件

我正在尝试在其主线程中从进程外 COM 服务器运行以下代码,但是从未创建任何文件。

我想知道是否有人可以告诉我这是为什么?

0 投票
2 回答
1891 浏览

winapi - 获取 COM 服务器的进程 ID

我正在通过将 Windows 消息直接发送到 HWND 和调用自动化应用程序公开的 COM 服务器相结合来进行一些自动化。

如果有多个实例在运行,我需要能够确定 COM 服务器的进程 ID,以便我可以通过 COM 调用访问同一个实例,作为我向其发送 Windows 消息的实例。

我可以用正在运行的对象表枚举所有正在运行的 COM 服务器并取回它们的名字,但是 COM 对象本身没有公开任何方法,我可以使用它来获取窗口句柄、线程 ID、进程 ID 或任何类似的东西.

有没有办法根据名字对象或名字对象的实际绑定 COM 对象来确定 COM 服务器的进程 ID 是什么?

谢谢!

0 投票
1 回答
211 浏览

.net - 在不释放 .net 中的 com 对象的情况下杀死 COM 服务器有什么害处吗?

伙计们-我在.net中创建了许多COM服务器(我正在启动许多EXE),通过COM-interop与COM对话,在服务器中使用许多COM对象等。如果我终止进程,有什么危害吗?不释放我通过 Marshal.FinalReleaseComObject() 使用的所有 COM 对象有什么不好的吗?随着时间的推移,我会出现内存泄漏吗?

0 投票
1 回答
526 浏览

windows - 具有多个客户端的 Windows Com Server 是多线程连接的吗?

我有一个以下列方式启动的 com 服务器:

我的问题是,如果多个客户端连接到此 COM 服务器,它是否以同步方式处理请求(对 com 服务器托管的 com 对象的函数调用)?

我问的原因是因为以下情况: Client AClient B都连接到Com Server C。他们都发出一个请求,这个请求涉及使用 COM 对象从数据库中检索下一个项目(在我的例子中是订单)。不应允许两个客户端拥有相同的项目,因此基本上发生的情况是,当从数据库中检索并返回给客户端时,每个项目都被标记为已使用。

如果有 2 个客户端连接到同一个 COM 服务器,是否足以在上述场景中将数据库中的项目标记为已使用而不用担心竞争条件?如果请求是同步处理的,我认为只需将项目标记为已使用就可以了。

0 投票
1 回答
335 浏览

c++ - tlibimp.exe 输出在不同的操作系统上有所不同

我正在尝试使用 tlibimp.exe(版本 11.0)导入第三方 .NET 类型库(COM 服务器 DLL)。这基本上可以正常工作,但是当我在不同的计算机上运行它时,结果会有所不同,一台运行 Windows XP,另一台运行 Windows 7。更糟糕的是,在 Win7 机器上生成的代码无法编译。

两台机器都有:

  • Borland C++ (RAD 工作室) 2007
  • tlibimp.exe 版本 11.0
  • 安装了相同的 .NET 框架版本(据我所知,Borland 2007 使用 .NET v2)
  • bcc32.exe 版本 5.93

编译器在 OCX.h 中失败:

XP机器上的相关代码行(编译正常)是:

Win7机器上的同一行(失败)是:

现在我不确定这种差异来自哪里。有任何想法吗?

干杯亨德里克

0 投票
2 回答
193 浏览

ruby - 用 Ruby 创建 COM 服务器?

Windows 上的 Ruby 具有允许 Ruby 充当 COM 客户端的 win32::ole 库,类似于 VBScript 和其他脚本语言(Python、Perl 等,带有 win32 绑定)。但是,我想知道是否可以使用 Ruby 创建一个可以从其他客户端访问的 COM 服务器。Python 使用其 win32 包使这成为可能,甚至很简单,但我无法找到任何使用 Ruby 的示例。

0 投票
1 回答
1345 浏览

c++ - IContextMenu::QueryContextMenu being called, but IContextMenu::InvokeCommand doesn't

In my implementation of IContextMenu COM server, the QueryContextMenu gets called (can see it with logging) but InvokeCommand doesn't. Here is the QueryContextMenu:

Any idea why ?

0 投票
1 回答
7608 浏览

visual-c++ - 如何访问 CANoe COM 服务器接口中的子对象

我对 COM Server 有一个大而难以理解的问题。我正在尝试将客户端应用程序写入 CANoe(Vector 应用程序)。他们提供了 CANoe.tlb、CANoe.h 和 CANoe_i.cpp 文件,但我仅通过 #import 使用 CANoe.tlb。所有示例都在 Visual Basic 中,我正在尝试用 VC++(控制台应用程序)编写它。问题在于继承。即在他们编写的帮助中,主要对象是应用程序,并且只能通过此对象访问所有方法、对象事件等。Visual Basic 中的所有示例也很简单,即:

我确定我犯了错误,但我不知道在哪里。简而言之,我无法访问子对象、它们的方法等。我只能访问应用程序的方法。例如,我想以这种方式从 Measurement 对象调用 Start 方法:pApp->Measurement->Start() 但这是不可能的。

我的源代码:

我附上了 CANoe COM 服务器文件(从免费演示版开始是合法的):http ://www.sendspace.com/file/5pgcou

PS 使用 COM 服务器对我来说是新的,所以对于最终的愚蠢错误感到抱歉。我正在搜索任何有用的信息,但没有找到任何有关使用此 COM 接口的信息。

0 投票
2 回答
2805 浏览

events - 如何使用 ATL 处理控制台应用程序中的 COM 事件 - 客户端的暂停

我是 COM 编程的新手。

我有大问题。我正在尝试通过 COM 服务器处理来自 CANoe 应用程序的事件。首先,我尝试在本机 C++ 中执行此操作,但没有结果。现在我正在尝试使用 ATL。我做错了什么,但我不知道是什么。当事件发生时,我的客户端应用程序会暂停自身和 CANoe。关闭客户端应用程序后,CANoe 工作正常。所以我知道我的客户端应用程序处理来自 CANoe 的事件,但它不能提供它。我的源代码中的代码注释部分也被使用,但结果相同。

以下是来自 OLE-COM 对象查看器的测量对象和事件的描述:

我附上 CANoe.tlb:http ://www.sendspace.com/file/j2zloj

谢谢你的关注达米安