调用vc++编制的dll,出现"找不到dll入口点"

hotheartlewis 2006-08-18 04:31:16
我的vc程序是这样的.
serial.cpp:
#define CIPHER_API __declspec(dllexport)

//声明我的函数
CIPHER_API int __stdcall DecryptData(char* buf_i , char* buf_o , int len);
....
int __stdcall DecryptData(char* buf_i , char* buf_o , int len)
{
...
}
我的vb程序声明是这样的:
Private Declare Function DecryptData Lib "xiudou.DLL" (ByRef buf_i As Byte, ByRef buf_o As Byte, len1 As Long) As Long
调用时:
Private Sub Form_Load()
Dim buf_i(128) As Byte
Dim buf_o(128) As Byte

Dim l As Long
buf_i(0) = 1
l = DecryptData(buf_i(0), buf_o(0), 128)
End Sub
可是在最后调用的时候DecryptData, 总报错"找不到dll入口点",如何解决呢?
我在网上搜了一下, 有的说要改写.def文件,可我看了,我的vc工程中没有.def文件,到底需不需要呢?
...全文
173 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
boywang 2006-08-18
  • 打赏
  • 举报
回复
本人就碰到过类似问题:
dll文件在当前目录下,但是在ide中调用函数就是出错,说找不到api入口点,编译成可执行文件就没问题了.不知道算不算bug.
benyfeifei 2006-08-18
  • 打赏
  • 举报
回复
其实有时候vb的ide给的错误信息莫名其妙,编译成exe执行一下反而没问题.
------------
我们要相信IDE,它给出的信息都是有原因的或者说程序中存在BUG。
boywang 2006-08-18
  • 打赏
  • 举报
回复
其实有时候vb的ide给的错误信息莫名其妙,编译成exe执行一下反而没问题.
benyfeifei 2006-08-18
  • 打赏
  • 举报
回复
找到在使用__declspec(dllexport) 时函数名称保持不变的方法了:

在VC的“工程|设置”中的Linker选项卡中添加如下连接选项:

/EXPORT:DecryptData=DecryptData

然后重新编译就行了。
benyfeifei 2006-08-18
  • 打赏
  • 举报
回复
使用__declspec(dllexport) 时,是不需要.def文件的。

我测试了一下,发现用__declspec(dllexport) 的函数名称变了(用VC自带的dependcy查看)。
我估计你也是这个问题。
实现不行的话还是使用.def文件吧。

LIBRARY 你的库函数名称。
DESCRIPTION "Implements a binary tree."
EXPORTS
Insert @1
Delete @2
Member @3
Min @4
TechnoFantasy 2006-08-18
  • 打赏
  • 举报
回复
你需要输出C++中的函数定义才可以在VB中调用,你可以看看这个文章:

Calling C++ DLLs from VC++ and VB - Part 1
http://www.codeproject.com/dll/XDllPt1.asp

Calling C++ DLLs from VC++ and VB - Part 2
http://www.codeproject.com/dll/XDllPt2.asp

7,763

社区成员

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

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