很抱歉这个令人困惑的标题,
我正在使用c#并尝试使用ArcMap,这是一堆允许我使用地理文件并使用c ++编写然后用托管c ++包装的dll,我在工作场所使用的Arcmap版本是32位因此,与其Dll交互的唯一方法是开发32位应用程序。
我有一个64位应用程序,它使用我写的一个类,它位于另一个dll(我可以制作32位或以任何必要的方式配置),该类加载ArcMap dll并尝试使用它们来读取一些文件(形状文件)..
问题是我无法从64位应用程序加载32位类...而且我无法将使用Arcmap对象的类从32位更改为64位,因为这样就不会加载arcmap dll。 / p>
我目前唯一的解决方案是将类转换为控制台项目,将其作为32位运行并等待它完成,控制台项目将把他红色的数据写入txt文件,反过来我将从中读取我最初的64位应用程序。
这是我曾经遇到过的最丑陋的解决方法,我希望有人可以帮我找到更好的解决方案。
提前致谢,
P.S 如果我的问题中的某些部分不清楚,请评论什么,我会尝试解释我的意思。
答案 0 :(得分:4)
您有以下限制:
由此可以得出结论,第三方代码必须在32位进程中运行。这意味着您有以下选择:
您在问题中描述的丑陋的解决方案是实现选项2的一种方法。但是,这样做的方法不那么难看。您可以使用远程过程调用机制(RPC),而不是使用外部文件进行通信。
有很多选择,但最明显的选择是COM。将32位代码放入进程外COM服务器并从64位应用程序中使用它。这将允许您编写使用方法调用与第三方库通信的干净代码。底层的RPC机制完成了在两个进程之间获取信息所涉及的所有低级繁重工作。
答案 1 :(得分:1)
您也可以创建一个32位应用程序并启用COM / DCOM或其他类型的.NET远程处理来与您的64位主应用程序进行讨论。所以你不需要读/写文件。 您也可以使用其他形式的IPC(命名管道,DCE / RPC) - 但这可能不是那么简单。
请看这里的一些指示:
Is there a viable counterpart to DCOM in .NET?
DCOM server and client both written in .NET
How can a 32 bit process communicate with a 64 bit process in .NET?
答案 2 :(得分:0)
您可以通过以下语法将64位应用程序转换为32位应用程序: CorFlags.exe xxx.exe / 32BIT +