1

我创建了一个 Azure 工作者角色项目。项目的目标机器必须是 x64 机器。我应该从工作角色调用 Stasm 和 OpenCV dll。但我认为它们可以在 x86 机器上编译。我该怎么办?

4

2 回答 2

3

基本上,您正在尝试在您的辅助角色中使用本机 C++ DLL,因此从技术上讲,您希望在您的辅助角色中访问本机模块。我不认为 OpenCV x86 二进制文件与 Worker ole 有任何问题,而是本机,不需要额外的努力。

完全同意@Sandrino 的建议,但想在他的#1) 建议中添加一些东西。当您创建包含使用 OpenCV 的所有逻辑的本机 EXE 时,最好直接从 ServiceDefinition 中的 ProgramEntryPoint 设置启动,并且您不需要在 Worker 角色中添加任何代码,除非您有 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相比可能有点过分了。

于 2012-05-29T01:32:15.973 回答
1

worker角色进程确实是x64的。但这只是针对那个特定的过程。您可以让其他进程与这些 x86 dll 交互:

  • 也许您可以在控制台应用程序 (x86) 中编写所有逻辑并将其包含在您的工作角色项目中。然后在 WorkerRole.cs 类的Run方法中,您可以简单地启动该进程(使用 Process.Start)来完成实际工作,而您的 WorkerRole.cs 类将仅用作入口点。
  • 您还可以简单地在外部进程中托管 WCF 服务(这也可以是在 x86 中编译的简单控制台应用程序)。然后,使用 NetTcpBinding 或 NetNamedPipeBinding 之类的绑定,您可以从您的辅助角色调用该服务。
于 2012-05-28T15:21:50.987 回答