AE32位程序 移植到 64位系统

AE32位程序 移植到 64位系统

  
  
未能加载文件或程序集“ESRI.ArcGIS.AxControls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86”或它的某一个依赖项。系统找不到指定的文件。
原因可以有很多:
1.AO是32位原生组件,一般认为不支持64位系统(道听途说),所以只能在32位环境下进行编译。
2.还有就是9.3和10.0之间的差异,引用项、绑定productcode、修改引用属性。
3.项目属性中需将Target Processor属性设置为X86。


在使用ArcObjects代码之前,如果没有在正确的位置放置RuntimeManager.Bind方法代码,则会导致如下错误。
ArcGIS 10中有一个新的要求——runtime绑定。所谓runtime绑定,就是在任何ArcObjects代码(包括许可初始化代码)被执行之前,指定相称的ArcGIS产品——ArcGIS Desktop或者ArcGIS Engine应用程序。建立runtime绑定的APIs位于程序集ESRI.ArcGIS.Version的类ESRI.ArcGIS.RuntimeManager中,该程序集随着任何ArcGIS 10 runtime一起安装于全局程序集缓存(Global Assembly Cache (GAC))中。安装了ArcObjects .NET SDK,默认的,程序集ESRI.ArcGIS.Version位于C:\Program Files\ArcGIS\DeveloperKit10.0\DotNet文件夹下。可以在Visual Studio IDE中将该程序集添加为项目引用。
 
 [C#] 
//Insert this line before the Application.Run in the static void Main() method.
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);
  [VB.NET] 
'Insert this line before the InitializeComponent() method in Public Sub New().
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine) 



1. 关闭Visual Studio。

2. 在Visual Studio Tools子目录,以管理员身份运行Visual Studio Command Prompt (2010),切换目录到"<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\”. ( 我的是v7.0A )

3. 执行命令:
corflags /32bit+ ResGen.exe /force

4. 在记事本中打开 <project_name>.csproj 文件

5. 添加这个属性在PropertyGroup下面: <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>,然后保存文件。

再次尝试编译,一切OK!



将project的target processor设置成X86


查看引用项

AE的版本随着时间的流逝也在渐渐的升级,一直升级到目前的AE10,由于版本的问题,原来低版本的采用AE组建写的App因为版本的问题也就不能直接运行了,这样就需要直接对这些AE组建升级,然后根据实际情况进行调试程序。

1)第一种升级方法

打开原程序中的 引用文件夹,我们可能会看到有些引用的名称前面有黄色的感叹号,这就表示该引用是不能用的,这个就是升级带来的问题,

解决方法:将带有黄色感叹号的引用删除,然后重新添加相应名称的引用即可,以此类推,将黄色的引用重新添加,然后程序就可以运行了。

2)第二种升级方式

这种升级方式也是最近知道的,

找到文件扩展名称为.csproj 的文件,比如  EditorApp.csproj,用记事本打开

然后我们 就可以看到添加到该App引用中DLL库。。

类似于下面的 9.3.0版本的AE和10版本的AE引用版本的对照

  <!--
    <Reference Include="ESRI.ArcGIS.AxControls, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.Carto, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.Controls, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.DataSourcesFile, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.DataSourcesGDB, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.DataSourcesRaster, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.Display, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.Geodatabase, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.Geometry, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.System, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    <Reference Include="ESRI.ArcGIS.SystemUI, Version=9.3.0.1770, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=MSIL" />
    -->
    <Reference Include="ESRI.ArcGIS.3DAnalyst, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.AxControls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.Carto, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.Controls, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.DataSourcesFile, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
    <Reference Include="ESRI.ArcGIS.DataSourcesGDB, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
    <Reference Include="ESRI.ArcGIS.DataSourcesRaster, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
    <Reference Include="ESRI.ArcGIS.Display, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.Geodatabase, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86, processorArchitecture=x86" />
    <Reference Include="ESRI.ArcGIS.Geometry, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.GlobeCore, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.Output, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.System, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.SystemUI, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ESRI.ArcGIS.Version, Version=10.0.0.0, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86" />
    <Reference Include="ExcelLibrary, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">

在这里,我们紧紧需要修改下Version 属性的值为相应的版本就可以了。

最后重新打开与应用程序即可正常运行程序。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 十六进制数(41,F7,AE,14)转换为十进制数为(173,410,198,260)。如果要在程序中编写,可以使用以下代码: ``` int hex = 0x41F7AE14; // 16进制数 int decimal = hex; // 十进制数 ``` 其中,`0x`前缀表示这是一个十六进制数,赋值给整型变量后就会自动转换为十进制数。 ### 回答2: 十六进制是一种数制系统,使用16个数字表示,分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中A表示10,B表示11,依次类推,F表示15。而十进制是我们常用的十个数字表示的数制系统。 要将十六进制数转换为十进制数,我们需要按权展开,并根据权重相加。对于给定的十六进制数(41, F7, AE, 14),可以按照以下步骤进行转换: 1. 首先,将十六进制数的每一位与其对应的权重相乘。从右往左,第一位的权重为16^0=1,第二位的权重为16^1=16,第三位的权重为16^2=256,以此类推。 (14)x 16^0 = 14 x 1 = 14 (AE)x 16^1 = 10 x 16 = 160 (F7)x 16^2 = 15 x 256 = 3840 (41)x 16^3 = 4 x 4096 = 16384 2. 将上述结果相加。 14 + 160 + 3840 + 16384 = 20398 所以,(41,F7,AE,14)的十进制表示为20398。 需要注意的是,转换操作可以通过编程语言来实现。以下是一个使用Python编写的程序示例: ```python hex_num = ['41', 'F7', 'AE', '14'] # 十六进制数(41,F7,AE,14) dec_num = 0 # 十进制数 for i, num in enumerate(hex_num): dec_num += int(num, 16) * 16 ** (len(hex_num) - 1 - i) print(dec_num) # 输出十进制数20398 ``` 这段程序会将十六进制数(41,F7,AE,14)转换为十进制数20398,并将结果打印出来。 ### 回答3: 要将16进制数(41,F7,AE,14)转换为十进制,可以按照以下步骤进行编写程序: 步骤1:定义一个函数或方法,接收一个16进制数作为输入参数。 步骤2:将输入的16进制数以字符串形式保存,并去除其中的逗号。 步骤3:定义一个字典,将16进制数的每个字符与其对应的十进制值进行映射。 步骤4:定义一个变量result,用于保存最终的十进制结果。 步骤5:循环遍历输入的16进制数的每个字符。 步骤6:根据字典中的映射关系,将每个字符转换为对应的十进制值,并累加到result变量中。 步骤7:返回result作为最终的十进制结果。 步骤8:调用该函数,并将输入的16进制数("41F7AE14")作为参数传入。 步骤9:将返回的结果打印输出即可。 一个可能的Python程序如下: def hex_to_decimal(hex_str): hex_dict = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15} result = 0 for char in hex_str: result = result * 16 + hex_dict[char] return result hex_num = "41F7AE14" decimal_num = hex_to_decimal(hex_num) print(decimal_num) 该程序将给定的16进制数转换为十进制,并输出结果。此例中输出结果为2749052492。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值