6

我正在尝试使用 ZeroMQ C#-binding ( http://www.zeromq.org/bindings:clr ) 与我在 Unity 中创建的游戏的服务器通信(我使用的是 Mac OS X 10.8)。因此,我创建了一个连接到服务器、发送消息然后接收消息的简单函数:

using UnityEngine;
using System.Runtime.InteropServices;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZeroMQ;



public class NetworkZero : MonoBehaviour {

    // Use this for initialization
    public static NetworkZero instance; 

    void Start () {
        instance = this;
        Debug.Log("START NETWORK COMMUNICATION");
    }


    // Update is called once per frame
    void Update () {
        using (ZMQ.Context context = new ZMQ.Context(1))
            using (ZMQ.Socket client = context.Socket(ZMQ.SocketType.REQ))
            {
                 string sendMSG = "CLIENT";
                 client.Connect("tcp://localhost:31415");
                 client.Bind("tcp://localhost:31415");
                 client.Send(sendMSG, Encoding.Unicode);
                 string message = client.Recv(Encoding.Unicode);
                 Debug.Log("Received request: " + message);
            }
    }
}

我按照说明在我的项目中包含了必要的库,并在 monoDevelop 中添加了对这些库的引用。但是在程序构建时,当我尝试运行程序时仍然出现以下错误:

DllNotFoundException: libzmq
ZMQ.Context..ctor (Int32 io_threads)
NetworkZero.Update () (at Assets/SLIP/NetworkZero.cs:26)

有没有人有什么建议?

4

3 回答 3

0

确保您已将引用程序集的“复制本地”设置为 true。

于 2012-11-12T16:10:09.120 回答
0

当我添加 dll 时,我总是将它们添加到 Unity 中(将它们拖放到某处),然后 Unity 做了一些魔术并重新生成了引用都正确的 IDE 项目文件。

黑暗中的另一个刺 - 如果这些库做互操作的东西,你可能需要它们在文件夹“插件”中(可能需要直接在资产下,“资产/插件”,未经测试)。插件是 Unity 的专业功能,但它们不适用于 Web 应用程序。

于 2012-11-14T15:18:43.767 回答
0

我过去在尝试在 32 位应用程序中使用 64 位 dll 时收到过此消息。您提到它在编辑器(64 位)中工作,但在构建中没有,我建议您仔细检查您的架构是否与 ZeroMQ 库的架构匹配?为此,请转到 [Unity] > File > Build Settings,然后在 Architecture 下选择 x86_64。

在此处输入图像描述

于 2017-04-22T10:53:11.903 回答