c#中的反射不能与COM(和c++)一起工作
Reflection in C# not working with COM (and C++)
首先,我完全是个初学者。在COM .
我在一个团队里做一个大项目。服务器部分是用c++编写的。客户端用c#编写。它们通过COM通信。
现在-我有接口IA在c#中。我有对象o,它的类型是类A(在c++中实现IA -它以某种方式通过COM传输)。我想用反射来获取所有类型的属性,但它不能正常工作。它只返回我在代码中使用的那些属性。下面是检索属性的反射代码:
Type[] ifaces = typeof(A).GetIterfaces();
foreach (Type iface in ifaces)
{
foreach (PropertyInfo info in iface.GetProperties())
{
// it takes only those properties, I have used in C# code
}
}
首先,我认为它不工作,因为COM。但奇怪的是,它给了我代码中提到的所有属性。COM周围的所有东西都应该正确编写,因为它已经工作了很长时间(在我开始这个项目之前)。
这可能对您有所帮助:
只有在您知道属性名称的可能选项时才会有帮助,如果您不知道但想要列出它们,则可能必须深入到tlb文件中。关于如何加载类型库和获取AssemblyBuilder类的好例子可以在这里找到。AssemblyBuilder。getexporttedtypes方法应该返回所有在TLB中定义的类型,然后你可以对这些类型使用反射。
我一直在努力解决这个问题,所以如果你能让它工作,也许你可以在这里发布一个解决方案。
问题出在嵌入互操作类型上。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 在将 new 与指针一起使用时,创建数组的指定长度