1
13
用C++/CLI,可以概括地说,创建三种对象:
您可能会认为(3)就像用pinvoke代码编写C代码来访问本机内容一样-除了所有pinvoke内容都是为您生成的。 当然,除了这些以外,还有一些注意事项——但这应该让你知道它是如何有用的。 换句话说,它真的是一种胶语言。虽然你可以在C++或CLI中编写完全成熟的应用程序,但是将托管和本地部分分开并使用C++/CLI来桥接两个更干净的应用程序比使用PInvoke更为正常。 另一个常用的用法是用.NET库调用扩展和存在本机C++代码库。 只需小心,你可以很好地划分你的代码,因为在编译你的纯C++代码到透明的IL时有时会很微妙。 关于你的旁注:pinvoke是一种特殊的互操作类型。interop也有其他形式,比如com interop。事实上,更准确地说,pinvoke是一组语言特性,使与本机代码的互操作更加容易。 |
2
3
过去我已经有效地使用了托管C++(.c++/CLI的.NET 1.1前体)。当您希望在托管代码中使用本机C或C++库时,我发现它是最有效的。您可以进入整个互操作/ pJoCK路由,这使得一些丑陋的C代码和经常出现编组问题,或者您可以编写一个托管C++封装器,这是C++/CLI真正闪耀的地方。 因为C++/CLI是托管代码,所以可以通过添加对.dll的引用,以正常方式调用它从C(VB.NET)调用。没有马歇尔,没有德林波特,没有那样愚蠢的。只是普通的项目引用。另外,如果您的本机库是这样设计的,那么静态链接库的好处就在于它是一件好事(tm)。 |
3
2
Phil Nash 真的很重要。这是我不止一次命中的一个,也是我过去使用C++/CLI的主要原因: 某些应用程序通过在某些位置选中所有DLL来扩展具有特定名称的导出函数。在C++中,没有办法声明一个原生的C风格的导出,但是你可以在C++/CLI中使用。我在C++/CLI中创建了一个“包装器”,它导出方法,处理C结构到托管对象的任何翻译,并将调用传递给用C语言编写的程序集。 |
4
1
某些类型对其他语言不可用,例如模板, 装箱值类型的常量和跟踪句柄。 模板在编译时专门化。泛型在运行时专门化。尽管clr应该缓存泛型专门化以供将来使用(这样每次使用它时都会得到相同的列表),但是每次请求泛型专门化时仍然会有性能问题。 我知道其他语言抛弃了const属性,但是在C++代码中编译时间检查总比没有好。 使用int^这样的类型可以访问托管堆目录上的内存,而不必取消绑定。当将装箱值的跟踪句柄传递给需要跟踪句柄的函数(如console::writeline(object^))时,这有助于提高性能。当然,不能避免过早的装箱初始化。在其他语言中,您可以将引用存储在一个对象变量中并传递它以避免取消绑定,但是您会丢失编译时类型检查。 |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
Dansih · .Net核心自定义身份验证方案 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |