选择集无法在当前试图中显示

本文介绍了解决ArcGIS Server对象在ArcCatalog中创建后无法预览的问题。主要原因是输出值和HTTP地址配置不当。文章提供了详细的步骤指导如何正确设置输出目录及更新属性。
错误消息:
服务器对象在ArcCatalog中创建成功后无法预览. ArcCatalog弹出如下错误消息:

"Your selection cannot be displayed in the current view."

原因:
输出值和赋给服务器属性的HTTP地址可能不正确。
 
解决办法:

所有创建的ArcGIS Server对象必须首先停止。


  1. 在ArcCatalog中右健点击ArcGIS Server,添加和选择 Server属性.
  2. 在Directories栏,高亮增加的输出目录,点击编辑。
  3. 输出目录应该指向有效的目录,例如C:/ArcGIS/Output.

    如果指向虚拟目录,确保它有效,并且形式如下:
    http://<servername>/output

  4. 更新属性,然后重新创建server对象,以让改变生效。
<think>嗯,用户遇到了DLL入口点找不到的问题,这属于Windows系统开发中常见的动态链接库加载错误。用户提供的引用资料显示ta已经查阅过相关解决方案,但需要更系统的整理。 从技术层面看,这个问题可能涉及多个层面:首先是DLL文件本身的问题,比如导出函数名不匹配或损坏;其次是环境配置问题,比如路径错误或位数不匹配;还有可能是注册或依赖项的问题。用户引用的解决方案中提到了dumpbin工具的使用,这确实是诊断问题的关键手段。 用户可能正在开发涉及C++和C#混合编程的项目,因为引用[3]和[4]都涉及C#调用C++ DLL的情况。考虑到用户能提供具体的错误描述和参考资料,ta应该是有一定开发经验的程序员,但可能对Windows底层的DLL机制不够熟悉。 需要特别注意32/64位兼容性问题,这是现代Windows开发中最常见的坑。用户提供的引用[1]特别强调了这一点,说明ta可能已经遇到过位数不匹配的情况。另外注册DLL的方法虽然简单,但实际项目中往往需要管理员权限,这点要在解决方案中明确提示。 对于高级用户,还应该提供调试建议,比如使用Dependency Walker分析依赖关系。不过考虑到用户当前的需求,先聚焦在基础解决方案上更合适,把进阶方法放在相关问题里供ta后续探索。 最后要提醒用户注意DLL文件来源的安全性,避免从不可靠网站下载,这点在引用[1]的解决方案中特别需要强调。</think>遇到“无法在DLL中找到入口点”错误,通常表示程序试图调用DLL中不存在的函数。以下是系统性的解决方案,结合了关键引用信息: ### 🔧 核心解决方法 1. **验证函数签名一致性** - 确保C#的`DllImport`声明与DLL实际导出函数**完全匹配**(函数名、调用约定`CallingConvention`、字符`CharSet`、参数类型和顺序)[^3]。 *示例:C++导出函数* ```c extern "C" __declspec(dllexport) int __cdecl CalculateSum(int a, int b); ``` *对应C#声明:* ```csharp [DllImport("MyLib.dll", EntryPoint = "CalculateSum", CallingConvention = CallingConvention.Cdecl)] public static extern int CalculateSum(int a, int b); ``` 2. **使用dumpbin检查导出函数** - 打开VS开发人员命令提示符,执行: ```bash dumpbin /EXPORTS YourDLL.dll > exports.txt ``` - 检查输出文件`exports.txt`,确认目标函数名和修饰名是否存在(如`?CalculateSum@@YAHHH@Z`)。若使用`extern "C"`,函数名应无修饰[^4]。 3. **32/64位兼容性处理** - **关键步骤**:将32位DLL放入`SysWOW64`,64位DLL放入`System32`(反直觉但系统设计如此)[^1]。 - 检查程序与DLL的位数是否一致(AnyCPU需匹配目标系统)。 4. **显式指定EntryPoint** 若函数名被修饰,在C#中直接使用修饰名作为入口点: ```csharp [DllImport("MyLib.dll", EntryPoint = "?CalculateSum@@YAHHH@Z")] ``` 5. **注册DLL(仅限COM组件)** 非COM DLL无需注册!若需注册: ```bash regsvr32 /s YourDLL.dll # /s表示静默注册 ``` ### ⚠️ 其他关键排查点 - **依赖项缺失**:用**Dependency Walker**检查DLL是否依赖其他未部署的DLL。 - **路径问题**:确保DLL位于: - 应用程序目录 - `System32`/`SysWOW64` - 或通过`SetDllDirectory`添加的路径 - **文件损坏**:重新编译DLL,或从可信来源获取(如官网)。 - **安全软件拦截**:临时禁用杀毒软件测试。 ### 🔍 诊断工具推荐 1. **Dependency Walker**:分析DLL依赖树和导出函数。 2. **Process Monitor**:监控程序加载DLL时的路径搜索过程。 3. **调试器断点**:在C++ DLL入口函数设断点,确认是否被加载。 > **典型错误案例**:C++默认使用`__stdcall`调用约定(函数名修饰为`_FunctionName@N`),而C#默认`CallingConvention.StdCall`。若C++未用`extern "C"`导出,需在C#中匹配修饰名[^3]。 📌 **操作流程图** ```mermaid graph TD A[报错“找不到入口点”] --> B{检查DllImport声明} B -->|匹配| C[用dumpbin验证导出函数] B -->|不匹配| D[修正函数签名] C -->|存在| E[检查位数兼容性] C -->|不存在| F[检查DLL编译选项] E -->|32/64一致| G[检查依赖项] E -->|不一致| H[更换匹配位数的DLL] G -->|正常| I[检查安全软件] G -->|缺失| J[补全依赖DLL] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值