我需要编写一个.NET dll,可以直接从Excel的VBA模块调用,这样dll和.xls文件只需在同一目录下部署,无需进行任何COM注册。
dll的目的是运行使用C实现的算法。
我应该如何进行?这是否可能?
dll的目的是运行使用C实现的算法。
我应该如何进行?这是否可能?
你看过这篇MSDN文章吗?基本上,你需要注册来自DLL的函数,而不是整个DLL。我不知道文章是否表述得非常清楚,但语法如下:
[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]
"libname" 可以包含完整路径,例如 "C:\tmp\algo.dll" 或仅为名称,例如 "algo.dll"。在第二种情况下,将在本地路径中搜索匹配的二进制文件。
Declare
语句将DLL函数导入VBA。__stdcall
调用约定,因为这是与Declare
一起使用的唯一选项。您还可能需要在构建DLL时使用.def文件以避免名称装饰。C
int __stdcall add(int a, int b)
{
return a+b;
}
VBA
Public Declare Function add Lib "mylib.dll" (ByVal a As Long, ByVal b As Long) As Long