RGiesecke.DllExport 的 C# DLL 中没有函数

No functions in C# DLL with RGiesecke.DllExport

我正在尝试用 C# 制作一个 DLL,以便在其他几种语言中使用。我找到了 RGiesecke 的 DllExport,但它似乎不起作用。它构建得很好并生成了一个 dll,但是当我在 Dependency Walker 中打开它时它没有显示任何函数,而且我的调用代码也找不到它们。

我创建了一个新的 "Class Library" 项目 (VS 2013),然后从 NuGet 安装了 "Unmanaged Exports (DllExport for .Net)"。我需要任何项目设置吗?

这是我的代码。

using System;
using System.Collections.Generic;
using System.Text;
using RGiesecke.DllExport;

namespace ToolServiceDLL
{
    public class Class1
    {
      [DllExport("addUp", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
      public static double addUp(double num1, double num2)
      {
        return num1 + num2;
      }

      [DllExport("get5", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
      public static int get5()
      {
        return 5;
      }
    }
}

我发现了问题。它在 RGiesecke 文档中有,但我错过了。在project settings->Build->Platform target: 你可以不设置为"Any CPU"。您必须将其设置为 x64 或 x86,具体取决于您是想在 64 位还是 32 位应用程序中使用它。

我遇到了类似的问题,但已经将平台目标设置为 x64 并出现以下错误:

The name 'CallingConvention' does not exist in the current context

我发现添加 using 指令 ​​System.Runtime.InteropServices 解决了问题。

这是个好问题,对我有用。由于 Python 方面我犯了一个错误,所以花了比应该多一点的时间。这是 Python3 中的工作代码 import sys import clr sys.path.insert(0,'C:\your_path\Py2NetComm\bin\Debug') clr.AddReference("Py2NetComm") import ToolServiceDLL as p2n ret = p2n.Class1.addUp(2,3) print("addUp:", ret)