从 C# DLL 导出的函数不起作用
Exported functions from C# DLL not working
我必须从 C# 中的 DLL 中导出 3 个基本方法,以便在 C++ 中可以访问它:
- OnPluginStart
- OnPluginStop
- 插件更新
所以我找到了 Unmanaged Exports 一个很好的 C# 库,它使这更容易。
所以我继续使用示例代码进行测试:
using System;
using System.IO;
using RGiesecke.DllExport;
namespace Plugins
{
public class Plugins
{
[DllExport("OnPluginStart", CallingConvention = CallingConvention.StdCall)]
public static void OnPluginStart()
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("OnPluginStart");
}
}
[DllExport("OnPluginStop", CallingConvention = CallingConvention.StdCall)]
public static void OnPluginStop()
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("OnPluginStop");
}
}
[DllExport("PluginUpdate", CallingConvention = CallingConvention.StdCall)]
public static void PluginUpdate(float dt)
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("PluginUpdate");
}
}
}
}
但是,当我编译我的 DLL 并使用 DLL Exporter Viewer 时,它没有列出任何导出的函数,并且 DLL 加载到的应用程序也从不运行我的插件。
我在这里做错了什么导致我的函数根本没有被导出?
除了您发布的代码无法编译之外,您的代码工作正常。您省略了 using System.Runtime.InteropServices
行。您的(固定)代码的 x86 class 库构建的 Dependency Walker 是这样说的:
问题最明显的原因可能是 NuGet page for the library 中的以下原因:
You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions.
我必须从 C# 中的 DLL 中导出 3 个基本方法,以便在 C++ 中可以访问它:
- OnPluginStart
- OnPluginStop
- 插件更新
所以我找到了 Unmanaged Exports 一个很好的 C# 库,它使这更容易。
所以我继续使用示例代码进行测试:
using System;
using System.IO;
using RGiesecke.DllExport;
namespace Plugins
{
public class Plugins
{
[DllExport("OnPluginStart", CallingConvention = CallingConvention.StdCall)]
public static void OnPluginStart()
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("OnPluginStart");
}
}
[DllExport("OnPluginStop", CallingConvention = CallingConvention.StdCall)]
public static void OnPluginStop()
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("OnPluginStop");
}
}
[DllExport("PluginUpdate", CallingConvention = CallingConvention.StdCall)]
public static void PluginUpdate(float dt)
{
using (var file = new StreamWriter(@"pluginLog.txt", true))
{
file.WriteLine("PluginUpdate");
}
}
}
}
但是,当我编译我的 DLL 并使用 DLL Exporter Viewer 时,它没有列出任何导出的函数,并且 DLL 加载到的应用程序也从不运行我的插件。
我在这里做错了什么导致我的函数根本没有被导出?
除了您发布的代码无法编译之外,您的代码工作正常。您省略了 using System.Runtime.InteropServices
行。您的(固定)代码的 x86 class 库构建的 Dependency Walker 是这样说的:
问题最明显的原因可能是 NuGet page for the library 中的以下原因:
You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions.