小编Kri*_*ter的帖子

固定一个功能指针

我需要将托管回调传递给非托管TCP接收器.由于它是一个需要在应用程序的生命周期中存在的线程,我需要防止它被垃圾收集.我到处都读到不需要固定函数指针,GCHandle.Alloc将完成阻止垃圾收集的工作.

但这是给定的吗?我已经看到托管此代码的AppPool因访问冲突而崩溃.为什么我不怀疑发生此错误的事实是因为函数指针被垃圾收集了?

这篇文章支持这一事实.

更新:这似乎大大减少了崩溃.这种方法有问题吗?

typedef void (__cdecl *ProcMessageFunc)(void* param, void* paramBuf, ULONG bufSize);
FuncDelegate^ fp = gcnew MessageFuncDelegate(this, &Handler); 
pin_ptr<MessageFuncDelegate^> pinnedFunctionPointer = &fp; 
ret = Receiver ((ProcMessageFunc)pinnedFunctionPointer);
Run Code Online (Sandbox Code Playgroud)

c# interop c++-cli

8
推荐指数
1
解决办法
3053
查看次数

c# - 在另一个文件中使用别名

是否可以在整个程序集中使用在一个文件中定义的别名?

例如.在Foo.cs我有

using IO = System.IO;
namespace Foo
{}
Run Code Online (Sandbox Code Playgroud)

如何在FooBar.cs中使用别名"IO"

namespace Foo.Bar
{}
Run Code Online (Sandbox Code Playgroud)

c# namespaces

4
推荐指数
1
解决办法
1578
查看次数

Windows 中的 SO_REUSEADDR 和 UDP 行为

我知道在 *NIX 环境中将 SO_REUSEADDR 与 UDP 一起使用,其行为类似于多播,其中绑定到同一端口的多个客户端可以同时侦听和接收广播数据报。这也是 Windows 上的行为吗?

sockets windows udp

3
推荐指数
1
解决办法
5584
查看次数

标签 统计

c# ×2

c++-cli ×1

interop ×1

namespaces ×1

sockets ×1

udp ×1

windows ×1