我想使用C#创建一个DLL,然后可以通过以下方式从VBA调用它 -
Private Declare Function invokePath Lib "\\shared_computer\Projects\somedll\myDLL.dll" (ByVal strUName As String, ByVal strSFile As String) As String
这个想法是,如果改变DLL的路径,我只需要更新私有声明功能行中的路径....
我已经搜索了很多,也不确定这种安排是否可行 - 我们可以在没有引用或注册的情况下从网络路径调用DLL函数。
答案 0 :(得分:11)
其实你可以。 查看unmanagedexports 这是一个完整的演练,您将能够创建这样的入口点:
[DllExport("GenerateSomehting", CallingConvention = CallingConvention.Cdecl)]
public static int GenerateSomehting(int somevalue, ref IntPtr pointer)
并像其他任何非托管DLL一样调用它。
[DllImport("MyGenerator.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int GenerateSomehting(int somevalue, ref IntPtr pointer);
答案 1 :(得分:3)
您无法使用C#创建非托管DLL,因为C#是仅支持.NET的语言。使用C ++。
从非托管代码(例如VBA)使用.NET DLL的唯一方法是使用COM互操作。
答案 2 :(得分:0)
在此处检查P / Invoke,本文包含一个有用的表格,介绍如何将托管类型转换为非托管类型,短代码示例(在C#中),提示和资源列表。
答案 3 :(得分:0)
C#Dll无法导出任何其他非CLR代码可以调用的函数。
这是不可能的。