DllExport 未创建入口点
DllExport not creating an entry point
我正在尝试使用 Robert Giesecke 的“UnmanagedExports”nuget 包创建一个 C# 非托管 DLL,但它似乎没有创建任何入口点。
完整代码在这里:
using System.IO;
using System.Runtime.InteropServices;
using RGiesecke.DllExport;
namespace ImpactHive
{
internal static class Main
{
[DllExport("_RVExtension@12", CallingConvention = CallingConvention.StdCall)]
static void RVExtension(out char output, int outputSize, char function)
{
using (StreamWriter writer = new StreamWriter(@"C:\dll_log.txt"))
{
writer.WriteLine("It works!");
writer.WriteLine(function);
}
output = function;
}
}
}
我做错了什么?
澄清:
这是一个 extension DLL for Arma 3,需要一个名为“_RVExtension@12
”的入口点,签名为:
void __stdcall RVExtension(char *output, int outputSize, const char *function);
编辑:我在项目设置中将目标平台指定为 x86,但没有成功。
事实证明 [DllExport]
属性完全按预期工作。
我遇到的问题是 C# 中没有原生 [DllExport]
属性的原因之一——Dll 的调用者必须加载 .net 框架才能显示 C# dll它的入口点。
问题是我用来检查公开入口点的应用程序没有加载 .net 框架,因此没有报告入口点。
这已通过打开 VS2013 的开发人员命令提示符和 运行 dumpbin /exports "C:\myDllName.dll"
确认,返回以下内容:
Dump of file C:\myDllName.dll
File Type: DLL
Section contains the following exports for \myDllName.dll
00000000 characteristics
54F6EC86 time date stamp Wed Mar 04 11:29:10 2015
0.00 version
0 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
0 0 000028CE _RVExtension@12
Summary
2000 .reloc
2000 .rsrc
2000 .sdata
2000 .text
清楚地显示暴露的入口点...
这意味着我无法将此 dll 用于我的扩展,因为 Arma 3 游戏引擎默认不加载 .net 框架,因此无法调用我的 C# dll。
我正在尝试使用 Robert Giesecke 的“UnmanagedExports”nuget 包创建一个 C# 非托管 DLL,但它似乎没有创建任何入口点。
完整代码在这里:
using System.IO;
using System.Runtime.InteropServices;
using RGiesecke.DllExport;
namespace ImpactHive
{
internal static class Main
{
[DllExport("_RVExtension@12", CallingConvention = CallingConvention.StdCall)]
static void RVExtension(out char output, int outputSize, char function)
{
using (StreamWriter writer = new StreamWriter(@"C:\dll_log.txt"))
{
writer.WriteLine("It works!");
writer.WriteLine(function);
}
output = function;
}
}
}
我做错了什么?
澄清:
这是一个 extension DLL for Arma 3,需要一个名为“_RVExtension@12
”的入口点,签名为:
void __stdcall RVExtension(char *output, int outputSize, const char *function);
编辑:我在项目设置中将目标平台指定为 x86,但没有成功。
事实证明 [DllExport]
属性完全按预期工作。
我遇到的问题是 C# 中没有原生 [DllExport]
属性的原因之一——Dll 的调用者必须加载 .net 框架才能显示 C# dll它的入口点。
问题是我用来检查公开入口点的应用程序没有加载 .net 框架,因此没有报告入口点。
这已通过打开 VS2013 的开发人员命令提示符和 运行 dumpbin /exports "C:\myDllName.dll"
确认,返回以下内容:
Dump of file C:\myDllName.dll
File Type: DLL
Section contains the following exports for \myDllName.dll
00000000 characteristics
54F6EC86 time date stamp Wed Mar 04 11:29:10 2015
0.00 version
0 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
0 0 000028CE _RVExtension@12
Summary
2000 .reloc
2000 .rsrc
2000 .sdata
2000 .text
清楚地显示暴露的入口点...
这意味着我无法将此 dll 用于我的扩展,因为 Arma 3 游戏引擎默认不加载 .net 框架,因此无法调用我的 C# dll。