送分题:在VB中如何调用VC创建的DLL
问题点数:50、回复次数:39Top
1 楼langjingling(蓝金灵)回复于 2001-12-28 09:56:41 得分 0
怎么没有人回答啊?Top
2 楼darknessun(darkness)回复于 2001-12-28 09:57:12 得分 0
先在公共模块中声明,然后就可以在程序里调用了。
声明方法如下:
Public Declare Function 接口函数名 Lib "库名" (参数列表) As 返回值类型
Top
3 楼langjingling(蓝金灵)回复于 2001-12-28 10:05:37 得分 0
我也是这么做的,不过程序运行时老是提示出错。
错误代码为49
DLL调用约定错误
然后就返回到VB中调用函数的地方Top
4 楼darknessun(darkness)回复于 2001-12-28 10:09:13 得分 30
你的VC动态库里函数extern "C" __declspec(dllexport)写了吗?
或者写了还不行,那你在动态库的工程里加一个.def文件来EXPORT所有你想让外部调用的接口。
Top
5 楼shupianbird(birdsun)回复于 2001-12-28 10:10:25 得分 0
vc里的dll怎么写的?不是所有的都可以在vb里掉Top
6 楼why_wxb2002(bobo)回复于 2001-12-28 10:12:52 得分 10
VC动态库里函数定义成如下形式:
extern "C"
long EXPORT _stdcall funName(int i,LPSTR str);
然后在VB中声明一下就可以了.Top
7 楼darknessun(darkness)回复于 2001-12-28 10:13:10 得分 0
你的动态库是自己写的还是别人给的?
方便的话,把vb程序和动态库发给我,我帮你看看吧。
darkness.sun@263.netTop
8 楼langjingling(蓝金灵)回复于 2001-12-28 10:14:27 得分 0
to darknessun(darkness)
声明是这么写的,不过我没有加入.def文件,难道一定要在DLL中加入.def文件吗?Top
9 楼langjingling(蓝金灵)回复于 2001-12-28 10:16:31 得分 0
to darknessun(darkness)
动态链接库是自己写的
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
} return TRUE;
}
extern "C" __declspec(dllexport) int Add(int a,int b)
{
return (a+b);
}
这就是程序的主要部分了Top
10 楼why_wxb2002(bobo)回复于 2001-12-28 10:17:40 得分 0
当然要有.def文件,否则VB找不到接口.Top
11 楼langjingling(蓝金灵)回复于 2001-12-28 10:17:50 得分 0
to :why_wxb2002(bobo)
LPSTR是MFC中的类别吧,如果在VB中用不一定行的Top
12 楼langjingling(蓝金灵)回复于 2001-12-28 10:18:28 得分 0
to :why_wxb2002(bobo)
我来试一下,我就是讨厌.def文件,才不用它的Top
13 楼darknessun(darkness)回复于 2001-12-28 10:18:58 得分 0
你可以用depends看看你动态库的对外接口,可能并不是你以为的呦。
因为考虑到多态性,所以为了保险起见,还是写个.def文件来规范其对外接口。
Top
14 楼why_wxb2002(bobo)回复于 2001-12-28 10:19:29 得分 0
extern "C" __declspec(dllexport) int Add(int a,int b)
给VB用时要声明为_stdcall Top
15 楼why_wxb2002(bobo)回复于 2001-12-28 10:20:51 得分 0
LPSTR是为了于VB中的String型对应Top
16 楼darknessun(darkness)回复于 2001-12-28 10:21:01 得分 0
.def很容易写呀
你只要在你的工程里加个.def的文件
然后写上:
EXPORTS
Add
就可以了。:)
Top
17 楼langjingling(蓝金灵)回复于 2001-12-28 10:21:19 得分 0
to :why_wxb2002(bobo)
添加了.def文件还是出现那个提示Top
18 楼darknessun(darkness)回复于 2001-12-28 10:23:12 得分 0
To :why_wxb2002(bobo)
extern "C" __declspec(dllexport) int Add(int a,int b)
给VB用时要声明为_stdcall
yes.应该写:
extern "C" __declspec(dllexport) int _stdcall Add(int a,int b)
Top
19 楼langjingling(蓝金灵)回复于 2001-12-28 10:23:22 得分 0
to :darknessun(darkness)
depends怎么用法?
to :why_wxb2002(bobo)
如果要改成_stdcall,怎么个改法Top
20 楼langjingling(蓝金灵)回复于 2001-12-28 10:27:06 得分 0
to :darknessun(darkness)
extern "C" __declspec(dllexport) int _stdcall Add(int a,int b),这里面的内容是不是一个都不能少Top
21 楼mfc42d()回复于 2001-12-28 10:28:42 得分 10
老大,这样该
vc 的dll
int WINAPI DialConnect()
{
MessageBox(NULL,"99","00",MB_OK);
return 0;
}
vc的.def
; vctest.def : Declares the module parameters for the DLL.
LIBRARY "vctest"
DESCRIPTION 'vctest Windows Dynamic Link Library'
EXPORTS
; Explicit exports can go here
DialConnect
vb的模块
Attribute VB_Name = "Module1"
Public Declare Function DialConnect Lib "VCtest.dll" () As Long
vb的调用
DialConnect
Top
22 楼darknessun(darkness)回复于 2001-12-28 10:31:16 得分 0
depends在visual studio的tool里,从开始菜单的VS里找。:)
Top
23 楼why_wxb2002(bobo)回复于 2001-12-28 10:33:12 得分 0
写成:
extern "C" int EXPORT _stdcall Add(int a,int b)Top
24 楼langjingling(蓝金灵)回复于 2001-12-28 10:35:00 得分 0
to :darknessun(darkness)
我打开以后,里面的内容很乱,都不知道该怎么看,能否给个提示?Top
25 楼darknessun(darkness)回复于 2001-12-28 10:35:25 得分 0
to why_wxb2002
这个EXPORT放int前int后应该没关系啊。
Top
26 楼langjingling(蓝金灵)回复于 2001-12-28 10:36:30 得分 0
to :mfc42d()
怎么在VB中调用函数,打空格没有提示,一定要先输入括号才有参数提示?Top
27 楼darknessun(darkness)回复于 2001-12-28 10:37:25 得分 0
你打开你的动态库,然后在右边下方栏中显示了该动态库可供外部调用的函数名,入口等。
你看看函数名是不是叫Add?
Top
28 楼langjingling(蓝金灵)回复于 2001-12-28 10:39:35 得分 0
放在INT前有错误提示
error C2146: syntax error : missing ';' before identifier 'Add'Top
29 楼langjingling(蓝金灵)回复于 2001-12-28 10:40:58 得分 0
是了,是有一个叫Add的内容Top
30 楼langjingling(蓝金灵)回复于 2001-12-28 10:41:50 得分 0
如果有这个提示,是不是就说明该DLL就没问题了?Top
31 楼darknessun(darkness)回复于 2001-12-28 10:44:08 得分 0
是。
Top
32 楼langjingling(蓝金灵)回复于 2001-12-28 10:49:15 得分 0
那怎么知道里面的参数是什么?Top
33 楼darknessun(darkness)回复于 2001-12-28 10:50:07 得分 0
啊?我从来都是放在前面的。//think
Top
34 楼langjingling(蓝金灵)回复于 2001-12-28 11:16:24 得分 0
是不是还要包含其他头文件?Top
35 楼fhawk(大头鹰)回复于 2001-12-28 11:23:27 得分 0
你要注意变量转换的规则,比如int应该转为Long,而不是IntegerTop
36 楼langjingling(蓝金灵)回复于 2001-12-28 12:48:03 得分 0
好了,开始散分了Top
37 楼seashoreking(allen)回复于 2001-12-28 15:30:07 得分 0
you can get it from anywhere.Top
38 楼double2(double2)回复于 2001-12-28 16:01:35 得分 0
软件名称:A-Post
最新版本:0.9Beta
软件性质:互联网工具
使用平台:win9x win2000 winXP winNT
发布公司:A-Soft.net
下载网址:http://www12.big.or.jp/~itsu/A-Post/A-Post_demo.exe
软件简介:
A-POST是设计来让使用者可一次同时发布到成千上万个留言版的超强发言工具。
网路上留言板、贴图区、论坛数量这么多,有时想多到几个留言板发言,得花上大把时间一站一站的去访问,这时候,您是不是希望能够有一个将发言一次就发送到所有论坛的工具呢?
现在,只需几个简单的步骤,A-POST自动帮您发送到您想发送的留言板列表,您还可依个人喜好编辑多组个人信息,自由自在改变每次的留言者名称、e-mail等个人资讯,除此之外,还有强大的共享网址数据厍外,您还可自行添加、管理留言板网址,支持定时自动发送功能。
这正是您理想中的工具,不论是交友讨论、贴图分享、专业网站宣传、发布新闻讯息、、、等,A-POST让您“一次搞定”!
--------------------------------------------------------------------------------
Top
39 楼skt985(傻问天)回复于 2002-01-11 14:18:51 得分 0
41554关注! :)Top




