我应该如何暴露一个面向对象的库excel不注册dll
How should I expose an object orientated library to excel without registering DLLs?
我正在开发一个面向对象的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所做的那样?
你在问一个关于复杂决策树的模糊问题:
- 如何将C库暴露给Excel。您有两个选择,要么作为工作表函数和宏,要么作为VBA环境。
- 对于工作表函数,您可以使用一个或多个C/c++工具包制作xll,例如XLW或xll +,或使用。net包装器和Excel-DNA,或从Python使用PyXLL。
- 对于VBA集成,你必须要么公开一个平面的C API,你可以通过VBA中的Declare语句来使用它,要么公开一个COM库。
- COM库可以用c++或。net编写。
- COM库可以注册和加载只有用户权限,如果你照顾自己的注册。Excel-DNA为Excel-DNA外接程序暴露的COM类进行这种非管理员注册。但这可以为任何COM库完成。
你应该这样做:
- Write VBA声明直接引用你的C API,即使正确使用会有点尴尬。使用LoadLibrary来确保.dll加载相对于工作簿位置。
- 创建一些高级VBA帮助类来包装这些C调用。
- 将其作为.xlam插件发布。
相关文章:
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 对"车辆的 vtable"的未定义引用 - 面向对象的编程练习
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- 以面向对象的方式解析自定义数据包
- 面向对象的编程-C 练习
- 如何使用面向对象的技术在 win32 和 c++ 中创建编辑控件
- C++面向对象的字典程序
- 我在哪里可以找到一些 c++ 中的好例子来研究面向对象的概念
- 面向对象的设计选择
- 我应该移至面向对象的编程(黑匣子)以及如何
- 面向对象的图层
- 创建面向对象的链表时出现编译问题(编译器错误C2664)
- 面向对象的数据设计
- 我试图通过我的方案实现的面向对象的想法是什么?
- 是否所有面向对象的语言都会在内存中创建大量重复信息
- C++ 面向对象的编程异常失败
- C++面向对象的客户端套接字应用程序设计
- 面向对象的编程逻辑
- C++基类中虚函数的面向对象的返回值
- 我应该如何暴露一个面向对象的库excel不注册dll