我想要编译个一个dll能够让其他应用程序调用,比如delphi编的程序能调用这个动态库
我在vc中建立一个 Win32 Dynamic-Link Library的程序,
然后建立了两个文件:lib.h和lib.cpp文件lib.h中的内容#ifndef LIB_H
#define LIB_H
extern "C" int __declspec(dllexport) __stdcall add(int x, int y); //__stdcall
#endiflib.cpp中的内容#include "lib.h"
int __stdcall add(int x, int y)
{
return x + y;
}编译完全可以通过,并且也生成了预期的dllTest.dll,但是这个动态库放在别的地方确不能正常调用,这个是为什么,我在vb中或者用vc调用,总是提示找不到 add函数的入口地址。请前辈指点。

解决方案 »

  1.   

    我通过 depends 看了,
    Ordinal^ = 1(0x00001) ,Hint = 0(0x0000) ,Function = _add@8 ,Entry Point = 0x00001005真是奇怪了,为什么我的函数名会成了_add@8了,而不是 add?
    我想应该和__stdcall 这个有关,那么我在vb中调用,定义:
    Declare Function add Lib "dllTest.dll" (a As Integer, b As Integer) As Integer
    就是不能用,不知道为什么?
      

  2.   

    好的,多谢!
    我再vb中声明了这个动态库的调用如下:
    Declare Function add Lib "dllTest.dll" (a As Integer, b As Integer) As Integer
    然后放了一个按钮调用:
    Private Sub Command1_Click()
        MsgBox add(22, 43)
    End Sub
    结果我编译成为可执行文件以后,单击按钮,出现错误提示:
    运行时错误'453':
    不能找到入口点add在dllTest.dll请 bohlee(达达)帮忙看看,处理好了,我可以多给你加分的!
      

  3.   

    需要建一个.def文件, 加入你所有的导出函数.
      

  4.   

    如果不建立 .def 直接在 .h中定义也可以导出的。
      

  5.   

    如果你能够在工程中加入dll的lib文件,是可以不建立def文件;
    但若使用LoadLibrary之类的方法调用, 应有def文件(我曾在vc6.0 sdk下测试过多次)。
      

  6.   

    好的,我现在用了def文件了,我在Vb中是可以调用了,不过怎么会加法计算出来的值是错误的。
    我在vb中,调用 add(22,33),按理说返回值应该是55,但是返回值却成了一个负数 -5900,这个真是奇怪,请指定一下。
      

  7.   

    我是把 __stdcall去掉了之后在试的,如果加了__stdcall的话,调用的时候连这个函数的入口地址都找不到的。但是去掉了之后,调用起来就是会计算错误的,返回了负数。
      

  8.   

    导入时也加__stdcall试试:
    #pragma comment(lib, "dllTest.lib")
    extern "C" int __declspec(dllimport) __stdcall add(int, int);
      

  9.   

    你在vb中声明与VC中的不一致.
    VC中的int是32位, VB中的integer是16位
    VB中应声明如下:
    Declare Function add Lib "dllTest.dll" (a As long, b As long) As long
      

  10.   

    好了总于解决了,原来在vb中调用的时候
    需要这样定义:
    Declare Function add Lib "dllTest.dll" (ByVal a As Integer, ByVal b As Integer) As Integer就是多了一个 ByVal 关键字问题就解决了,看样子动态库还是对的,就是在调用的时候出问题了。多谢各位进来讨论,我马上加分。