我尝试使用非托管导出 (.NET DllExport) 库,希望在它的帮助下,可以在DLL没有.net framework.
例子:
[return: MarshalAs(UnmanagedType.LPWStr)]
[DllExport("Test", CallingConvention = CallingConvention.Cdecl)]
public static string Test(
[MarshalAs(UnmanagedType.LPWStr)] string firstName,
[MarshalAs(UnmanagedType.LPWStr)] string lastName)
{
return string.Format("Hello {0} {1}", firstName, lastName);
}
我将我的连接DLL到程序上Delphi,但是当调用该方法时,发生了一个缺少的错误.net framework
据我了解,我的DLL应该成为(非托管代码)并且没有.net framework. 我是对的,还是我没有完全理解这一点?
用 C# 编写的代码被编译成 .NET 虚拟机的 IL 中间代码,并且只能由它执行。因此,当您在另一台机器上运行您的应用程序时,如果没有 .NET 框架,它就无法运行。
如果我理解正确,非托管导出 (.NET DllExport) 库只会添加导出名称,但不会影响 IL 代码本身。因此,使用它对在没有框架的机器上运行它没有任何帮助。
要使这种方法起作用,您需要强制编译器将虚拟机的 IL 代码转换为处理器的本机代码。我还没有看到这样的功能,但他们在 EnSO 上写了关于 .NET Native的文章,它可以做到这一点,并且包含在 VS2015 中。