【发布时间】:2016-07-18 21:12:31
【问题描述】:
我有以下课程:
private static class NativeSomeWrapper
{
[DllImport(NativeMethods.myCeeLib, EntryPoint = "Get_300_bars",
CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.SysInt)]
internal static extern IntPtr Get300bars([MarshalAs(UnmanagedType.SysInt)] IntPtr assessment);
}
我有一个负责初始化 dll 的静态类:
internal static class NativeMethods
{
public const string myCeeLib= "myCeeLib.dll";
static NativeMethods()
{
var path = GetPathToMyCeeLibFile();
var err = SetPath(path);
if (err != ErrorCode.Ok)
{
throw new FileNotFoundException("Coulnt find myCeeLib file.");
}
}
}
问题是NativeMethods 构造函数没有按预期调用。
如何确保NativeMethods 静态构造函数被调用并且库文件的路径设置正确?
【问题讨论】:
-
访问
NativeMethods成员后会立即调用它。你在任何地方都给NativeMethods打电话吗? -
您是否以某种方式访问 NativeMethods 类?检查这个:stackoverflow.com/questions/1437352/…
-
@Quantic 正如问题所说,这是一个静态构造函数。这不仅仅是一种方法。
-
如标记的副本中所述,静态构造函数仅在您首次创建类的实例或访问任何静态成员时调用。
const成员不是静态成员,因此不会导致调用静态构造函数。当然,由此您可以轻松推断出将const成员更改为static成员将 确保调用静态构造函数,但随后您会发现使用时遇到问题DllImport属性中的那个成员。 -
我同意,但问题不在于静态构造函数。实际的问题是,是否有办法检查 DllImport 文件是否存在,或者甚至如何设置路径……这就是我同意的地方,应该是一个新问题。
标签: c#