How to dynamically load a C# dll from a C++ DLL

I have a C++ application. This supports users' C++ plugin DLL's, it will dynamically load these DLL's and then be able to create and use the user's types dynamically. These user types derive from base types and interfaces defined in the main application's core library, so I hold user's objects as pointers to the base class and call the user's virtual functions to mak

如何从C ++ DLL动态加载C#DLL

我有一个C ++应用程序。 这支持用户的C ++插件DLL,它将动态加载这些DLL,然后能够动态地创建和使用用户的类型。 这些用户类型派生自主应用程序核心库中定义的基类型和接口,因此我将用户对象作为指向基类的指针,并调用用户的虚函数来实现它们的魔力。 现在我想扩展插件DLL来允许托管DLL(我主要关心C#)。 我希望在C#插件DLL中发生所有相同的魔术。 我怎样才能动态加载这些dll,一些我认为我目前使用的win32的LoadLib

C Function that calculates total sizeof arguments

I'm currently looking to calculate the total size of arguments passed into a function, in bytes. In theory, one can just write out sizeof(x) for every argument. However, this is a tremendous waste of time if one wants to do this for a lot of functions. I'm trying to figure out the amount of space for the arguments so I can allocate the right amount of memory to store them all and store

C函数计算参数的总大小

我目前正在计算传入函数的参数的总大小(以字节为单位)。 理论上,每个参数都可以写出sizeof(x) 。 但是,如果想为许多功能做这件事,这是一个巨大的浪费时间。 我试图找出参数的空间量,以便我可以分配适量的内存来存储它们并存储它们(对于具有混合类型的各种函数)。 我正在寻找一个表达式,它可以确定所有参数的大小,而不管它们的名称是什么,并且不管它们有多少(理由是,我很好,现在只支持大约64个参数)。 它可

Extension methods defined on value types cannot be used to create delegates

Extension methods can be assigned to delegates that match their usage on an object, like this: static class FunnyExtension { public static string Double(this string str) { return str + str; } public static int Double(this int num) { return num + num; } } Func<string> aaMaker = "a".Double; Func<string, string> doubler = FunnyExtension.Double; Console.WriteLine(aaMaker());

在值类型上定义的扩展方法不能用于创建委托

可以将扩展方法分配给与它们在对象上的使用相匹配的代理,如下所示: static class FunnyExtension { public static string Double(this string str) { return str + str; } public static int Double(this int num) { return num + num; } } Func<string> aaMaker = "a".Double; Func<string, string> doubler = FunnyExtension.Double; Console.WriteLine(aaMaker()); //Prints "aa" Console.Wri

Returning a default value. (C#)

I'm creating my own dictionary and I am having trouble implementing the TryGetValue function. When the key isn't found, I don't have anything to assign to the out parameter, so I leave it as is. This results in the following error: "The out parameter 'value' must be assigned to before control leaves the current method" So, basically, I need a way to get the defau

返回一个默认值。 (C#)

我正在创建自己的字典,并且无法实现TryGetValue函数。 当找不到密钥时,我没有任何东西可以分配给out参数,所以我保持原样。 这会导致以下错误:“在控制离开当前方法之前,必须将out参数'value'分配给” 所以,基本上,我需要一种方法来获取默认值(0,false或nullptr取决于类型)。 我的代码类似于以下内容: class MyEmptyDictionary<K, V> : IDictionary<K, V> { bool IDictionary<K, V>.

How do I check for nulls in an '==' operator overload without infinite recursion?

The following will cause infinite recursion on the == operator overload method Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); } How do I check for nulls? 使用ReferenceEquals : Foo foo1 = null; Foo foo2 = new Foo(); Ass

如何在没有无限递归的情况下检查'=='运算符超载中的空值?

以下将导致==运算符重载方法的无限递归 Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); } 我如何检查空值? 使用ReferenceEquals : Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool oper

Extending Marc Gravell's Dynamic Linq OrderBy

