Tag: 32bit 64bit

来自c#的PInvoke c ++ dll – 尝试加载格式不正确的程序。 (HRESULTexception:0x8007000B)

尝试使用Dll Import从c#访问旧的c ++ dll。 现在四天在网上搜索aprox 4天没有成功。 我正在尝试使用asp.net mvc 3网站.net 4中的c ++ dll。 我已将平台目标更改为x86。 我在iis中的应用程序池中将“启用32位应用程序”设置为true。 将Windows Server 2008 R2与iis 7.5配合使用 有没有办法调试这个或获得有关可能出错的更多信息? ASP.NET P / Invoke链接“尝试加载具有不正确格式的程序”指出: “要使用32位dll,您的Web应用程序必须以32位模式运行,这通过将IIS切换为以32位模式运行来完成”,并提供有关如何更改此内容的链接,但这似乎只涉及IIS 6和asp.net 2 提前致谢! 最好的祝福 编辑1:在c#中错误地声明c ++方法调用会导致此错误吗? 读错误可以猜测,调用具有3个参数的函数应该接收4将导致此错误。

使用C#,如何获得我的机器是64位还是32位?

使用C#,我想创建一个方法来重新调整我的机器是64位还是32位。 有谁知道怎么做?

如何使用c#在IIS 6和IIS 7中启用32位应用程序模式

我想使用C#更改Enable32BitAppOnWin64属性。 我知道与IIS 6和IIS 7交互的方式是不同的。 但我需要两个版本的解决方案。

如何使用#if来决定在C#中编译哪个平台

在C ++中有预定义的宏: #if defined(_M_X64) || defined(__amd64__) // Building for 64bit target const unsigned long MaxGulpSize = 1048576 * 128;// megabyte = 1048576; const unsigned long MaxRecsCopy = 1048576 * 16; #else const unsigned long MaxGulpSize = 1048576 * 8;// megabyte = 1048576; const unsigned long MaxRecsCopy = 1048576; #endif 这允许我设置常量来控制将使用的内存量。 当然我可以逐字定义预处理器变量: #define Is64bit 1 using […]

使用托管代码包装程序从64位托管代码调用32位非托管代码的最佳方法

我需要从托管的64位进程调用本机32位代码的情况越来越频繁,因为64位计算机和应用程序变得普遍。 我不想将我的applciation标记为32位,我无法获得正在调用的64位版本的代码。 我目前使用的解决方案是创建C ++ COM填充程序,这些填充程序在进程外加载以从64位进程进行32位调用。 这个COM填充程序解决方案运行良好,跨进程调用由COM在幕后处理,这最大限度地减少了这种方法的开销。 但是,我想保留我们使用C#进行的所有新开发,并想知道是否有任何框架可以最大限度地减少执行此操作的开销。 我看过IPCChannel,但我觉得这种方法并不像COM shim解决方案那样整洁。 谢谢,艾德

如何从64位应用程序连接到Windows Phone 7

我有一个32位程序(用C ++编写)可以连接到一些不同的设备,只要它是32位一切正常。 但是,现在我需要将其构建为64位程序,但后来我遇到了Windows Phone 7的一些问题。 我发现我重建为64位的dll(用C#编写)会在此行抛出exception: MultiTargetingConnectivity connectivity = new MultiTargetingConnectivity(CultureInfo.CurrentUICulture.LCID); 例外是: An unhandled exception of type ‘Microsoft.SmartDevice.Connectivity.DatastoreException’ occurred in Microsoft.SmartDevice.Connectivity.dll Additional information: Retrieving the COM class factory for component with CLSID {349AB2E8-71B6-4069-AD9C-1170849DA64C} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). (例如,如果我尝试运行此示例程序,它以32位工作,但在同一行中以64位引发该exception) 当我在注册表中搜索该CLSID时,我找到了“C:\ Program Files(x86)\ Common Files \ […]

64位Windows上的注册表重定向

我正在运行64位Windows,我想使用C#创建注册表项HKCU\Software\Classes\Wow6432Node\CLSID\{myguid}\InprocServer32 。 我应该告诉它写什么注册表项,以便将它重定向到上面的键? 这也适用于32位Windows。 我正在编译我的应用程序以定位x86。

printdialog.showdialog(); 没有在64位的Windows 7中显示打印对话框

我有自定义控件与打印工具栏项。当打印控件对话框没有进入Windows 7与64位操作系统在其他系统操作系统工作正常。 仅在具有64位的Windows 7中出现问题。 我的问题printdialog没有进入64位的Windows 7操作系统。 我已检查并分析 – > PrintDialog.ShowDialog()返回immeaditely取消instaed显示该问题的对话框。 我通过搜索以下链接找到了问题的解决方案: http://social.msdn.microsoft.com/Forums/en/netfx64bit/thread/8760fb6c-ae63-444e-9606-cd3295ce6b5d http://msdn.microsoft.com/en-us/library/system.windows.forms.printdialog.useexdialog.aspx 通过将true设置为printdialog的UseExDialog属性,对话框出现并正常工作。但是这个对话框样式就像是Windows XP而不是windows7样式。所以这不是解决方案。 UseExDialog属性设置为true意味着工作正常。但打印对话框样式看起来像Windows XP打印不像Windows 7.我需要一些其他解决方案在Windows 7 os 64位显示打印对话框。 请为此问题提供完整的解决方案 谢谢 湿婆

为什么Math.Exp在32位和64位之间给出不同的结果,具有相同的输入,相同的硬件

我使用.NET 2.0与PlatformTarget x64和x86。 我给Math.Exp输入相同的输入数,并且它在任一平台上都返回不同的结果。 MSDN说你不能依赖文字/解析的Double来表示平台之间的相同数字,但我认为我在下面使用Int64BitsToDouble可以避免这个问题,并保证在两个平台上输入相同的Math.Exp。 我的问题是为什么结果不同? 我原以为: 输入以相同的方式存储(双/ 64位精度) 无论处理器的位数如何,FPU都会进行相同的计算 输出以相同的方式存储 我知道我不应该比较15/17位数后的浮点数,但我对这里的不一致感到困惑,看起来在同一硬件上看起来是相同的操作。 任何人都知道引擎盖下发生了什么? double d = BitConverter.Int64BitsToDouble(-4648784593573222648L); // same as Double.Parse(“-0.0068846153846153849”) but with no concern about losing digits in conversion Debug.Assert(d.ToString(“G17”) == “-0.0068846153846153849” && BitConverter.DoubleToInt64Bits(d) == -4648784593573222648L); // true on both 32 & 64 bit double exp = Math.Exp(d); Console.WriteLine(“{0:G17} = {1}”, exp, BitConverter.DoubleToInt64Bits(exp)); // […]

C#读取注册表:ProductID在x86目标应用程序中返回null。 “任何CPU”工作正常

我最近搬到了VS 2010的W7 64位机器上。我的项目设置为在Any CPU上运行。 当我将其更改为针对x86我注意到我的一些注册表调用不再有效。 我试图像这样读取ProductID字段: RegistryKey windowsNTKey = Registry.LocalMachine.OpenSubKey(@”Software\Microsoft\Windows NT\CurrentVersion”); object productID = windowsNTKey.GetValue(“ProductId”); 在x86模式下运行时, productID始终为null ,当在“任何CPU”中运行时,它正常工作。 这里发生了什么?