delphi调用C#类库,怎么传byte[]类型

qq_42831536 2018-08-06 07:53:04
Delphi调用C#的类库,C#中方法需要传入byte[]类型,delphi中通过CreateOleObject方法调用,传入pbyte类型编译时报错[Error] Unit1.pas(72): Type not allowed in Variant Dispatch call,如果传入string类型,提示参数错误,用import type library方法CreateUnit的,找不到要调用的方法,求解
...全文
500 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 10 楼 weixin_41859963 的回复:
[quote=引用 9 楼 weixin_41859963 的回复:]
这个我也遇到相同问题,求解。

C#中的:Public string xGetKey(byte[] xdata);
[/quote]

C#端当然可以这样写,但是Delphi端(或者其他原生语言)没法调用,因为.net中的byte[]实际是个对象。
weixin_41859963 2018-09-03
  • 打赏
  • 举报
回复
引用 9 楼 weixin_41859963 的回复:
这个我也遇到相同问题,求解。
C#中的:Public string xGetKey(byte[] xdata);
  • 打赏
  • 举报
回复
具体我也不是很了解,估计import type library导入的只有public static方法,而CreateOleObject获取的COM接口,可以调用该接口实现的所有方法。
qq_42831536 2018-08-07
  • 打赏
  • 举报
回复
C#中public override定义的方法,在delphi中用import type library方法CreateUnit的_TLB中找不到,但通过CreateOleObject方法能调用,这是什么原因?
qq_42831536 2018-08-07
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
传不了,byte[]实际是个对象,TList<byte>实例,你怎么能让非.net语言创建一个.net对象呢?解决方法就是要修改.net库的接口,把byte[]换成IntPtr,然后Delphi程序可以传入一个指针。或者你另写一个.net库,在内部调用使用byte[]接口的这个库,对外部提供一个IntPtr接口,在.net边转换也很简单,你搜“byte[]转换为IntPtr”可以找到大把代码。

好的,谢谢
  • 打赏
  • 举报
回复
呃,应该是List<byte>,怎么把Delphi命名习惯带进来了...
  • 打赏
  • 举报
回复
传不了,byte[]实际是个对象,TList<byte>实例,你怎么能让非.net语言创建一个.net对象呢?解决方法就是要修改.net库的接口,把byte[]换成IntPtr,然后Delphi程序可以传入一个指针。或者你另写一个.net库,在内部调用使用byte[]接口的这个库,对外部提供一个IntPtr接口,在.net边转换也很简单,你搜“byte[]转换为IntPtr”可以找到大把代码。
qq_42831536 2018-08-07
  • 打赏
  • 举报
回复
delphi中CreateOleObject创建C#对象时,可以直接调用有参数的构造函数吗?
  • 打赏
  • 举报
回复
PChar可以能需要用WideString,PByte,也许要用PByteArray?没有测试。
qq_42831536 2018-08-07
  • 打赏
  • 举报
回复
delphi中CreateOleObject创建的Variant对象,调用方法时,传入pbyte、pchar等类型编译时报错 Type not allowed in Variant Dispatch call,这个怎么解决?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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