小编Kas*_*erg的帖子

使用[StructLayout(LayoutKind.Sequential)]进行解组时,C#在哪里存储结构的vtable?

我有一个传输二进制数据的设备.要解释我定义struct的数据与数据格式匹配.该struct有一个StuctLayoutAttributeLayoutKind.Sequential.这按预期工作,例如:

[StructLayout(LayoutKind.Sequential)]
struct DemoPlain
{
     public int x;
     public int y;
}

Marshal.OffsetOf<DemoPlain>("x");    // yields 0, as expected
Marshal.OffsetOf<DemoPlain>("y");    // yields 4, as expected
Marshal.SizeOf<DemoPlain>();         // yields 8, as expected
Run Code Online (Sandbox Code Playgroud)

现在我希望处理一个类似于其他结构的结构,所以我尝试了实现接口的结构:

interface IDemo
{
    int Product();
}


[StructLayout(LayoutKind.Sequential)]
struct DemoWithInterface: IDemo
{
     public int x;
     public int y;
     public int Product() => x * y;
}

Marshal.OffsetOf<DemoWithInterface>("x").Dump();    // yields 0
Marshal.OffsetOf<DemoWithInterface>("y").Dump();    // yields 4
Marshal.SizeOf<DemoWithInterface>().Dump();         // yields 8
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,偏移和大小DemoWithInterface保持相同DemoPlain …

c# inheritance vtable unmarshalling

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

C#从路径中剪切文件名

我正在创建一个图像提取工具,我能够用完整路径检索图像..

例如:

在此处输入图片说明

我需要从路径中剪切文件名(rss)...

我搜索帖子并尝试以下

//1.
 //string str = s.Split('/', '.')[1];

//2.    
            string s1;

               // string fileName = "abc.123.txt";
                int fileExtPos = s.LastIndexOf(".");
                if (fileExtPos >= 0)
                    s1 = s.Substring(0, fileExtPos);


//3.
                //var filenames = String.Join(
                //    ", ",
                //    Directory.GetFiles(@"c:\", "*.txt")
                //       .Select(filename =>


//4.
                //           Path.GetFileNameWithoutExtension(filename)));
Run Code Online (Sandbox Code Playgroud)

似乎没有工作

我想要“图像”和“png”之间的名称..确切的代码是什么?

任何建议都会有所帮助

c# path

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

如何通过临时文件将数据传输到其他进程

我想从我的程序中将一些数据发送到通过执行的进程uiop:run-program.

以下作品:

(require :asdf)
(asdf:load-system :uiop)
(uiop:with-temporary-file (:stream dot-program-stream
                           :pathname dot-program-file)
  (format dot-program-stream "digraph g { n1 -> n2; }")
  (finish-output dot-program-stream)
  :close-stream
  (uiop:with-temporary-file (:pathname png-data)
    (uiop:run-program '("/usr/bin/dot" "-Tpng") :input dot-program-file
                                                :output png-data)
    (uiop:launch-program '("/usr/bin/display") :input png-data)))
Run Code Online (Sandbox Code Playgroud)

这似乎相当复杂.

一个更简单的版本,我只使用了一个流没有,finish-output并且没有使用:close-stream标签导致产生dot一个空的0字节文件.

如何执行一个进程并将我的lisp程序生成的数据作为标准输入传递?

sbcl common-lisp graphviz

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

如何重新初始化swank?

如何让swank忘记以前评估的所有定义?

我希望它取消定义通过评估定义的所有宏,函数和变量(例如,b评估缓冲区).让它恢复到我重新启动电脑并重新启动swank服务器时的状态.

我试过了:

  • 所述清除-REPL( ,-)命令:

    这只会清除屏幕(缓冲区).

  • CL-USER> (swank:restart-server)(来自REPL缓冲区):

    服务器重新启动但仍记得我的旧defun定义和其他定义.

  • CL-USER> (slime-restart-inferior-lisp)和`(slimv-restart-inferior-lisp)

    两者都未定义.

vim common-lisp swank slimv

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

与cpp-netlib的http连接有多近?

运行从[/ edit] HttpClient示例复制的Cpp-netlib(版本0.11-rc1)[编辑(添加)] 代码时,无法完成.

我认为是因为连接处于打开状态.1.我的假设是否正确?2.是否必须手动关闭连接?3.如果是,如何访问连接?

c++ cpp-netlib

2
推荐指数
1
解决办法
988
查看次数

调试/卸载PowerShell Cmdlet

我正在使用Visual Studio 2015在C#中编写PowerShell Cmdlet.调试它工作正常,但在关闭PowerShell窗口之前我无法重建DLL.DLL似乎正在使用中,因此无法删除(不在命令行上,也不能使用资源管理器).我试过删除模块.这成功删除了我的Cmdlet,但我仍然无法删除/覆盖它.

关闭PowerShell,重建DLL然后重新打开新的PowerShell,cd到DLL路径(通常是深度嵌套),再次重新导入它,启动命令调试等等,这对于每个调试会话都是非常不方便的. ..

卸载DLL有没有更好的解决方案?

c# powershell visual-studio

2
推荐指数
1
解决办法
1202
查看次数

如何重新创建由`make-symbol`创建的符号

我的程序创建虚拟数据.这些虚拟数据的一部分是符号形式的键:( fixnum值以其罗马数字作为符号作为键).程序将这些虚拟键值对存储在我正在开发的数据结构中.(lambda (i) (make-symbol(format nil"~@r"i)))

我尝试使用REPL中的这些符号来测试按键检索值.然而:

(equal (make-symbol "IX") (make-symbol "IX"))
Run Code Online (Sandbox Code Playgroud)

(equal (make-symbol "IX") 'IX))
Run Code Online (Sandbox Code Playgroud)

有没有办法输入先前make-symbol在REPL中创建的符号,以便两者都是equal

common-lisp

2
推荐指数
1
解决办法
58
查看次数