我应该如何暴露一个面向对象的库excel不注册dll

How should I expose an object orientated library to excel without registering DLLs?

本文关键字:面向对象的 excel dll 注册 一个 何暴露 暴露 我应该      更新时间:2023-10-16

我正在开发一个面向对象的c++库,我想在Excel中向用户展示一些功能。理想情况下,我想使用Excel VB中的库,并提供一些更高级的函数,我可以通过电子表格暴露。

我已经为c++库写了一个C- api,但是当对象需要显式的create/dispose调用时,使用它是很尴尬的。

使用C-API,我构造了一个Python API,其中create/dispose调用由Python类处理。Python API可用于构建更高级的函数,并通过IPython notebook向用户公开它们。IPython笔记本可以配置为加载Python模块并指定加载DLL的路径,而不需要管理员权限:

import sys sys.path.insert(0,notebook_directory) import mylib mylib.Config_library_path(notebook_directory) #Used for DLL loading by ctypes

这意味着我可以将笔记本作为一个自包含的实体分发。我需要对Excel文档和与之一起分发的一些dll做同样的事情。

我可以围绕C- api编写c#绑定,就像我为Python所做的那样,但我不知道如何在没有全局DLL注册的情况下将c# DLL加载到Excel中。

我可以使用C-API在VB中创建xsl和Declare函数,但这意味着我必须在Excel VB中处理内存管理。

有哪些选项可用于创建一个独立的Excel工具,就像我为IPython notebook所做的那样?

你在问一个关于复杂决策树的模糊问题:

  1. 如何将C库暴露给Excel。您有两个选择,要么作为工作表函数和宏,要么作为VBA环境。
  2. 对于工作表函数,您可以使用一个或多个C/c++工具包制作xll,例如XLW或xll +,或使用。net包装器和Excel-DNA,或从Python使用PyXLL。
  3. 对于VBA集成,你必须要么公开一个平面的C API,你可以通过VBA中的Declare语句来使用它,要么公开一个COM库。
  4. COM库可以用c++或。net编写。
  5. COM库可以注册和加载只有用户权限,如果你照顾自己的注册。Excel-DNA为Excel-DNA外接程序暴露的COM类进行这种非管理员注册。但这可以为任何COM库完成。

你应该这样做:

  1. Write VBA声明直接引用你的C API,即使正确使用会有点尴尬。使用LoadLibrary来确保.dll加载相对于工作簿位置。
  2. 创建一些高级VBA帮助类来包装这些C调用。
  3. 将其作为.xlam插件发布。