问题列表 - 第15664页

从C#调用非托管代码 - 返回带数组的结构

[编辑]我改变了斯蒂芬马丁建议的来源(以粗体突出显示).并添加了C++源代码.

我想在自编的C++ DLL中调用一个非托管函数.该库读取机器的共享内存,以获取第三方软件的状态信息.由于有几个值,我想在结构中返回值.但是,在结构中有char [](具有固定大小的char数组).我现在尝试从dll调用接收该结构,如下所示:

[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_OUTPUT
{
    UInt16 ReadyForConnect;        

    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
    String VersionStr;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
    String NameOfFile;    
    // actually more of those
}

public partial class Form1 : Form
{
    public SYSTEM_OUTPUT output;

    [DllImport("testeshm.dll", EntryPoint="getStatus")]
    public extern static int getStatus(out SYSTEM_OUTPUT output);

    public Form1()
    {
        InitializeComponent();           

    }

    private void ReadSharedMem_Click(object sender, EventArgs e)
    {
        try
        {
            label1.Text = getStatus(out output).ToString();
        }
        catch (AccessViolationException ave)
        {
            label1.Text = ave.Message;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也会发布c …

c# c++ pinvoke ipc marshalling

7
推荐指数
1
解决办法
4037
查看次数

如何在ASP.NET MVC中实现插页式"加载..."页面?

我有一个SearchController,其动作可以执行一些长时间运行的搜索并返回结果页面.搜索可能需要1到60秒.搜索的URL是以下格式的HTTP GET请求:http://localhost/Search?my=query&is=fancy

我正在寻找的体验类似于那里的许多旅游网站.我想展示一个中间的"正在加载......"页面,理想情况是:

  1. 用户可以重新加载页面而无需重新启动搜索
  2. 后端搜索完成后,用户将重定向到结果
  3. 禁用JavaScript的浏览器的体验会降低
  4. 后退按钮/浏览器历史记录不应包含此插页式页面.
  5. 在短搜索(1秒)的情况下,它对获得结果或体验的时间没有显着影响(显着丑陋的页面闪烁,无论如何)

这些都是不错的选择.我对所有想法持开放态度!谢谢.

c# asp.net-mvc performance user-interface progressive-enhancement

6
推荐指数
2
解决办法
6512
查看次数

C++函数参数:使用引用还是指针(然后取消引用)?

我得到了一些代码,其中一些参数是指针,然后指针被解引用以提供值.我担心指针取消引用会花费周期,但在查看之前的StackOverflow文章之后:取消引用指针有多贵?,也许没关系.

这里有些例子:


bool MyFunc1(int * val1, int * val2)
{
    *val1 = 5;
    *val2 = 10;
    return true;
}

bool MyFunc2(int &val1, int &val2)
{
    val1 = 5;
    val2 = 10;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我个人更喜欢传递参考作为一种风格问题,但是一个版本(在处理周期方面)比另一个版本更好吗?

c++ performance pointers

17
推荐指数
5
解决办法
6849
查看次数

设置DOM创建的元素的名称在IE中失败 - 解决方法?

今天我有点辛苦了:

function mk_input( name, val ) {
    var inp = document.createElement( 'input' );
    inp.name = name;
    inp.value = val;
    inp.type = 'hidden';

    return inp;
}
Run Code Online (Sandbox Code Playgroud)

事实证明,设置name通过创建的元素createElement在IE中不起作用.它不会导致错误或任何事情,它只是默默地失败,导致人们思考为什么他们的隐藏字段没有正确填充.

据我所知,没有解决方法.你必须咬住子弹并<input>通过字符串操作创建标签并将其粘贴在其中.innerHTML.

有没有更好的办法?也许像jQuery这样的东西?我做了一个粗略的搜索,并没有找到任何与createElementJQuery 完全类似的东西,但也许我错过了一些东西.

javascript jquery internet-explorer dom

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

"使用"和范围界定之间的区别?

以下两段代码之间有什么区别:

using (Object o = new Object())
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

{
    Object o = new Object();
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我已经开始使用using更多但是我很好奇与范围对象相比实际上有什么好处.

编辑:我从中获取的有用花絮:

Jon Skeet:

请注意,这不会以任何方式,形状或形式强制进行垃圾收集.垃圾收集和快速资源清理有些正交.

埃德斯会评论:

除非您的类实现了IDisposable接口,并且具有Dispose()函数,否则不要使用.

c# scope using

7
推荐指数
1
解决办法
292
查看次数

为什么内存数据在我的MVC原型中的多个浏览器会话中保持不变?

我有一个基本的MVC应用程序 - 从MVC应用程序模板生成.我创建了一个基本的控制器,它包含通常的Index,Details,Edit和Create方法; 我有几个类来保存我的对象Person:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

另一个模拟假DAL.它不会将数据保存到文件或数据库,它只是为了这个原型的目的的快速模型:

public class PersonData
{
    /* Fake out our initial repository */
    static List<Person> People = new List<Person>()
    {
        new Person() { Id=1, FirstName="John", LastName="Doe", Description="King of the world" },
        new Person() { Id=2, FirstName="Jane", LastName="Doe", Description="Chief whip cracker" }
    };

    /* Set …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc

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

我的安全重新安全有多安全?

(后期编辑:这个问题将有望被淘汰时的Java 7自带因为的,"最终重投"功能,似乎将被添加.)


很多时候,我发现自己处于这样的情况:

    do some initialization
    try {
        do some work 
    } catch any exception {
        undo initialization
        rethrow exception
    }

在C#中你可以这样做:

InitializeStuff();
try
{
    DoSomeWork();
}
catch 
{
    UndoInitialize();
    throw;
}
Run Code Online (Sandbox Code Playgroud)

对于Java来说,没有很好的替代,并且由于改进的异常处理的提议是从Java 7中删除的,所以看起来好几年才能得到类似的东西.因此,我决定自己动手:

(编辑: 半年后,最后的重新抛出回来了,或者看起来如此.)

public final class Rethrow {

    private Rethrow() { throw new AssertionError("uninstantiable"); }

    /** Rethrows t if it is an unchecked exception. */
    public static void unchecked(Throwable t) {
        if (t instanceof Error)
            throw …
Run Code Online (Sandbox Code Playgroud)

java exception

11
推荐指数
1
解决办法
1631
查看次数

从十六进制数中获取Windows系统错误代码标题/说明

我正在使用p/invoke搞乱一些windows函数.偶尔,我得到的错误代码不是ERROR_SUCCESS(这么奇怪的名字).

有没有办法在程序中查看这些内容?例如,如果我收到错误1017.我可以告诉用户

系统已尝试将文件加载或还原到注册表中,但指定的文件不是注册表文件格式.(ERROR_NOT_REGISTRY_FILE:0x3F9)

代替

错误代码:1017

.net c# windows pinvoke

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

在Outlook 2007中设置电子邮件标记状态

Outlook 2007中是否有办法在电子邮件对象上设置后续标志?看起来它在Outlook 2003中支持.FlagStatus属性,但我在2007年找不到它.

outlook vba outlook-vba outlook-2007

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

删除Linq查询中的WHERE子句

我有一个包含许多位列的产品信息表.可以从具有每列复选框的界面查询此表.复选框分为几个相关组.

例如,其中三列描述了产品适用于各种市场,包括汽车,航空和海运.

如果没有选中这些复选框,我希望执行以下SQL.

SELECT * FROM Products
Run Code Online (Sandbox Code Playgroud)

如果检查了Automotive,则应执行以下SQL

SELECT * FROM Products WHERE Automotive = 1
Run Code Online (Sandbox Code Playgroud)

如果检查了多个,我希望选项一起进行OR运算

SELECT * FROM Products WHERE 
    Automotive = 1 
    OR 
    Aviation = 1
Run Code Online (Sandbox Code Playgroud)

在古老的C#和SQL中,我可以通过有条件地将SQL结合在一起来实现这个逻辑,但是我在使用Linq生成相同的逻辑时遇到了麻烦.

我的问题是如何有条件地将WHERE子句及其元素添加到我的查询中.

我更喜欢只有一个点执行查询,所以,如果可能的话,我想避免使用C#,如果要分支到不同的查询.

c# linq linq-to-sql

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