I found Marc Gravell's dynamic order by great: Dynamic LINQ OrderBy on IEnumerable<T> I've put it in a class, LinqHelper . In this class I also have created two new classes, so that in my code I can do this: var q = db.tblJobHeaders; LinqHelper.OrderByCollection OBys = new LinqHelper.OrderByCollection(); OBys.AddOrderBy("some field", true); OBys.AddOrderBy("anotherfield", fal

扩展Marc Gravell的动态Linq OrderBy

我发现了Marc Gravell的动态排序: IEnumerable <T>上的动态LINQ OrderBy 我把它放在一个班级, LinqHelper 。 在这个类中,我也创建了两个新类,所以在我的代码中我可以这样做: var q = db.tblJobHeaders; LinqHelper.OrderByCollection OBys = new LinqHelper.OrderByCollection(); OBys.AddOrderBy("some field", true); OBys.AddOrderBy("anotherfield", false); OBys.ExecuteOrderBys(q); 实现这个目标的课

Best way to store big prefix tree

I am going to write program which will represent AI for playing board game against player. I want to keep every played game in prefix tree an to search it for similar games. But i am afraid the tree can get too big to be kept in the memory. So what is the best way to store it. And to be able to search it fast. I don't think writing it to file is good solution. May be in some king of DB?

存储大型前缀树的最佳方法

我将编写代表人工智能与玩家玩棋盘游戏的程序。 我想保持每个玩过的游戏都在前缀树中搜索相似的游戏。 但是恐怕树会变得太大而不能留在记忆中。 那么存储它的最佳方式是什么? 并且能够快速搜索。 我不认为将它写入文件是很好的解决方案。 可能会在DB的某个国王? 你正在寻找的是一个嵌入式数据库,其中大部分都是用C ++编写的,但也有一些使用C#包装器。 我建议使用Berkeley DB for .NET(这是Oracle Berkeley DB的封

DotNetZip ExtractProgress Bug?

The ExtractProgressEventArgs.EntriesTotal and ExtractProgressEventArgs.EntriesExtracted is always zero. Is this a known bug? See my code below: public static void UnZip(string zipFile, string destination) { using(ZipFile zip = ZipFile.Read(zipFile)) { zip.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(zip_ExtractProgress); foreach (

DotNetZip ExtractProgress错误?

ExtractProgressEventArgs.EntriesTotal和ExtractProgressEventArgs.EntriesExtracted始终为零。 这是一个已知的错误? 看到我的代码如下: public static void UnZip(string zipFile, string destination) { using(ZipFile zip = ZipFile.Read(zipFile)) { zip.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(zip_ExtractProgress); foreach (ZipEntry entr

How wrong is it to create an event handler delegate with out the standard (Obj sender, EventArgs args) signature?

I understand the benefits of using the standard MS event handler delegate signature as it allows you to easily expand on the information passed through the event with out breaking any old relationships that are based on the old delegate signature. What I'm wondering is in practice how often do people follow this rule? Say I have a simple event like this public event NameChangedHandler Nam

用标准(Obj sender,EventArgs args)签名创建事件处理程序委托有多大错误?

我了解使用标准MS事件处理程序委托签名的好处,因为它允许您轻松扩展通过事件传递的信息,而不会打破基于旧委托签名的旧关系。 我想知道的是,在实践中人们多久遵守这一规则? 假设我有一个这样的简单事件 public event NameChangedHandler NameChanged; public delegate void NameChangedHandler(Object sender, string oldName, string newName); 这是一个简单的事件,我几乎肯定我从NameChanged事件中需要知道的唯一参数

C#, IAsyncResult and the thread pool

I use the Action<object>.BeginInvoke() method, does this use the thread pool or not? I have the following C# code: List<FileHash> hashList1 = hashList.Where((x, ind) => ind % 2 == 0).ToList(); List<FileHash> hashList2 = hashList.Where((x, ind) => ind % 2 == 1).ToList(); Action<object> oddWork = CalcHash; Action<object> evenWork = CalcHash;

C#,IAsyncResult和线程池

我使用Action<object>.BeginInvoke()方法,这是否使用线程池? 我有以下C#代码: List<FileHash> hashList1 = hashList.Where((x, ind) => ind % 2 == 0).ToList(); List<FileHash> hashList2 = hashList.Where((x, ind) => ind % 2 == 1).ToList(); Action<object> oddWork = CalcHash; Action<object> evenWork = CalcHash; IAsyncResult evenHandle = evenWork