明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1947|回复: 2

下标越界

[复制链接]
发表于 2005-8-5 15:52:00 | 显示全部楼层 |阅读模式

Sub Line_Equation(ByRef LParam() As Double, ByVal p1 As Variant, ByVal p2 As Variant)
    LParam(0) = p2(1) - p1(1)
    LParam(1) = p1(0) - p2(0)
    LParam(2) = -1# * LParam(0) * p1(0) - LParam(1) * p1(1)
End Sub

上面是VB代码,我生成DLL文件,然后在VIsual Lisp 中插入

代码如下

(setq dllfile (findfile "d:\\vb\\dll\\linecircle.dll"))
(vlax-import-type-library :tlb-filename dllfile :methods-prefix "LCM-"
  :Properties-prefix "LCM-"  :constants-prefix "LCM-" )
(setq lcobj (vlax-get-or-create-object "linecircle.calculate"))

(setq arr1 (vlax-make-safearray vlax-vbvariant '(0 . 1)))
(vlax-safearray-fill arr1 '(1.0 1.0 ))
(setq arr2 (vlax-make-safearray vlax-vbvariant '(0 . 1)))
(vlax-safearray-fill arr2 '(2.0 3.0 ))
(vlax-invoke-method  lcobj  "Line_Equation"  'line1 arr1  arr2)

错误如下:

error: Automation Error. 下标越界

其它在VB中没有用到ByRef 的可正常使用

请问是什么问题啊?怎么解决?

发表于 2005-8-5 21:45:00 | 显示全部楼层
line1没有定义,创建一个0-2的数组,不要赋值试试。
 楼主| 发表于 2005-8-8 08:38:00 | 显示全部楼层

谢谢efan2000!!

(setq line1 (vlax-make-safearray vlax-vbvariant '(0 . 2)))
(setq line1 (vlax-make-safearray vlax-vbdouble '(0 . 2)))
(setq line1 (vlax-make-safearray vlax-vbempty '(0 . 2)))
(setq line1 (vlax-make-safearray vlax-vbobject '(0 . 2)))

我试了好多种数据类型,都不行,出错如下

error: Automation Error. 类型不匹配

后来我加了下面一句还是一样,请帮忙再想想会是什么原因!!!

(setq line1 (vlax-make-variant line1 ))

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 12:57 , Processed in 0.147256 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表