【问题标题】:No functions in C# DLL with RGiesecke.DllExportRGiesecke.DllExport 的 C# DLL 中没有函数
【发布时间】:2015-12-22 14:21:53
【问题描述】:

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

我创建了一个新的“类库”项目(VS 2013),然后从 NuGet 安装了“非托管导出(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;
      }
    }
}

【问题讨论】:

  • 它不创建 DLL,它修改 DLL。所以这没有发生。一个令人讨厌的陷阱是,当您不运行 VS 提升时,Nuget 包将无法正确安装,失败是无声的。右键单击 VS 快捷方式并选择“以管理员身份运行”。
  • 我以管理员身份运行,它在参考中显示“RGiesecke.DllExport.Metadata”。如何判断它是否尝试修改 dll?

标签: c# dll unmanaged


【解决方案1】:

我发现了问题。它在 RGiesecke 文档中有,但我错过了。在项目设置->构建->平台目标中:您不能将其设置为“任何 CPU”。您必须将其设置为 x64 或 x86,具体取决于您是要在 64 位还是 32 位应用程序中使用它。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      这是一个很好的问题,对我有用。由于我犯了错误的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)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多