有没有办法在另一个C ++ / CX WinRT组件中使用来自ref class的native参数调用内部方法?我知道有一个解决方案通过指针暴露为int,但有没有更好的方法?有些东西喜欢包含来自其他lib的头文件而不使用托管引用(这样我收到了来自C#Component3&#34的错误消息;错误CS0433:类型' Class1'存在于' Component1&# 39;和'组件2'"在其他组件中消耗这两者)...
的Component1 / class1.h:
public ref class Class1 sealed
{
internal:
bool InternalMethodForComponent2(NativeType& param1);
public:
Class1();
virtual ~Class1();
int SomeMethodForComponent3();
private:
};
COMPONENT2 / class2.cpp:
//#include "Component1/class1.h" - replaced by adding reference because of CS0433 in Component3
void Class2::SomeMethod(Class1^ obj)
{
NativeType nt;
nt.start = 1;
...
obj->InternalMethodForComponent2(nt); //does not work - error C2039: 'InternalMethodForComponent2' : is not a member of 'Component1::Class1'
}
Component3 / class3.cs:
void MethodInClass3()
{
Class1 obj1 = new Class1();
Class2 obj2 = new Class2();
obj2.SomeMethod(obj1);
var res = obj1.SomeMethodForComponent3();
}
答案 0 :(得分:0)
正确的方法是在定义Class1.h
时添加标题Class2
;通过添加对WinMD(元数据)的引用,编译器只知道public
成员。添加标头允许编译器查看真正的C ++类型,包括internal
成员。
如果没有代码的完整示例,您在收到标题时遇到的错误很难理解,尽管我最好的猜测是您有两个名称空间和对Class1
的引用很暧昧。首先,您可以将Class1
和Class2
放在相同的.h
/ .cpp
文件中,以简化操作并完全避免使用外部标头引用。