vc怎么调用vb的dll啊?

d52787790 2010-06-30 05:03:47
是非ActiveX的,和普通的vc的dll一样调用。

只给了我 : vb_dll。
给了我个接口: Public Function Send(ByVal str1 As String, ByVal str2 As String, Optional ByVal str3 As String = "") As Boolean

这个怎么动态调用啊?类型怎么匹配。
在网上找的资料都是,调用vb的com,或者就是vb调用vc的dll,很少有vc调用vb的dll。求大侠帮忙
...全文
285 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
www5r2 2010-07-05
  • 打赏
  • 举报
回复
嗷嗷叫的老马 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 d52787790 的回复:]
depend 查看不到吗?我看了下导出函数是空的
[/Quote]
那这个DLL就有点怪了.

没有导出函数,那就不对劲.

如果可以的话把DLL发来研究研究看看?

myjian01####yahoo.com.cn
magic7004 2010-07-01
  • 打赏
  • 举报
回复
楼主用dependency.exe看下Export就OK了
magic7004 2010-07-01
  • 打赏
  • 举报
回复
1.那个函数貌似VC里应该是 short int Send(BSTR str1,BSTR str2,BSTR str3);

2.GetProcAddress找不到函数的话,说明函数的名字不对或者函数名没有导出。
嗷嗷叫的老马 2010-07-01
  • 打赏
  • 举报
回复
关键要看那个DLL如何做的.

VB6生成的DLL,官方只有ActiveX DLL一种方案

经过编译过程的改造,可以生成带导出函数的DLL,但看起来你手里的这个DLL和这两种都不尽相同.
d52787790 2010-07-01
  • 打赏
  • 举报
回复
我用ildasm 工具看了下,找到了函数原型

.method public instance bool Send(string str1,
string str2,
[opt] string str3) cil managed


我换成string也不行,找不到函数地址,难道vb只能做成com吗?
d52787790 2010-07-01
  • 打赏
  • 举报
回复
depend 查看不到吗?我看了下导出函数是空的
d52787790 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tr0j4n 的回复:]
你确定那个VB写的DLL不是ActiveX的?
[/Quote]

确定,不用注册的。

回复9楼

typedef bool (*lpNetTraffic)(char *str1,char* str2,char* str3);
GetProcAddress获取不到函数地址,返回值一直是空的,不知道类型该怎么匹配。
d52787790 2010-07-01
  • 打赏
  • 举报
回复
看来想像vc那样掉是不可能了



这段时间有个项目是需要使用vc++的程序访问.Net的类,在网上搜过很多文章,大致有两个方法:

将.Net程序编译成COM,并让C++代码访问COM组件进行调用。

另一个方法使用CRL编译选项,让.Net代码在CRL(公共运行语言)中管理,这样c++就可以方便的引用.Net的对象。

C++是属于非托管类,而.Net是属于托管类。在运行库的控制下执行的代码称作托管代码,相反,在运行库之外运行的代码称作非托管代码。COM 组件、ActiveX 接口和 Win32 API 函数都是非托管代码的示例。而.Net则属于托管类。微软的产品中这些不同的代码之间都是可以交互的,接下来我将结合实例讲解,此篇文章讲述第二种方式,使用CRL。对于COM的方式稍麻烦一点,如果有兴趣可以查看一下MSDN,地址是:
http://usiboy.javaeye.com/blog/558975
http://blog.csdn.net/suoxd123/archive/2010/01/08/5157668.aspx
http://edu.codepub.com/2010/0326/21371.php

d52787790 2010-07-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 magic7004 的回复:]
有两个可能
1.写DLL的人忘记导出了
2.写DLL的人故意不导出,这样只能用[DLL基地址+编译地址]来调用这个函数了,除了知情人士以外,其他人都用不了
[/Quote]

有导出啊,是public的
antoniox 2010-07-01
  • 打赏
  • 举报
回复
为什么不用VC写DLL文件?VC写的应该更兼容。
magic7004 2010-07-01
  • 打赏
  • 举报
回复
有两个可能
1.写DLL的人忘记导出了
2.写DLL的人故意不导出,这样只能用[DLL基地址+编译地址]来调用这个函数了,除了知情人士以外,其他人都用不了
MoXiaoRab 2010-07-01
  • 打赏
  • 举报
回复
Depends看下,有导出函数没
嗷嗷叫的老马 2010-06-30
  • 打赏
  • 举报
回复
跟调用API一样调用呗.

既然那样写了,这个DLL就是经过改造的DLL,不是ActiveX DLL.
jianuMan 2010-06-30
  • 打赏
  • 举报
回复
LoadLibrary

定义调用格式 stdcall
zzhgb 2010-06-30
  • 打赏
  • 举报
回复
这个不是com的,因为com的是要定义类调用的,上边的很明显是API调用方式,vc得用LoadLibrary()调用,关键是参数的类型,应该是BSTR;不一定支持,很可能内存错误
lijianli9 2010-06-30
  • 打赏
  • 举报
回复
LoadLibrary()和GetProcAddress()链接库,你可以接着调用函数试试看
MoXiaoRab 2010-06-30
  • 打赏
  • 举报
回复
你确定那个VB写的DLL不是ActiveX的?
晒月光的青蛙 2010-06-30
  • 打赏
  • 举报
回复
动态加载可行啊,就用1楼说的两个函数
一名程序员 2010-06-30
  • 打赏
  • 举报
回复
BOOL Send(char *str1,char* str2,char* str3 ="");

试试这样调用行不行?
加载更多回复(4)

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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