컴파일러 오류 C3509
'type': 자동화 반환 형식이 잘못되었습니다. 매개 변수가 'retval'로 표시된 경우 반환 형식은 'void', 'HRESULT' 또는 'SCODE'여야 합니다.
COM 인터페이스의 메서드는 void 또는 HRESULT를 반환해야 합니다.
다음 샘플에서는 C3509를 생성합니다.
// C3509.cpp
#define _ATL_DEBUG_QI
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#define STRICT
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
extern CComModule _Module;
#include <atlcom.h>
#include <atlctl.h>
#include <atlstr.h>
[module(name=oso)];
[dispinterface, uuid(00000000-0000-0000-0000-000000000001)]
__interface I {
[id(1)] int f([out, retval] int*); // C3509
// try the following line instead
// [id(1)] void f([out, retval] int*);
};
[coclass, uuid(00000000-0000-0000-0000-000000000002)]
struct C : I {
int f(int*) {
// try the following line instead, and delete return statement
// void f(int*) {
return 0;
}
};
int main() {
}