2010-04-08 59 views
1

我在c#vs2005 .net中构建了一个应用程序。运行在Win 64,同时试图调用 的PInvoke的interlockedexchange(这是kernel32.dll中内)功能,它的应用程序崩溃时无法找到名为'interlockedexchange'的入口点

一切正常,当我运行在Win 32位应用程序,但 。

这是例外: 无法找到名为“interlockedexchange”

切入点,我没有找到SYSTEM32目录下的KERNEL32.DLL内interlockedexchange功能,但它是在SysWow64资料目录下找到(在KERNEL32 .dll)。

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

三木阿米特

回答

0

如果设置为使用InterlockedExchange并希望使用32位版本,则可以更改项目设置以强制其以32位方式运行。转到项目设置中的“Build”选项卡,并将“Platform target”更改为x86。它将以32位运行。

0

这并不直接回答你的问题,但为什么不叫System.Threading.Interlocked.Exhange()而不是诉诸的P/Invoke?

+0

感谢您的回复! 我需要设置共享内存Intptr(指针),据我所知Interlocked.Exhange只能更改.net变量 – 2010-04-08 11:41:39

+1

@Miki,情况并非如此,.NET Interlocked.Exchange可以在任何内存位置上运行。如果它是.NET内存,当然你必须首先固定它。请参阅http://stackoverflow.com/questions/1116790/c-sharp-interlocked-exchange/5589515#5589515。 – 2012-07-29 18:58:53