【问题标题】:Trying to utilize cards.dll on 64-bit Windows 10尝试在 64 位 Windows 10 上使用cards.dll
【发布时间】:2016-11-04 21:33:45
【问题描述】:

我正在尝试使用“cards.dll”模块来创建一个视觉纸牌游戏,尽管我可以考虑使用谷歌搜索,但我似乎无法弄清楚。我有 DLL 文件(203,024 字节),但我对“注册”为 .NET 或 COM 程序集感到困惑。我试过了:

  • 将其添加为参考(在 Visual Studio 2015 中)
  • 显式加载

    组装 a = Assembly.LoadFile(@"/cards.dll");

结果: 该模块应包含程序集清单。 (HRESULT 异常:0x80131018)

  • 我试过regsvr32.exe cards.dll,(有和没有/u/i)但我得到了消息:

我也将 DLL 复制到 C:\Windows\System32 和 C:\Windows\SysWOW64 文件夹中,但无济于事。

我正在(或至少尝试)在具有 i5 内核的 64 位 Windows 10 机器上运行它。

这是上面的垃圾箱输出。

【问题讨论】:

  • 周围有很多不是 COM 服务器的 DLL,因此不包含类型库,也不是 .NET 程序集,因此不包含元数据。使用 Dumpbin.exe /exports 查看它是否包含您可以 pinvoke 的任何导出函数。在 VS 中使用 File > Open > File 并选择 DLL 以查看它是否包含任何非托管资源。位图很可能。有人拥有这方面的版权,给他们打电话。
  • dumpbin 显示没有导出的项目。这是 Visual Studio 显示的内容:prntscr.com/d36tvb 我不认为这是一个神秘的文件 - 它被宣传为标准游戏(如纸牌)使用的 dll 文件。
  • Cards.dll 很可能不是 COM 库。它很可能是不需要注册的标准 DLL。当然,除非它最近被无缘无故地重写,因为它早在 .NET 出现之前就已经存在了。它也不包含导出,因为它不包含任何函数,这将是反对重写它的另一个论点。它充满了资源(图像),但没有可执行代码,正如您的垃圾箱所示(请参阅 .rsrc 条目)。
  • 这是否意味着我可以找到其中的图像,但不能找到其他地方宣传的“cdtInit()”函数?
  • 我从未见过 DLL 的任何 advertised 函数,所以我不知道您指的是什么。您的 dumpbin 映像中没有显示导出的函数,这意味着您正在使用的 DLL 中没有 cdtInit 函数可供您调用。根据我(多年前)的经验,DLL 中没有可执行功能;它充满了卡片正面和各种卡片背面的资源(位图)。 (您显然不知道如何使用 @ 联系对您发表评论的人;幸运的是我在您的帖子前停下来,否则我永远不会看到您的问题。)

标签: c# .net-assembly


【解决方案1】:

我通过Catch22.net 上的此链接上的信息找到了答案。关键的学习是: `

static class NativeMethods
 {
 [DllImport("kernel32.dll")]
 public static extern IntPtr LoadLibrary(string dllToLoad);
 [DllImport("kernel32.dll")]
 public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
 }
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
 private delegate bool cdtInit(ref Int32 width, ref Int32 height);
 dll = NativeMethods.LoadLibrary(@"\path\cards32.dll");
 IntPtr addr;
 addr = NativeMethods.GetProcAddress(dll, "cdtInit");
 mycdtInit = (cdtInit)Marshal.GetDelegateForFunctionPointer(addr, typeof(cdtInit));
 Int32 width = 71;
 Int32 height = 95;
 var result = mycdtInit(ref width, ref height);

`

【讨论】:

  • 我很高兴知道为什么这个答案被否决了。毕竟,它可以工作,并且代码在那个 DLL 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2018-01-29
  • 1970-01-01
  • 2021-06-06
  • 2017-04-07
  • 1970-01-01
  • 2017-12-19
相关资源
最近更新 更多