我创建了一个 Azure Worker Role Project。项目的目标计算机必须是 x64 计算机。我应该从worker角色中调用Stasm和OpenCV dll。但我认为它们可以在 x86 机器上编译。我该怎么办?
您正在尝试在辅助角色中使用本机C++ DLL,因此从技术上讲,您希望访问辅助角色中的本机模块。我不认为 OpenCV x86 二进制文件是 Worker ole 的任何问题,而是原生的,几乎不需要额外的努力。
完全同意@Sandrino的建议,但想在他的#1)建议中添加一些东西。创建包含使用 OpenCV 的所有逻辑的本机 EXE 后,最好直接从 ServiceDefinition 中的 ProgramEntryPoint 设置启动,并且无需在辅助角色中添加任何代码,除非您有 TCP/IP 终结点并希望在应用程序中使用。服务定义如下:
<WorkerRole name="Your_WorkerRole" vmsize="Small">
<Runtime executionContext="limited">
<EntryPoint>
<ProgramEntryPoint commandLine="_your_application_.exe _Parameters_" setReadyOnProcessStart="true" />
</EntryPoint>
</Runtime>
<Endpoints>
<InputEndpoint name="_Your_Endpoint_" protocol="tcp" port="80" />
</Endpoints>
我个人认为与#1相比,上面的第二个选项可能有些矫枉过正。
辅助角色进程确实是 x64。但这只是针对那个特定的过程。您可以让其他进程与这些 x86 dll 交互:
- 也许可以在控制台应用程序 (x86) 中编写所有逻辑,并将其包含在辅助角色项目中。然后在 WorkerRole.cs 类的 Run 方法中,只需启动该进程(使用 Process.Start)即可执行实际工作,并且 WorkerRole.cs 类将仅用作入口点。
- 您也可以简单地在外部进程中承载 WCF 服务(这可以是用 x86 编译的简单控制台应用程序)。然后,使用 NetTcpBinding 或 NetNamedPipeBinding 等绑定,可以从辅助角色调用该服务。