コード: (CANoe 8.5.98 32 ビットで実行)
/*@!Encoding:1252*/
includes {
}
variables {
/* Windows HRESULT error type enum. */
enum HRESULT_Types {
S_OK /* Operation successful */ = 0x00000000,
S_FALSE /* No error occured, oper. unsuccessful */ = 0x00000001,
E_NOTIMPL /* Not implemented */ = 0x80004001,
E_NOINTERFACE /* No such interface supported */ = 0x80004002,
E_POINTER /* Pointer that is not valid */ = 0x80004003,
E_ABORT /* Operation aborted */ = 0x80004004,
E_FAIL /* Unspecified failure */ = 0x80004005,
E_UNEXPECTED /* Unexpected failure */ = 0x8000FFFF,
E_ACCESSDENIED /* General access denied error */ = 0x80070005,
E_HANDLE /* Handle that is not valid */ = 0x80070006,
E_OUTOFMEMORY /* Failed to allocate necessary memory */ = 0x8007000E,
E_INVALIDARG /* One or more arguments are not valid */ = 0x80070057
};
msTimer Timer10ms;
}
on start {
setTimer(Timer10ms, 10);
}
on timer Timer10ms {
long hr = S_OK;
hr = func1();
if(hr == S_OK) {
setTimer(Timer10ms, 10);
}
}
long func1() {
return S_OK;
}
コンパイラ エラー:
システム L7、C3: オペランド タイプに互換性がありません。
私はこれまでに何をしましたか:
S_OK の二重宣言はありません。
S_OK 列挙型にコメントを付けようとした
unknown symbol 'S_OK'
ところ、コンパイラは、コード内で S_OK を記述したすべての場所に表示されました。SS_OK
代わりに書くことができS_OK
、エラーなしでコンパイルされます。私は書くことができ
S_OK = 0
、同じエラーが表示されます。私は書くことができ
S_OK, ...
、同じエラーが表示されます。
お役立ち情報:
Windows API から CANoe 環境にいくつかの機能を実装する dll を作成しました。もちろん、S_OK の typedef はありますが、CAPL dll は非常に制限的であるため、他の typedef やグローバル変数にはアクセスできません。そのため、この単純な列挙型を実装したかったのです。
コンパイラがこれを正しくコンパイルしたくない理由を誰かが説明できますか? 私にはわかりません。このエラーは私には奇妙に思えます(定義内の型に互換性がありません¯\_(ʘ ͟ʖʘ)_/¯
)。