0
我有一个以下C++/CLI类。将C#枚举传递给C++ CLI的包装方法参数
public ref class QADotNetAPI {
public:
QADotNetAPI() {
}
~QADotNetAPI() {
QTTerminate();
}
int SomeMethod(const char *ch) {
return Something(ch);
}
.
.
.
int IsValid(QTQualifier *pstate) {
return QTIsValid(QTFeatureIdEnum::_QT_FEATURE_ALL, pstate);
}
};
.
.
.
// The method in unmanaged code (Not within QADotNetAPI scope)
QT_API QTErrorCode QTIsValid(const QTFeatureId eFeatureId, QTQualifier *eState);
.
.
.
// The enum, QTQualifier. (Not within QADotNetAPI scope)
typedef enum QTQualifierEnum
{
QT_QUALIFIER_OUT_OF_RANGE,
QT_QUALIFIER_CORRECTABLE,
QT_QUALIFIER_VALID,
QT_QUALIFIER_LAST
} QTQualifier;
我将上面的C++/CLI类注入到C#应用程序中。 我可以成功调用SomeMethod
。 我可以做到这一点,因为我知道传递给这个函数的价值是什么。
但我不知道要传入什么QTIsValid方法。
public enum QaEnum {
OUTOFRANGE,
CORRECTABLE,
VALID,
LAST
}
private void button1_Click(object sender, EventArgs e)
{
QADotNetAPI qa = new QADotNetAPI();
int rst= qa.Init();
rst = qa.IsValid(ref QaEnum.VALID); // Doesn't work
// rst = qa.IsValid(out QaEnum.VALID); // Doesn't work too
// rst = qa.IsValid(?????) // WHAT TO PASS IN ??
}
有人说“在整个C++/CLI和C#项目中共享enum”。我尝试过使用一堆枚举声明并通过dll在C++/CLI和C#项目上共享它们,但无济于事。
另外,我试着用struct
。再次,它没有工作。我可以为C++/CLI耗材枚举做些什么?
你能“QTQualifier”有管理的枚举?或者在C++/CLI代码中提供类似的托管枚举('enum class'),以便C#代码可以使用它?然后在C++代码中保留非托管和托管枚举之间的任何转换。 –