vb调用dll(急)

gsxyy1688 2008-03-14 04:24:11
我用vb从一个dll里面的函数返回一个字符串,dll返回的类型是BSTR,但是在vb里面跟踪返回的变量里面多出里很多东西
例如:"D1*D2+D3*D4"输入dll函数却在vb里接收到"D1*D2+D3*D4onFP_NO_HOST_CHECK=NOHOMEDRIVE=C:q"这是什么原因呀能不能接收成D1*D2+D3*D4大家帮帮忙
...全文
117 11 打赏 收藏 转发到动态 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkwalkertt 2008-04-07
  • 打赏
  • 举报
回复
得注意类型...
zuoxingyu 2008-03-17
  • 打赏
  • 举报
回复
你在调用这个DLL的返回值的时候,字符串型的没有指定其长度吧
dim ret as string*12
这样再传进去,获取返回值
cbm6666 2008-03-15
  • 打赏
  • 举报
回复
呵呵, 谢谢楼上 lyserver 同志, 增长了一个知识了.
lyserver 2008-03-15
  • 打赏
  • 举报
回复
补充一下,char *是基于ANSI的,BSTR是基于UNICODE的。
lyserver 2008-03-15
  • 打赏
  • 举报
回复
从你的问题上看,应该是你的DLL有问题。
原因:VB的String数据类型即为VC的BSTR,二者是一回事,都是以长度来判断字符串的,故完全能相互传递,而不会出现你说的情况。如果出现这种情况,可能DLL并没有使用BSTR或不正确使用BSTR,比如使用了char *,就会出现楼上所说的使用left(s,instr(s,chr(0))-1)来截取字符串的方法,因为char *是以字符串中包括的“\0”字符来判断的,因此需要截取。建议贴出你的DLL源码。
嗷嗷叫的老马 2008-03-15
  • 打赏
  • 举报
回复
晕........又出现了.......
嗷嗷叫的老马 2008-03-15
  • 打赏
  • 举报
回复
咦.

我不是发了帖吗.

CSDN搞什么鬼.
嗷嗷叫的老马 2008-03-15
  • 打赏
  • 举报
回复
顶~~~~~~~~~
supergreenbean 2008-03-15
  • 打赏
  • 举报
回复
从C返回BSTR字符串可以,但是在VB声明里要写成As Long,不要直接写As String,因为VB会把这些As String的参数做自动转换。
推荐的字符返回方式如下:

int __stdcall MyFunc(char* inString,char* outString)
{
...
}

Declare Function MyFunc lib "test.dll" (ByVal inString As String, ByVal outString As String) As Long
使用

Dim ret As Long
Dim sOut As String
sOut=String(255," ")'初始化用以存放输出的字符串缓冲区
ret=MyFunc("in string",sOut)
cbm6666 2008-03-14
  • 打赏
  • 举报
回复
楼上说的没错, 那个符号是 chr(0)

BSTR ?? 你在DLL里面的.cls代码,那个Function最后面你写的是什么 ? As String ? 或 As Sring() ...??

你要取前面那些字串的话你可以用

Private Sub Command1_Click()
aa = "D1*D2+D3*D4" & Chr(0)
aa = Mid(aa, 1, InStr(aa, Chr(0)) - 1)
MsgBox aa
End Sub

嗷嗷叫的老马 2008-03-14
  • 打赏
  • 举报
回复
dim I() as string

'设你DLL返回的内容放在变量J里面.
'同时,J里面的""符号,是CHR(0)的情况.

i=split(j,chr(0))
debug.print i(0) 'i(0)里就是你要的.

'同样的办法,也可以用于通用对话框多选时返回多个文件名.
相关推荐
本课程主要是针对ILRuntime设计一个独立的脚本热更新框,框架的优势:1.将代码热更脱离Assetbundle资源热更,独立的部分更适用于各种不同的框架。2.加快项目的逻辑更新,bug修复.(后期修bug,多数情况下并不用动到资源,只需要更新脚本代码,无需重走资源打包发布流程,大大提升效率)3.提供热更模式和正常开发模式的快速切换接口,可以让队友像平常一样去开发.4.不依赖市面上的任何AB框架,完全兼容市面上各种不同的AB框架.5.重点:希望通过它,帮助你学习、了解ILRuntime真正在项目中的应用.框架的将提供以下这些接口,这些接口将从0开始,在Unity里将C#脚本编译成dll,然后将dll放到服务器上,再将dll下载下来,进行加载,到最后从Unity主工程调用热更新的代码逻辑.1.Create hotfixdll接口将热更部分的代码 编译成dll生成dll版本配置(MD5)2.更新对比接口本地跟服务器的dll进行版本对比3.下载热更dll下载dll本身的文件下载版本记录文件4.加载热更dll加载dll实例化:AppDomain初始化:注册跨域继承适配器注册委托适配器LitJson重定向调用性能优化(CLR绑定功能)调用热更接口Hotfix.HotfixApplication.Main 进入热更逻辑5.ILMonoBehaviour用于监听组件的生命周期,实际是桥接(调用)热更的逻辑AwakeStartEnableUpdateLateUpdate.......6.添加其他常用的库DOTweenLitJsonSpineGoogle.ProtobufTextAnimation可以根据上面的方式,自行添加依赖的库... 

1,482

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告