首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >奇怪的DllImport行为(仅在Unity3d中)

奇怪的DllImport行为(仅在Unity3d中)
EN

Stack Overflow用户
提问于 2013-02-27 10:09:57
回答 1查看 949关注 0票数 0

我在C中为C#编写了一个Winsock的简单包装器。当我在某些线程中使用Socket.Accept(),在主线程中使用client.Connect时,有时我(接收DllNotFoundException )。

System.DllNotFoundException:抛出了“System.DllNotFoundException”类型的异常。at (包装托管到本地) TcpWrapper:ES_ConnectClient (string,int) at TcpClientSocket.Connect (System.String地址,Int32端口) 0x00000 in C:...\ESCore\TcpClientSocket.cs:21

TcpClientSocket.Connect调用

代码语言:javascript
运行
复制
[DllImport("ESocket")]
public static extern int ES_ConnectClient(string ip, int port);

我不知道为什么这种事很少发生。

一些代码:

代码语言:javascript
运行
复制
listener = new TcpListenerSocket(50231); //calling bind from library here
if (listener.Start()) //calling listen from library
{
    thread = new Thread(new ThreadStart(Listen));
    thread.Start();


    client = new TcpClientSocket();
    if(client.Connect("localhost", 50231)) //exception here!
    {
        ...
        client.Close();
    }
}

线程代码:

代码语言:javascript
运行
复制
void Listen()
{
    while (m_Running)
    {
        if (listener.Pending()) //select from library
        {
            TcpClientSocket socket = listener.Accept(); //accept from library
            if (socket != null)
            {
                ...
                socket.Close();
            }
        }
    }
}

侦听器也在库中。

图书馆代码:http://pastie.org/private/hdgl9zqxfjt2arlkj11q

更新:仅在Unity3d中发生的。在Microsoft和Microsoft .NET中没有错误。

EN

Stack Overflow用户

发布于 2013-02-27 12:55:17

这是一个简单的“文件找不到”错误消息。您从未说过“而且我确保DLL是存在的”,所以这是可能的失败模式。

您必须确保Windows可以找到DLL,它应该与EXE位于同一个文件夹中。选择您的C#项目。项目+添加现有项目,选择ESocket.dll文件,以便将其添加到项目中。选择它并切换到“属性”窗口。将副本设置为选项为“复制(如果更新)”。如果DLL是由解决方案中的另一个项目生成的,那么一定要设置项目依赖关系,以便始终先构建该项目。重建你的项目。

这确保了ESocket.dll始终存在于构建目录中,并且始终可以找到它。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15109343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档