小编Mar*_*wis的帖子

当属性类型为Int64时,DynamicMethod返回不正确的值

我正在编写一个例程来使用DynamicMethod从对象中检索值.它适用于大多数数据类型,但DateTime.Ticks除外,它是int64

在以下测试应用程序中.我使用MethodInfo和DynamicMethod,methodInfo返回正确的值,但DynamicMethod不返回.有任何想法吗?

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace ConsoleApplication2
{
    public delegate object MemberGetDelegate(object obj);

    class Program
    {
        static void Main(string[] args)
        {
            DateTime dat = DateTime.Today;
            PropertyInfo pi = typeof(DateTime).GetProperty("Ticks");
            MethodInfo mi = pi.GetGetMethod();
            Type type = pi.PropertyType;
            object ticks = mi.Invoke(dat, new object[] { });
            Console.WriteLine("Get by MethodInfo " + ticks.ToString());

            MemberGetDelegate mget=TypeUtils.GetMemberFunc(pi);
            object ret = mget(dat);
            Console.WriteLine("Get by DynamicMethod " + ret.ToString());

            Console.Read();
        }
    }

    static class TypeUtils
    {
        public static readonly Type objectType = typeof(object); …
Run Code Online (Sandbox Code Playgroud)

.net reflection reflection.emit

5
推荐指数
0
解决办法
848
查看次数

在Windows上绑定IPv6服务器套接字

我尝试使用此片段在Windows 7上绑定Java 1.6中的IPv6服务器套接字:

ssock = ServerSocketChannel.open();
ServerSocket sock = ssock.socket(); 
sock.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[16]), 0));
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会因IOException而失败:协议族不支持的地址族:bind

我知道Java的编写假设Windows使用单独的v4和v6堆栈(即使Windows 7没有),因此绑定v4和v6的单个套接字也无法工作.但是,这不是我想要做的:我只想将v6套接字绑定到任何地址(即::).

编辑:Vista上也失败了.

我究竟做错了什么?

java windows ipv6 windows-7

5
推荐指数
1
解决办法
4952
查看次数

转发DLL中的数据

我需要将一组符号从一个DLL转发到另一个DLL(如果你想知道的话,支持一些版本控制方案,PEP 384).它适用于各种功能; 我写了一个模块定义文件,说

LIBRARY "python3"
EXPORTS
  PyArg_Parse=python32.PyArg_Parse
  PyArg_ParseTuple=python32.PyArg_ParseTuple
  PyArg_ParseTupleAndKeywords=python32.PyArg_ParseTupleAndKeywords
[...]
Run Code Online (Sandbox Code Playgroud)

但是,数据失败了.如果我说

PyBaseObject_Type=python32.PyBaseObject_Type
Run Code Online (Sandbox Code Playgroud)

然后链接器抱怨PyBaseObject_Type是一个未解析的符号,即使它实际上是从python32.dll导出的.看一下导入库,我注意到,对于数据,只有_imp__符号,所以我试过了

PyBaseObject_Type=python32._imp__PyBaseObject_Type
Run Code Online (Sandbox Code Playgroud)

链接器现在实际上创建了一个DLL,但是,在此DLL中,转发转到_imp__符号,然后在运行时无法解析.我也尝试将DATA放入线路(有或没有_imp__); 这没有什么区别.

IIUC,转发数据应该可以正常工作,因为数据是__declspec(dllimport)针对DLL的任何导入器声明的,因此编译器应该正确解释引用.

那么:我如何生成一个执行数据转发的DLL?

dll linker

5
推荐指数
1
解决办法
2771
查看次数

是否有任何编译器/解释器来执行php 5.3的代码?

是否有任何在线编译器/解释器来执行php 5.3的代码?

就像有一个PHP http://codepad.org/

但它不支持php 5.3功能.

有人可以帮忙吗?

php-5.3

5
推荐指数
1
解决办法
1520
查看次数

