【发布时间】:2020-08-23 12:07:28
【问题描述】:
我正在使用以下 C# DLL。
using System;
namespace LibraryTest
{
public class Class1
{
public int callNr(int nr)
{
if (nr == 5)
{
return 555;
}
return 0;
}
}
}
并在程序中这样使用它:
using System;
using System.Runtime.InteropServices;
namespace Builder.Store
{
public class testIndicator : Indicator
{
[DllImport(@"C:\LibraryTest.dll", EntryPoint = "callNr")]
public static extern int callNr(int nr);
public override void Calculate()
{
int value = callNr(5);
//do stuff...
}
}
}
唯一的结果是“无法在 DLL 中找到入口点”错误。 我的研究:我的VS里没有dumpbin,但是我用了dotPeek,结果是DLL与源代码匹配。 我使用了 Dependency Walker,DLL 似乎很好,但它没有指出入口点,附上截图。
https://i.stack.imgur.com/RR4UH.jpg
我使用的程序是一个独立的第三方软件,它允许自定义文件输入(我无法将 DLL 引用添加到实际程序中)。 我已经束手无策了。有任何指示和/或明显的错误吗?
【问题讨论】:
-
DllImport用于 C 风格的导出函数(即本机代码)而不是 .NET (CIL+MD) 代码。如果LibraryTest.dll是 .NET 程序集 (DLL),则不要使用DllImport,而是使用Assembly.Load。 DependencyWalker 也只与原生相关 -
(尽管 C# 和 .NET 编译器输出的文件带有
.exe和.dll扩展名(也有格式良好的 Win32 PE 头文件),但它们与“本机”不同.exe 和 .dll 文件——它们(通常)不包含可直接执行的机器代码。从概念上讲,它们更像 Java 的.jar文件(因为它们是.class文件的容器,其中包含字节码和元数据)。
标签: c#