【发布时间】:2011-10-19 08:57:25
【问题描述】:
我在我的 .dll 参考中使用其中一种方法时遇到了这个错误。
当我调用 MyRef.SetDbaseId 方法时,我返回 VS 并出现此错误。我尝试添加 CallingConvention 枚举参数,但它们都不适合我。我还在 DependencyWalker 中打开了 dll 以检查适合我的应用程序的入口点和参数 (ulong)。这很令人困惑,因为其他方法也能正常工作。任何想法如何解决这个问题?
[DllImport("my.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?setdbaseid@@YGHK@Z")]
public static extern int SetDbaseID(ulong dbase_id);
ulong tmid = ulong.Parse(p_6);
i = MyRef.SetDbaseID(tmid);
【问题讨论】:
-
你的声明是错误的。您无法准确猜测您做错了什么。本机代码中的 long 在 C# 中是 int。
-
如果您必须使用 EntryPoint=?setdbaseid@@YGHK@Z,这意味着您的 dll 可能没有使用“extern C”声明来声明导出。据我所知,使用 dllimport 很难做到这一点。您是否使用过 dumpbin.exe /exports 来检查 dll 实际导出的内容?
标签: c# wpf dll .net-4.0 calling-convention