首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb6 读取DLL 自动封闭

2013-01-02 
vb6 读取DLL 自动关闭DLL 内容(tt.dll)Public Function test (ByVal a As String, ByVal b As String, ByV

vb6 读取DLL 自动关闭
DLL 内容(tt.dll)

Public Function test (ByVal a As String, ByVal b As String, ByVal ReturnStr As String) As Integer
ReturnStr=a & b
end Function

编译成DLL 后增加了DLL的函数接口 test

EXE文件内容

private Declare Function  test Lib "tt.dll" (ByVal a As String, ByVal b As String, ByVal ReturnStr  As String) As Integer  ' 

Private Sub Form_Load()
    dim c as string 
    dim a as integer
    a=test("abc","123",c)
End Sub

运行后VB直接报错,然后就关闭了
如果我将所有的String 改成long,则直接关闭无任何错误提示

[解决办法]

引用:
可是如果将string变成Integer 就可以使用,换成字符串就不行了!

VB是不支持导出函数的,用插件做的DLL就不好讲了,也许你可以看看插件的说明
[解决办法]
你的调用方法是调用 API 形式的 DLL 函数用法,而 VB 是不支持开发 API 形式的 DLL 的,所以无论你怎么弄都会出问题的,除非你的 DLL 换成支持编译 API 形式 DLL 的开发工具,如 易语言、Delphi、VC、BC、GCC等等等等,反正 VB 不在这个范畴里。VB要做,只能做“类”或“控件”,然后用 CreateObject 来创建类对象或直接引用DLL类库或加载控件使用。
[解决办法]
VB调用自行编译的DLL,应该先把DLL引用进来的吧,除非是其他C或DELPHI之类编写的DLL,才可以通过楼主这种方式来调用。
引用后可以通过定义来达到效果,比如
dim obj as tt.xxx
obj.test('a','b','c')
[解决办法]
dll改为
Function test Lib "tt.dll" ( a() As byte,  b() As byte,  ReturnStr() As byte) As Integer 
函数内容按照6楼的改

exe申明改为
private Declare Function test Lib "tt.dll" (Byref a As byte, Byref b As byte, Byref ReturnStr As byte) As Integer '

exe中
dim a() as byte
a=StrConv(“123”, vbFromUnicode)
。。。。。。。。'b()同样方式定义
dim ret(256) as byte'假设256字节足够容纳返回的字符串
test a(0),b(0),ret(0)


我没有调试过,可能有不少错误,望对楼主有用
[解决办法]
我倾向于这个看法:VB可以做带导出函数的DLL,但严格来说,应该不是标准DLL。记得以前一个人说过,因为这个DLL同样依赖于VB运行库
[解决办法]
VB6写普通DLL的插件早就有了,不过个人觉得用来研究一下还行,但不赞同使用,因为资料太少,一些看起来简单的问题都会非常棘手;其实反过来想想,如果真的能用于项目开发的话,现在都不会去讨论这个问题了

热点排行