我想再x64工程中调用一个32位的库,所以要讲32位库封装到Com服务器中,
但是在写接口描述文件idl时,发现库中的参数别类无法被识别,报错。
查了下,有说windows sdk的问题的,有说类别不能识别问题的,应该是后者,我装vs的时候和后来都没有遇到sdk的问题。
所以,idl文件中怎样正确的添加自定义的类别,参数可以是函数吗??
贴代码:
// ComCaffe.idl : ComCaffe 的 IDL 源
//
// 此文件将由 MIDL 工具处理以
// 产生类型库(ComCaffe.tlb)和封送处理代码。
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(1FAFCF35-AF35-45ED-BD61-B7DB1B08C816),
dual,
nonextensible,
pointer_default(unique)
]
interface ISimpleObject : IDispatch{
[id(1)] HRESULT ComServiceGTHC_VMT_NET_SetCallBack([in] HC_VMT_NET_LoginProc pLoginProc, [in] HC_VMT_NET_ErrorProc pErrProc, [in] HC_VMT_NET_MessageProc pMsgProc, [in] HC_VMT_NET_PlayErrorProc pLiveErrProc, [in] DWORD dwUser, [out, retval] LONG* ret);
[id(2)] HRESULT ComServiceGTHC_VMT_NET_PTZCtrl([in] char* resId, [in] char* URL, [out, retval] LONG* ret);
[id(3)] HRESULT ComServiceGTHC_VMT_NET_PlayOpen([in] LONG *hPlayer, [in] HWND hWnd, [in] char* resource, [in] char* URL, [in] HC_VMT_NET_PPlayProc playProc, [in] DWORD playProcUser, [in] HC_VMT_NET_PStreamMessageProc msgProc, [out, retval] LONG* ret);
[id(4)] HRESULT ComServiceGTHC_VMT_NET_PlayCtrl([in] LONG hPlayer, [in] char* URL, [out, retval] LONG* ret);
[id(5)] HRESULT ComServiceGTHC_VMT_NET_PlayClose([in] LONG hPlayer, [out, retval] LONG* ret);
[id(6)] HRESULT ComServiceGTHC_VMT_NET_Logout([out, retval] LONG* ret);
[id(7)] HRESULT ComServiceGTHC_VMT_NET_Login([in]char* strip, [in]WORD wPort, [in] char* username, [in] char* password, [in]int version, [out, retval] LONG* ret);
[id(8)] HRESULT ComServiceGTHC_VMT_NET_LayoutSize([out, retval] LONG* ret);
[id(9)] HRESULT ComServiceGTHC_VMT_NET_LayoutGroupSize([in] const char* layoutId, [out, retval] LONG* ret);
[id(10)] HRESULT ComServiceGTHC_VMT_NET_LayoutGroup([in] const char* layoutId, [in] GTHC_VMT_NET_GROUP *pGroup, [in] int size, [out, retval] LONG* ret);
[id(11)] HRESULT ComServiceGTHC_VMT_NET_Layout([in] GTHC_VMT_NET_LAYOUT *pLayout, [in]int size, [out, retval] LONG* ret);
[id(12)] HRESULT ComServiceGTHC_VMT_NET_InitLib([in] VARIANT_BOOL cache_data, [out, retval] LONG* ret);
[id(13)] HRESULT ComServiceGTHC_VMT_NET_GroupResourceSize([in] const char* layoutId, [in] int *deptSize, [in]const char* groupId, [in] int *resSize, [out, retval] LONG* ret);
[id(14)] HRESULT ComServiceGTHC_VMT_NET_GroupResource([in] const char* layoutId, [in] const char* groupId, [in] GTHC_VMT_NET_DEPT *pDept, [in] int deptSize, [in] GTHC_VMT_NET_RESOURCE *pRes, [in] int resSize, [out, retval] LONG* ret);
[id(15)] HRESULT ComServiceGTHC_VMT_NET_GetRes([in] char *resId, [in] GTHC_VMT_NET_RESOURCE *pRes, [out, retval] LONG* ret);
[id(16)] HRESULT ComServiceGTHC_VMT_NET_GetPreset([in]const char* user, [out, retval] LONG* ret);
[id(17)] HRESULT ComServiceGTHC_VMT_NET_FiniLib([out, retval] LONG* ret);
[id(18)] HRESULT ComServiceGTHC_VMT_NET_AlarmResSize([in] int type, [out, retval] LONG* size);
[id(19)] HRESULT ComServiceGTHC_VMT_NET_AlarmRes([in]int type, [in] GTHC_VMT_NET_RESOURCE *pRes, [in] int size, [out, retval] LONG* ret);
};
[
uuid(151ECCAB-F5C8-4E40-A606-5769278E4C68),
version(1.0),
]
library ComCaffeLib
{
importlib("stdole2.tlb");
[
uuid(92579859-BB5A-45AE-A6F3-38C28D84F72A)
]
coclass SimpleObject
{
[default] interface ISimpleObject;
};
};
参数的类别由我想封装的dll lib对应的.h中定义:
谢谢各位大神