使用twisted的反应器进行Python多处理

我正在开发一个xmlrpc服务器,它必须周期性地执行某些任务.我使用twisted作为xmlrpc服务的核心,但我遇到了一个小问题:

class cemeteryRPC(xmlrpc.XMLRPC):

    def __init__(self, dic):
        xmlrpc.XMLRPC.__init__(self)


    def xmlrpc_foo(self):
        return 1


    def cycle(self):
        print "Hello"
        time.sleep(3)


class cemeteryM( base ):

    def __init__(self, dic):   # dic is for cemetery
        multiprocessing.Process.__init__(self)
        self.cemRPC = cemeteryRPC()


    def run(self):
        # Start reactor on a second process
        reactor.listenTCP( c.PORT_XMLRPC, server.Site( self.cemRPC ) )
        p = multiprocessing.Process( target=reactor.run )
        p.start()

        while not self.exit.is_set():
            self.cemRPC.cycle()
            #p.join()


if __name__ == "__main__":

    import errno
    test = cemeteryM()
    test.start()

    # trying new method
    notintr = False
    while not notintr:
        try:
            test.join() …
Run Code Online (Sandbox Code Playgroud)

python twisted multiprocessing

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

如何实现线程库?

编写用于实现线程库的代码是内核代码的一部分吗?pthread_create()等函数的实现是内核的一部分吗?

multithreading operating-system linux-kernel

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

Java NIO:读取可变大小的块

我想从TCP流中读取一个字符串,该字符串长度后跟实际数据.在Python中,我会这样做

length = ord(stream.read(1))
data = stream.read(length)
Run Code Online (Sandbox Code Playgroud)

我如何在Java NIO中做同样的事情?我有一个缓冲区(容量257)

stream.read(buffer); // cannot specify a size here
int length = buffer.get();
byte[] data = new byte[length];
buffer.get(data);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不工作:的get()调用read 过去在缓冲区中的数据:-(

我可能需要翻转,倒带,重置等组合,但我无法弄明白.

java buffer nio

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

VS2008 extern模板

Microsoft有一个扩展,可以声明模板实例化是外部的; 因此,它不会被隐式实例化.至少那是理论.我尝试用代码再现它

#include <vector>

class Foo{
    int i;
public:
    virtual ~Foo();
};

extern template class std::vector<Foo>;
Run Code Online (Sandbox Code Playgroud)

这给了我

warning C4231: nonstandard extension used : 'extern' before template 
explicit instantiation
Run Code Online (Sandbox Code Playgroud)

然而,似乎没有其他事情发生:程序继续链接find,即使我使用push_back(并且dumpbin显示push_back被实例化).

只有当我宣布

extern template void std::vector<Foo>::push_back(const Foo&);
Run Code Online (Sandbox Code Playgroud)

我按预期得到链接器错误.

那么:我如何将整个实例化(所有成员)声明为显式,以防止隐式实例化?

c++ templates visual-studio-templates

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

C ++中的HTTP Json请求?

如何在C ++中发出HTTP Json请求?有图书馆吗?在“ HTTP Json请求”下,我的意思是使用Json对象作为数据进行POST,并以Json接收结果。

c++ post json http httpwebrequest

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

IDL静态接口

对于WinRT,IDL现在支持如下构造:

[marshaling_behavior(agile)]
[threading(both)]
[activatable(0x06020000)]
[version(0x06020000)]
[static(Windows.Networking.Sockets.IDatagramSocketStatics, 0x06020000)]
runtimeclass DatagramSocket
{
    [default] interface Windows.Networking.Sockets.IDatagramSocket;
    interface Windows.Foundation.IClosable;
}
Run Code Online (Sandbox Code Playgroud)

我对这个static属性感到好奇.这是什么意思?它如何与主体内部列出的接口相关runtimeclass

idl interface windows-runtime

3
推荐指数
2
解决办法
1441
查看次数