次のC++/CLIクラスがあります。C++のラッパーメソッドパラメーターにC#enumを渡す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宣言の束を使ってそれを試み、C++/CLIとC#プロジェクトの両方でdllを使って共有しましたが、無駄です。
また、私はstruct
で試しました。再び、それはうまくいかなかった。 C++/CLI消耗品の列挙体で何ができますか?
可能性があり
あなたは「QTQualifier」管理列挙型を作ることはできますか?または、C#コードでこれを使用できるように、C++/CLIコード内で使用可能な同様の管理されたenum( 'enum class')を使用できますか?次に、C++コード内のアンマネージ列とマネージ列列の間の変換を保持します。 –