【问题标题】:unable to find an entry point named 'interlockedexchange'找不到名为“interlockedexchange”的入口点
【发布时间】:2010-04-08 11:10:59
【问题描述】:

我用 c# vs2005 .net 构建了一个应用程序。

当我以 win 32 位运行应用程序时,一切正常,但是 在 win 64 中运行应用程序时,它在尝试调用时崩溃 pinvoke interlockedexchange(在 kernel32.dll 中)函数。

这是一个例外: 找不到名为“interlockedexchange”的入口点

我没有在system32目录下的kernel32.dll中找到interlockedexchange函数,但在syswow64目录下(在kernel32.dll中)找到了。

我猜 .net 运行时配置为 system32 目录而不是 syswow64 。 如何更改此配置?你能想到任何其他可能导致这种情况的问题吗? 任何帮助,将不胜感激! 谢谢,

三木阿米特

【问题讨论】:

    标签: c# .net windows 64-bit dllimport


    【解决方案1】:

    如果您设置为使用 InterlockedExchange 并想要 32 位版本,您可以更改项目设置以强制它以 32 位运行。转到项目设置中的“构建”选项卡,并将“平台目标”更改为 x86。然后它将以 32 位运行。

    【讨论】:

      【解决方案2】:

      这并不能直接回答你的问题,但为什么不打电话给System.Threading.Interlocked.Exhange() 而不是求助于P/Invoke?

      【讨论】:

      • 感谢您的回复!我需要设置一个共享内存 Intptr(指针),据我所知 Interlocked.Exhange 只能更改 .net 变量
      • @Miki,情况并非如此,.NET Interlocked.Exchange 可以在任何内存位置上运行。如果它是 .NET 内存,当然,您必须先将其固定。见stackoverflow.com/questions/1116790/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多