在线等待:急!VB调用VC写的DLL文件的问题

oarsman 2003-11-13 02:47:58
各位大虾,我用VC写了一个DLL文件,里面有一个add函数,在调用的时候VB提示说找不到add在DLL文件中的入口点,请问这是怎么回事!
...全文
34 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jet9600 2003-11-14
  • 打赏
  • 举报
回复
主要是接口问题,我举个最简单的倒子给你:
一、在VC中建一个动态连接库工程取名XX,不要MFC支持
二、建一个C/C++文件,如XX.C,内容如下:
SHORT SumTwo(SHORT a,SHORT b)
{
return a+b;
}
三、建一个DEF文件,如XX.DEF,内容如下:
EXPORTS
SumTwo
四、将这两个文件都加入当前工程XX
五、将当前工程编译成XX.DLL
六、用VB来调用SumTwo这个函数,建新VB工程
七、在默认的FORM上加上一个按钮Command1
八、在Command1的OnClick中加入
MsgBox SumTwo(3,4) '显示3+4的值
九、将前面生成的XX.DLL复制到VB工程所在目录
十、在这个文件的最前面声明SumTwo这个函数
Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
十一、运行这个VB程,点击Command1按钮,你将得到3+4的和7
十二、关于第(十)步函数的声明请参看MSDN中的相关资料,
主要是参数和返回值的数据类型不能弄错。
AgedBOY 2003-11-14
  • 打赏
  • 举报
回复
自己定义也可以。

或者你用VC工程向导的“MFC AppWizard(dll)”->“Regular Dll with shared MFC”也就是第二项,这个就为你生成了.def。

用MFC的DLL要有MFC支持哦~设计接口参数时,可 别 来个“... Func(CWordArray &a)”这样的东东……
oarsman 2003-11-14
  • 打赏
  • 举报
回复
怎么样能生成扩展的动态连接库啊?我不知道啊!
ljt990111 2003-11-14
  • 打赏
  • 举报
回复
在VC中生成的DLL只有是扩展的DLL才能被其它语言调用,所以你在VC中生成的DLL可能不是扩展的,因此约定出错的,你把你VC的DLL改成扩展的就可以了。
oarsman 2003-11-14
  • 打赏
  • 举报
回复
各位大虾,还有个小问题,我的函数是这样写的
int showx(int x)
{
return x;
}
也按照你们上面给的方法声明了,def文件中也加了,可是调用的时候写成 showx(4),却报告我调用DLL约定错误,这怎么解决啊?我知道是参数类型的问题,可是这样子写参数类型还能不匹配?
jet9600 2003-11-14
  • 打赏
  • 举报
回复
犯了点小错,纠正一下:
Private Function SumTwo Lib "XX.DLL" alias "SumTwo" (a As Integer,b As Integer) As Integer
这一行因为是我手工写的,所以,呵呵。。。写成下面这样子吧:
Private Declare Function SumTwo Lib "XX.DLL" alias "SumTwo" (ByVal a As Integer,ByVal b As Integer) As Integer
如果你的程序用的是C++代码,那么第(二)项的文件名就应该用.CPP
yxgsb 2003-11-14
  • 打赏
  • 举报
回复
jet9600(司马) 赞同
subzero 2003-11-13
  • 打赏
  • 举报
回复
def文件需要自己定义
flc 2003-11-13
  • 打赏
  • 举报
回复
关注
oarsman 2003-11-13
  • 打赏
  • 举报
回复
DLL工程里哪有个def文件啊?
AgedBOY 2003-11-13
  • 打赏
  • 举报
回复
在VC里,函数名登记到.def文件里了没有?注意不是__declspec(dllexport)这个。

.def文件里一定要有:

EXPORTS

add @1
kmzs 2003-11-13
  • 打赏
  • 举报
回复
是呀,我试了,似乎不行嘛。。。
oarsman 2003-11-13
  • 打赏
  • 举报
回复
我就是这样子声明的,可是仍然提示找不到入口点,是不是DLL程序在编写的时候有什么要求?
jamesfay 2003-11-13
  • 打赏
  • 举报
回复
两个情况:
1. ActiveX DLL:
regsvr32 cfile.dll
在VB中project->reference
然后创建对象,并调用其方法

2. 普通动态连接库
这就需要申明函数了,可以参考其它API申明的方式来做。
private declare function add lib "cfile" alias "add" (byval a as integer,byval b as integer) as integer

7,789

社区成员

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

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