【发布时间】:2013-06-17 11:15:54
【问题描述】:
我正在开发一个从安装包中提取 cab 文件的 c# 应用程序。
为此,我使用LoadLibrary。这是 pinvoke C# 签名。
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]
internal static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);
上面的代码在编译工程到x86的时候可以正常工作,但是如果我编译到anycpu就失败了,最后一个win32错误是:
“%1 不是有效的 Win32 应用程序”
我尝试使用 IntPtr 插入字符串,也尝试使用不同的字符集,但没有任何效果。
【问题讨论】:
-
我想我在这里找到了答案:technet.microsoft.com/en-us/library/cc782541(v=ws.10).aspx 看来我必须运行一个单独的进程。
-
您还可以强制您的应用程序(如果使用 AnyCPU 编译)以 32 位模式运行,如本文所述 lostechies.com/gabrielschenker/2009/10/21/…
-
@PeskyGnat 这似乎毫无意义。由于询问者已经在编译应用程序并控制了目标,因此强制 32 位的正确方法是目标 x86。
-
我同意,如果没有要求使用anycpu,那么x86就是要走的路
标签: c# pinvoke loadlibrary