8

我想使用 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 的路径,我只需要更新 Private Declare 函数行中的路径....

我已经搜索了很多,也不确定这种安排是否可行——我们可以从网络路径调用 DLL 函数而无需引用或注册。

4

4 回答 4

15

其实你可以。查看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);
于 2013-08-14T07:35:56.503 回答
4

您不能使用 C# 创建非托管 DLL,因为 C# 是一种仅限 .NET 的语言。使用 C++。

从非托管代码(例如 VBA)中使用 .NET DLL 的唯一方法是使用 COM 互操作。

于 2012-11-21T11:44:34.123 回答
0

在此处查看 P/Invoke,该文章包含一个有用的表格,说明如何将托管类型转换为非托管类型、简短代码示例(在 C# 中)、提示和资源列表。

基本 P/Invoke

于 2012-11-21T11:46:02.930 回答
-1

C# Dll 不能导出可以由任何其他非 CLR 代码调用的函数。

这是不可能的。

于 2012-11-21T11:51:30.137 回答