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++代碼中保留非託管和託管枚舉之間的任何轉換。 –