com服务器将一个32位的dll中的函数封装,但在idl中参数类不识别 ,求助

_szxy 2018-06-06 11:08:56
我想再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中定义:



谢谢各位大神



...全文
909 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2018-06-13
  • 打赏
  • 举报
回复
IDL语言不支持函数类型所以你的IDL本身就是错的。 要传递函数的话,可以用一个封装类。IE对javascript函数的实现就是一个IDispatch,调用函数的方法是用0这个特殊的disp id来Invoke。 一些语言的类型系统不支持IDispatch,如果需要支持更多的语言(比如javascript),需要用VARIANT再封装一次。
赵4老师 2018-06-06
  • 打赏
  • 举报
回复
在64位Windows下: 64位exe和dll在目录c:\windows\system32目录下; 32位exe和dll在目录c:\windows\syswow64目录下; 所以要注意: 在win64位系统下注册32位ocx或dll需要将32位ocx或dll拷贝到c:\windows\syswow64\目录下。 且注册要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll 64 位 Windows 平台注意点之文件系统重定向 http://www.cnblogs.com/jiake/p/4981555.html 64 位 Windows 平台注意点之注册表重定向 http://www.cnblogs.com/jiake/p/4956218.html

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