标签: clr

是否在CLR上运行非托管Visual C++?

如果我在不使用任何托管代码的情况下在Visual C++中编写C++代码,它仍在CLR上运行吗?如果是,我如何使用Visual C++编写本机应用程序.有什么办法吗?

.net clr visual-c++

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

编译器在优化字符串连接方面有多聪明.

我很好奇C#编译器如何处理下面的两个语句:

String text = "abcdefghijklmnopqrstuvwxyz";
text = text.Substring( 0, 15 );
text = text + "...";
Run Code Online (Sandbox Code Playgroud)

String text = "abcdefghijklmnopqrstuvwxyz";
text = text.Substring( 0, 15 ) + "...";
Run Code Online (Sandbox Code Playgroud)

结果当然是一样的,但是连接运算符在第二次设置中是否更好地优化了代码?

在两种情况下,您最终都会为堆栈上的字符串分配4个分配,或者第二种情况只分配3个分配?

在阅读一些代码时,我只是一个随机的问题.

.net c# clr string-concatenation compiler-optimization

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

接口变量指向存储的地址在哪里 - C#?

我想知道,在你从一个实现某个接口的对象转换到那个特定的接口之后,参考内容会去哪里?这是一个例子:

MyClass mc = new MyClass();

MyClass实现了IIfc.所以,这是界面的转换:

IIfc ifc = (IIfc) mc;
Run Code Online (Sandbox Code Playgroud)

ifc保存的内容在哪里,我知道它在堆上,但是它是mc实例的一部分还是在某些其他内存地址中指向属于ifc的mc方法?

PS:我看到很多人没有得到这个问题.ifc指向的地址在哪里?它是在对象(mc)内还是在堆的其他位置?

.net c# clr

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

如何在C++ CLI中将Object ^传递给本机函数

我是C++ CLI的新手,我仍然没有得到新的指针和句柄.

我有一个打开窗口的本机函数.它需要一个父窗口的句柄:

void open(void* parentHwnd);
Run Code Online (Sandbox Code Playgroud)

我应该如何将托管代码中的父窗口传递给此函数?我试图做这样的事情:

void managedOpen(Object^ parent)
{
   interior_ptr<void> ptr = &*parent);
   open(ptr);
}
Run Code Online (Sandbox Code Playgroud)

但是&运算符"不能用于获取具有ref类类型的对象的地址".

我也应该用pin_ptr而不是interior_ptr

clr c++-cli

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

为什么IEqualityComparer <T> Equals方法有两个参数?

我不明白为什么Equals方法采用(T x,T y).在调用实例上的方法时,您是否已经有一个实例可供比较?GetHashCode也是一样的 - 如果我已经在现有实例上调用它,为什么它需要一个对象实例作为参数?

如果我调用a.GetHashCode(b)会发生什么?使用哪一个?

.net c# vb.net clr

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

从IntPtr句柄输入

是否可以System.TypeIntPtr类型句柄中获取对象(可以通过获取)?Type.TypeHandle.Value

例:

TypeFromIntPtr(typeof(object).TypeHandle.Value) == typeof(object) //true
Run Code Online (Sandbox Code Playgroud)

编辑:我很高兴有许多有用的人认为我正在尝试解决其他问题,但我正在寻找这个特定问题的答案,我对此非常肯定.我很抱歉没有首先说明它.

编辑#2:类型句柄是一个指针,指向CLR中表示RTTI的结构.我不想从这个结构中读取数据,我想要一种为此返回托管Type对象的方法.我需要将指针"转换"为对象.

.net c# clr

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

无法加载缺少特定版本的文件或程序集

在我的解决方案中,我有一个第三方A.dll与另一个B.dll(特定版本=真)依赖.但我有B.dll的旧版本,它有错误:

无法加载文件或程序集'B,Version = 2.0.0.1,...'

但我有B.dll与旧版本(2.0.0.0)

那我怎么解决我的问题呢?
如何松散版本依赖?
寻找更老的力量不存在?

什么是重要的A和B是第三方.所以我无法改变它.

c# clr dependencies assemblies visual-studio

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

msclr未被使用

因此,出于某种原因,我认为msclr在运行时没有被使用.这是代码:

#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>
#include "stdafx.h"
using namespace System;
using namespace msclr::interop;

int main() 
{
const char* message = "Test String to Marshal";
String^ result;
result = marshal_as<String^>(message);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:"C2653:'msclr':不是类或命名空间名称",根本没有任何意义.令我难以置信的是,不仅是我的电脑,还有我尝试使用msclr的任何其他电脑.此外,visual studio没有强调任何内容,因此IDE可以识别名称空间.有人可以帮帮我吗?显然,标题正确定位,因此很多网站已经说明了这种情况.提前致谢.

clr c++-cli

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

是否管理C#不安全代码?

如果您编写了C#程序,并且部分代码是使用unsafe关键字编写的,那么该代码是否仍被视为“托管”代码?

即。它会在CLR下运行吗?

c# clr managed

0
推荐指数
2
解决办法
769
查看次数

为什么linq在c#中变慢

我突然对linq性能感到好奇,并进行了一些测试.

下面是我的测试代码,结果非常令人惊讶.

任何人都可以使用linq工作,为什么比TryOut慢?

Public class TestObject
{
 ....
 ....
 //this class contain many members 
 bool deleted;
 ....
}

class Program
{
    public static ConcurrentDictionary<string, TestObject> testDictionary = new ConcurrentDictionary<string, TestObject>();

static void Main(string[] args)
{
 //testDictionary is initialized in ohter code and is likely to have 10000 elements.
  RandomTest(0);
  RandomTest(1);
  Console.ReadKey();
}

static void RandomTest(int k)
{
    int count = 10000;
    List<string> randomId = new List<string>();
    Random rnd = new Random();
    for (int i = 0; i < count; i++) …
Run Code Online (Sandbox Code Playgroud)

.net c# linq clr performance

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