从 Azure 辅助角色调用 x86 dll



我创建了一个 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 等绑定,可以从辅助角色调用该服务。

最新更新