嵌入外部DLL以实现工作簿

时间:2015-10-28 08:12:13

标签: c# excel-vba vba excel

我将通过excel VBA执行C#dll。该文件是启用宏的文件(.xslm) 我必须与几个用户分发这个excel。有没有办法用excel文件嵌入外部dll

2 个答案:

答案 0 :(得分:0)

没有好办法(据我所知)来实现这一目标。显然有一些方法可以破解它,但它不适用于任何受保护的系统(出于好的理由)。只需将文件压缩在一起并将它们分散在一起。

答案 1 :(得分:0)

有一个好方法。 (顺便说一句,您也可以为用户嵌入一个zip文件和解压缩文件作为最后一步)

在功能区中。插入->对象->从文件创建

现在,您在工作表中有一个嵌入式.dll。接下来,您需要将OLEObject文件提取到您的temp目录中。该博客很好地捕捉了它:https://danny.fyi/embedding-and-accessing-a-file-in-excel-with-vba-and-ole-objects-4d4e7863cfff

接下来将.dll从临时目录复制到要在用户计算机上存储dll的目录中。您将在博客中看到GetOLETempPath()函数。

2020-06-23 16:47:02.819028-0700 DeallocTest[44082:12740178] Init ContenctView
2020-06-23 16:47:03.445740-0700 DeallocTest[44082:12740178] StateHandler.init
<NSNotificationCenter:0x600002920d20>
Name, Object, Observer, Options
CallStateChanged, 0x600000ca1110, 0x600000ca00c0, 1400

2020-06-23 16:47:03.452764-0700 DeallocTest[44082:12740178] Init ContenctView
2020-06-23 16:47:04.858004-0700 DeallocTest[44082:12740178] MainWindowController.deinit
2020-06-23 16:47:04.858090-0700 DeallocTest[44082:12740178] StateHandler.removeObservers
<NSNotificationCenter:0x600002920d20>
Name, Object, Observer, Options
CallStateChanged, 0x600000ca1110, 0x600000ca00c0, 1400

2020-06-23 16:47:04.858192-0700 DeallocTest[44082:12740178] Removing observer
<NSNotificationCenter:0x600002920d20>
Name, Object, Observer, Options

最后您加载库

Set obj = Sheets("Content").OLEObjects("stdCallObj")
filesource = GetOLETempPath(obj)
FileCopy filesource , "C:\somefolder\myNewDLL.dll"