如何使用C#创建非托管DLL?

时间:2012-11-21 11:43:52

标签: c# dll

我想使用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函数。

4 个答案:

答案 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#中),提示和资源列表。

Essential P/Invoke

答案 3 :(得分:0)

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

这是不可能的。