我的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文件,到底需不需要呢?

解决方案 »

  1.   

    你需要输出C++中的函数定义才可以在VB中调用,你可以看看这个文章:Calling C++ DLLs from VC++ and VB - Part 1
    http://www.codeproject.com/dll/XDllPt1.aspCalling C++ DLLs from VC++ and VB - Part 2
    http://www.codeproject.com/dll/XDllPt2.asp
      

  2.   

    使用__declspec(dllexport) 时,是不需要.def文件的。我测试了一下,发现用__declspec(dllexport) 的函数名称变了(用VC自带的dependcy查看)。
    我估计你也是这个问题。
    实现不行的话还是使用.def文件吧。LIBRARY   你的库函数名称。
    DESCRIPTION "Implements a binary tree."
    EXPORTS
       Insert   @1
       Delete   @2
       Member   @3
       Min   @4
      

  3.   

    找到在使用__declspec(dllexport) 时函数名称保持不变的方法了:在VC的“工程|设置”中的Linker选项卡中添加如下连接选项:/EXPORT:DecryptData=DecryptData 然后重新编译就行了。
      

  4.   

    其实有时候vb的ide给的错误信息莫名其妙,编译成exe执行一下反而没问题.
      

  5.   

    其实有时候vb的ide给的错误信息莫名其妙,编译成exe执行一下反而没问题.
    ------------
    我们要相信IDE,它给出的信息都是有原因的或者说程序中存在BUG。
      

  6.   

    本人就碰到过类似问题:
    dll文件在当前目录下,但是在ide中调用函数就是出错,说找不到api入口点,编译成可执行文件就没问题了.不知道算不算bug.