C#写的重载函数,封装为COM后,供VB6调用时发现函数名称会自动加_2/_3等下标,但是却不能调用。

lovinglovey 2015-12-25 03:50:23
如题,截图如下

C#函数定义


VB6引用出的函数


VB6调用报错





高手们帮解决下啊,别告诉我改C#接口的函数名称,就是因为不能改所以才。。。。。。
...全文
141 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看到有个网贴说把返回类型Boolean 改成Variant 可以通过COM组件的IDispatch::Invoke()通过DispID调用方法,C++中有个InvokeHelper进行了封装,不知道VB中有没有类似的 当然这种方法的性能相对差点,用起来也麻烦 https://msdn.microsoft.com/en-us/library/ms221479.aspx HRESULT Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult, EXCEPINFO FAR* pExcepInfo, unsigned int FAR* puArgErr );
lovinglovey 2015-12-25
  • 打赏
  • 举报
回复
引用 3 楼 From_TaiWan 的回复:
VB6.0是面向过程的语言,不支持重载吧。
就是不支持重载,所以引用的时候vb已经对函数做了别名处理了吧,可是那个_2、_3的别名他也不认
lovinglovey 2015-12-25
  • 打赏
  • 举报
回复
用了object()也不行,就是object()不行,才换的variant类型,这几个参数类型都试了一遍不行,个人基本排除了是参数类型的问题,就是在那个函数名称上,vb6的编辑环境里,ServiceCall_2这个函数名称不认
  • 打赏
  • 举报
回复
object[] 与string[]的重载,第二个参数别用variant试试
秋的红果实 2015-12-25
  • 打赏
  • 举报
回复
VB6.0是面向过程的语言,不支持重载吧。
lovinglovey 2015-12-25
  • 打赏
  • 举报
回复
其他函数也有out类型的,vb6就按ref处理的,应该不在这儿,就觉得是那个重载的函数名称被vb别名命名的问题
Poopaye 2015-12-25
  • 打赏
  • 举报
回复
我觉得应该是那个out参数vb6不支持吧

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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