在非托管C++代码中使用C#属性
Use C# properties in unmanaged C++ code
我们有一个主要用C#编写的大型项目(服务、多线程等)。然而,核心数字运算算法是用非托管C++编写的,以提高速度(OpenMP等)。
不幸的是,目前我们必须做大量的工作来在这两个世界之间交换数据。也就是说,我们必须在C++/CLI中为每个C++类编写包装类。对于C#-"世界"中(实际上)任何必需的设置(Properties),C++世界中都有一个副本(头文件),包装类中有一个显式的来回转换。这种体系结构看起来效率很低,而且很容易出错。
主要问题:有没有一种方法可以在非托管C++中自动与属性共享C#类?(我们必须读写!)
次要问题:在上述情况下,您能就如何改进体系结构给出任何建议吗。我们的一个考虑因素是完全切换到C++,但现在必须为我们在.NET中所做的所有(系统)事情找到合适的库并编写干净的代码,这感觉不太好。
非常感谢您的帮助和问候,Jakob
我在工作中遇到了类似的问题,我的主要任务是为某些高性能、低延迟的dll编写托管接口,这涉及到一些简单的情况,其中我必须使用包含指向本机类的原始指针的简单c++/cli来包装本机类,或者更复杂的问题,其中本机代码是服务器端发布者,托管代码必须使用委托订阅它,即它们必须转换为本机回调。据我所知,.NET是一个复杂的COM服务器。可以编写ComVisible属性设置为true的.net程序集,然后它充当经典COM组件,然后可以从本机C++代码中将其用作COM组件。相反,使用托管的本机代码可以使用DllImport属性实现,所有封送都可以通过各种属性(如StructLayoutAttribute)进行微调(http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx)和MarshalAsAttribute(http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshalasattribute.aspx)我有时也会使用unsafe关键字。我必须处理高性能代码,所以在某些情况下,经过分析,我知道哪种是最好的解决方案。无论是您提到的warpper类解决方案,还是经典的COM方式,或者某种具有缓存、对象池等功能的混合。
希望能有所帮助。:)
如果这看起来有点杂乱无章,请道歉。这里已经很晚了
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++我的数学有什么问题,为什么我的代码不能正确循环
- Qt Quick-如何仅从c++代码与qml属性交互
- GCC 编译器是否应该对涉及 [[fallthrough]] 属性的格式错误的C++代码进行诊断?
- 从C++代码中直接读取成员属性
- 在 c++ 代码中使用项目属性/宏
- 如何在不更改代码的情况下为所有C++函数设置属性
- GCC 生成代码或节具有读写和执行属性
- 无法使用类属性代码定义编译 c++
- 在运行时更改代码中属性的值
- 具有 c++ 代码的常量和弱属性
- gurobi - 错误代码 = 10004 无法检索属性'X'
- 在非托管C++代码中使用C#属性
- 通过代码添加具有可编辑属性的小部件
- 当从视觉工作室中的 IDL 文件生成 CPP 代码时,如何删除属性"in"的"const"?
- 用于查找标签/属性的正则表达式在HTML代码中
- 在向富文本框写入数据时获取字符代码而不是字母text属性
- 在c++中是否可以在代码体中声明一个属性?
- 在C代码中访问Android属性
- 使用if()根据属性修改类行为是否是代码味道