r*****s 发帖数: 985 | 1 比如说
HRESULT GetWhatever(
[in] ULONG abc,
[out] LPWSTR pName);
这个pName要不要先alloc一块memory,还是assume GetWhatever会给分配一块内存?
BTW,这个GetWhatever是.NET的API,我没法看到它怎么实现的。
谢谢!
P.S. 我是给pName一个array的
wchar_t pName[512];
但是运行起来会有
Stack around the variable "pName" was corrupted的run time error. 我想是不是这
个GetWhatever写到pName分配的memory外面了? |
X****r 发帖数: 3557 | 2 你想想就知道了,就算GetWhatever想帮你分配一块内存,它也得能把这个内存的地址
传回给你啊。
LPWSTR就是wchar_t*,显然不可能啊。
一般来说GetWhatever的文档里会说你需要给他多大的内存,如果不是一个调用者可以
预先确知
的值,那么一般来说要么你把内存大小也传进去(abc是不是干这个的?),这样如果你
给它的不够
大它就会返回错误代码;要么另外有一个函数GetWhateverSize之类的告诉你需要多大
的内存。
【在 r*****s 的大作中提到】 : 比如说 : HRESULT GetWhatever( : [in] ULONG abc, : [out] LPWSTR pName); : 这个pName要不要先alloc一块memory,还是assume GetWhatever会给分配一块内存? : BTW,这个GetWhatever是.NET的API,我没法看到它怎么实现的。 : 谢谢! : P.S. 我是给pName一个array的 : wchar_t pName[512]; : 但是运行起来会有
|
r*****s 发帖数: 985 | 3 多谢。我想的也是这样。就是偶尔有那个stack around the variable was corrupted的
runtime error。感觉上还是读写array out of bound之类的问题?还有什么主意吗?
具体来说IMetaDataImport::GetTypeDefProps
HRESULT GetTypeDefProps (
[in] mdTypeDef td,
[out] LPWSTR szTypeDef,
[in] ULONG cchTypeDef,
[out] ULONG *pchTypeDef,
[out] DWORD *pdwTypeDefFlags,
[out] mdToken *ptkExtends
);
MSDN doc里没说啊。
是不是.NET里type name maximal size = 512?
我是给了个wchar_t szTypeDef[512];
【在 X****r 的大作中提到】 : 你想想就知道了,就算GetWhatever想帮你分配一块内存,它也得能把这个内存的地址 : 传回给你啊。 : LPWSTR就是wchar_t*,显然不可能啊。 : 一般来说GetWhatever的文档里会说你需要给他多大的内存,如果不是一个调用者可以 : 预先确知 : 的值,那么一般来说要么你把内存大小也传进去(abc是不是干这个的?),这样如果你 : 给它的不够 : 大它就会返回错误代码;要么另外有一个函数GetWhateverSize之类的告诉你需要多大 : 的内存。
|
X****r 发帖数: 3557 | 4 你把这个512作为cchTypeDef传进去了吗?
还有其它的参数你传对了吗?
corrupted的
【在 r*****s 的大作中提到】 : 多谢。我想的也是这样。就是偶尔有那个stack around the variable was corrupted的 : runtime error。感觉上还是读写array out of bound之类的问题?还有什么主意吗? : 具体来说IMetaDataImport::GetTypeDefProps : HRESULT GetTypeDefProps ( : [in] mdTypeDef td, : [out] LPWSTR szTypeDef, : [in] ULONG cchTypeDef, : [out] ULONG *pchTypeDef, : [out] DWORD *pdwTypeDefFlags, : [out] mdToken *ptkExtends
|
r*****s 发帖数: 985 | 5 是的,
还有一个弱智问题,
wchar_t wszTypeDef[512];
请问直接给
cchTypeDef=512;
和
cchTypeDef=sizeof(wszTypeDef)/sizeof(wszTypeDef[0]);
应该没什么区别吧?
实在搞不懂怎么corrupted的
【在 X****r 的大作中提到】 : 你把这个512作为cchTypeDef传进去了吗? : 还有其它的参数你传对了吗? : : corrupted的
|