笔记:用标准c写 com dll
在 [XXX.idl] 中
1. 如果想在脚本语言中传递一个值,并且在dll(c代码)中修改这个值并返回的话,
这个参数必须写为:[in, out] VARIANT*
如果写成 [in, out] int* 或 [in, out] int** 都不行!
在 [c 代码] 中
1. 如果想让一个函数返回一个比如 BOOL 类型, 首先需要在 [XXX.idl] 中,
最后一个参数指定为: [out, retval] BOOL*
在 c 代码的函数中,最后一个参数指定为: BOOL *x
然后在函数里设置返回值 *x = TRUE | FALSE;
最后再 return NOERROR。
特别注意, 函数申明位置的返回值,例如: HRESULT 并不是在脚本语言中调用函数时的返回值。
同时, 每一个函数只能有一个 [out, retval], 并且要写在最后。
2. 关于函数申明时的返回值: HRESULT
可选项有:
// NOERROR - 没有错误, 表示函数本身执行过程中没遇到什么问题
// E_POINTER - 在脚本语言中会提示错误, 错误信息: 无效指针
// E_OUTOFMEMORY - 在脚本语言中会提示错误, 错误信息: 内存不够
3. 每新增一个用户函数, 需要同时在 3 个地方修改内容:
1) static const XXXVtbl PictureAPI_Vtbl = {..... 新的函数名};
2) DECLARE_INTERFACE_ (INTERFACE, IDispatch) {
STDMETHOD (新的函数名)(THIS_ const int, const int, BOOL*) PURE;
3) 在 XXX.idl 中添加新的函数说明。