繁体   English   中英

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;
        }
    }
}

我究竟做错了什么?

澄清:

这是Arma 3扩展DLL,它需要一个名称为“ _RVExtension@12 ”且带有签名的入口点:

void __stdcall RVExtension(char *output, int outputSize, const char *function);

编辑:我已经在项目设置中将目标平台指定为x86,没有运气。

事实证明[DllExport]属性完全按预期运行。

我遇到的问题是C#中没有本地[DllExport]属性的原因之一[DllExport]的调用者必须加载.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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM