关于调用dll的声明写法

极语言中文编程 2012-03-24 12:29:35
不知道dll是什么写的,但是有一个C#调用的声明函数,代码如下:
public static extern void Decrypt([MarshalAs(UnmanagedType.LPArray)] byte[] A_0, int A_1, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] A_2, int A_3);
看原理是传入字节组和它的长度,那么dll进行解密计算并输出结果到A_2,
A_3也是指定了解密之后数组的长度.
长度都是整形,也就是Integer,而传入的字节组到底是用指针还是数值,关键是传出变量怎么声明.
我基本上是菜鸟,最好讲解详细些,或者多几种写法,我一一测试.
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
在VB环境下怎么试都不行,后来编译生成EXE文件,就可以了
worldy 2012-03-24
  • 打赏
  • 举报
回复
public static extern void Decrypt([MarshalAs(UnmanagedType.LPArray)] byte[] A_0, int A_1, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] A_2, int A_3);

==>

public declare sub Decrypt LIN "XXX.DLL" (A_0() as Byte,A_1() as Long,A_2() as byte,byval A_3 as long)
worldy 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 myjian 的回复:]
public static extern void Decrypt([MarshalAs(UnmanagedType.LPArray)] byte[] A_0, int A_1, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] A_2, int A_3);

==>


VB code
Private Declare Sub Decrypt……
[/Quote]

你传递a(0),就是传递一个指针
嗷嗷叫的老马 2012-03-24
  • 打赏
  • 举报
回复
public static extern void Decrypt([MarshalAs(UnmanagedType.LPArray)] byte[] A_0, int A_1, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] A_2, int A_3);

==>

Private Declare Sub Decrypt Lib "XXX.DLL" ( _
ByRef A_0() As Byte, _
ByVal A_1 As Long, _
ByRef A_2() As Byte, _
ByVal A_3 As Long)

第一个参数与第三个参数都应该是指向BYTE()数组的指针.
worldy 2012-03-24
  • 打赏
  • 举报
回复
确实有点错误,呵呵
public declare sub Decrypt LIN "XXX.DLL" (A_0 as Byte,A_1 as Long,A_2 as byte,byval A_3 as long)
worldy 2012-03-24
  • 打赏
  • 举报
回复
调用方法错误吧:
数组应该传递第一个元素,不能传递数组
Decrypt A_0(0),A_1(0),A_2(0),A_3
  • 打赏
  • 举报
回复
怎么试都不行,dll约定错误

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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