标签: clr

Delphi 在 C# 中的子范围类型?

在 Delphi(或任何 Pascal)中,您可以声明子范围类型,因此如果您尝试从允许的范围之外分配值,则会出现编译器错误。

var
    i: 1..8;
begin
    i := 8; // i := 9 would not work
Run Code Online (Sandbox Code Playgroud)

这可以在 C# 中完成吗?我可以想象创建自定义结构,例如SubrangeType<byte>但我正在寻找内置的东西。

编辑: xanatos 和 DavidHeffernan 的评论让我对更具体的问题有了想法。Delphi 中的子范围检查在运行时和编译时都可用。使用自定义结构在 C# 中可以在运行时实现它,但是是否可以在 C# 中实现对编译时的检查?

.net c# delphi clr pascal

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

无符号字符 * 数据作为 c++ 或 c 中函数的返回类型

我正在使用带有 CLR(通用语言运行时)的 Visual Studio 2010。我想将 unsigned char * 从 compress 函数返回到 main 函数,但是 unsigned char * 和 char * 都给出了错误

“错误 7 错误 C2440:'=':无法从 'char *' 转换为 'unsigned char *' F:\4-2\Thesis\PROJECT\Database Compression Main\Database Compression 2\db_comp_main.cpp 21 “

unsigned char* compressor(char *data)
{
    unsigned char *compressed_string;
    //With some process I had compressed string of data variable as unsigned char* in variable compressed_string successfully and also printed here. Now want to return it from here.
    return compressed_string;
}
int main()
{ 
  unsigned …
Run Code Online (Sandbox Code Playgroud)

c c++ clr return-type visual-studio-2010

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

使用当前连接从sql存储过程调用dll函数

我可以使用打开的连接从存储过程调用 dll 吗?

我有一个从 SQL Server 获取数据的 dll,当我从存储过程调用它时,我不想打开一个新连接。

谢谢

这是一个例子

public class Class1
{
    public static SqlString GetName(SqlString str)
    {
        SqlCommand cmd = new SqlCommand(str.ToString());
        cmd.CommandType = System.Data.CommandType.Text;

        string name = cmd.ExecuteScalar().ToString();
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 SQL 代码

CREATE FUNCTION fn_TestConnection
(
    @str nvarchar(255)
)
RETURNS nvarchar(max)
AS EXTERNAL NAME TestConnection.[TestConnection.Class1].GetName
GO

SELECT dbo.fn_TestConnection('SELECT FName FROM Clients WHERE Id = 1' )
Run Code Online (Sandbox Code Playgroud)

sql sql-server dll clr sqlconnection

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

一个线程可以在关键部分的中间被抢占吗?

是否可以通过禁用Windows中的中断来实现关键部分锁定?如果是这种情况,那么当一个线程处于临界区的中间时,它就不能被抢占.

但是,如果是这样的话,也就是说,如果在执行一个关键部分线程不能被抢占,这样做只能让整点脉冲有些显示器不那么重要比起来,如果线程可能被要求撤离CPU即使在它正处于关键部分的中间.

所以,我真正的问题是:

  1. 如何在Windows中实现监视器?

  2. 线程在关键部分的中间是否可以被抢占?

.net c windows clr multithreading

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

无法找到运行时clr.dll来使用sos

我有简单的控制台应用程序(目标框架4.5.2):

using System;

public class SosTest
{
    public class Foo
    {
        public Foo()
        {
            Console.WriteLine("Creation of foo");
        }
    }

    static void Main(string[] args)
    {
        var n1 = new Foo();
        var n2 = new Foo();
        Console.WriteLine("Allocated objects");
        Console.WriteLine("Press any key to invoke GC");
        Console.ReadKey();
        n2 = n1;
        n1 = null;
        GC.Collect();
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想看看托管堆的状态.我做了以下步骤:

  1. 打开windbg
  2. 使用windbg的"open executable"命令打开我的程序的exe文件
  3. 执行命令加载sos .load MicrosoftNet\Framework\v4.0.30319\sos.dll
  4. 执行命令以查看堆的状态 !eeheap -gc

但在最后一个命令中我得到以下消息:

无法找到运行时DLL(clr.dll),0x80004005扩展命令需要clr.dll才能执行某些操作.

为什么命令!eeheap -gc失败?

如果它会帮助它是lm命令的结果:

0:000> lm
start …
Run Code Online (Sandbox Code Playgroud)

c# debugging clr windbg sos

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

如何针对以下场景进行内存分配?我设法弄糊涂了

我在下面提到了名为"Employee"的属性类.

public class Employee
{
    public int EmpID { get; set; }
    public int DeptId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们都知道"int"数据类型将存储在堆栈中,而Object类型将存储在堆中,如下面的snap所示.

在此输入图像描述

这里我的问题是,当我要创建一个Employee类的对象时

Employee objEmployee = new Employee();
Run Code Online (Sandbox Code Playgroud)

如何进行内存分配?

任何文献或相关链接将不胜感激.

c# clr stack memory-management heap-memory

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

如何使数组协方差在F#中工作

来自Array Covariance文章:

元素类型是引用类型的数组是协变的.[...]它被添加到CLR中,因为Java需要它,而CLR设计者希望能够支持类似Java的语言.

CLR支持数组协方差,但是如何在F#中使用这个方便的功能?

type Foo () = class end
type Bar () = inherit Foo ()

// must have type Foo []
let foo : Foo [] = Array.create 1 (Bar ())
                                // ^^^^^^ must not cast to Foo
// must throw ArrayTypeMismatchException
foo.[0] <- Foo ()
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想在场景后面foo存储一个Bar数组,就像在CLR中实现一样.

.net c# clr f# functional-programming

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

LambdaExpression.Compile() 是否创建动态加载的额外程序集?

我想要几个使用表达式树动态创建的例程。似乎使用它们的最简单方法是创建LambdaExpression然后调用LambdaExpression.
Compile()产生一个可调用的委托。

  1. 这种解决方案可能会带来哪些性能损失?
  2. 编译过程中到底发生了什么?
  3. 是否创建并动态加载了具有额外新类类型的额外程序集?
  4. 每次我打电话时都会发生这种情况吗Compile()
  5. TypeBuilder使用and创建一个新类型并包含所有例程作为该类型的静态方法是否更好MethodBuilder

欢迎任何建议!

.net clr expression

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

输出“Stack Overflow. Repeat 24047 times ...”是否意味着我在 dotnet 中发现了错误?

我为我的项目编写了新代码,当我运行单元测试时,我注意到 dotnet 崩溃了。

但我不知道为什么。因此,我将一些代码移至控制台应用程序并运行它。然后我得到这个输出:

Stack overflow.
Repeat 24047 times:
--------------------------------
   at [[ class and method names here ]]
--------------------------------
   at [[ class and method names here ]]
Run Code Online (Sandbox Code Playgroud)

一段时间后,出现 StackOverflowException:The runtime refused to evaluate the expression at this time.之后,dotnet 再次崩溃。

就是这样。所以构建过程(编译)是成功的,但 CLR 似乎崩溃了?

这是我的错还是 DotNet 中的错误?

编辑:这是一些代码以及我的问题的解释。这是我网站上的递归错误: https: //dotnetfiddle.net/RD69Mk

.net c# stack-overflow clr

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

.NET 3.5项目的错误显示为.NET 2.x.

虽然我的ASP.NET项目使用框架的3.5版本,但事件日志会将错误注册为来自框架的2.X版本,例如:

Event Type:         Error
Event Source:       ASP.NET 2.0.50727.0
Event Category:     None
Event ID:           1334
Date:               2009-05-19
Time:               17:04:29
User:               N/A
Computer:           XXXXXXXXXX

Description:
An unhandled exception occurred and the process was terminated.

Application ID: /LM/W3SVC/234989001/Root
Process ID: 8912
Exception: System.Web.HttpException
Message: The remote host closed the connection. The error code is 0x80072746.
Run Code Online (Sandbox Code Playgroud)

.net asp.net clr error-logging

0
推荐指数
1
解决办法
267
查看次数