从Azure Worker Role调用x86 dll

时间:2012-05-28 15:01:22

标签: opencv azure pinvoke azure-worker-roles

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

2 个答案:

答案 0 :(得分: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相比有点过分。

答案 1 :(得分:1)

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

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