我需要把C和C++写的工程做成DLL库,然后把这个DLL库给delphi调用, 
1、请问怎样用VC生成dll库呢? 
2、在生成库的时候,应该注意哪些地方呢? 
3、给delphi调用的时候,就给一个.dll文件就行了么?还需要什么接口文件么? 本人刚接触库,请知道的讲得详细一点 

解决方案 »

  1.   

    以前做过,现在不大记得了,没有什么特别要求..VC端生成DLL的时候记得生成一个.def文件指定函数名..delphi 这端就按调用dll的一般方法就行了..
      

  2.   


    生成.def文件,指定函数名  是什么意思啊?
      

  3.   

    vc编译完后把DLL放到你的DELPHI应用程序目录下
    然后声明:
    找到要用到 动态库名.dll 中的的函数名之一
    在delphi中声明如下:function ‘函数名’(参数1:pchar;参数2:pchar):integer;stdcall; external '动态库名.dll';然后在delphi中直接调用‘函数名’这个函数就可以了,就像调用DELHPI自己的函数一样
      

  4.   

    1、生成.def文件,在该文件中导出函数
    2、声明函数的时候尽量采用winapi的形式 例如:int winapi myfunc(int a);
    delphi只要dll文件就可。
      

  5.   

    在VC++中,如果生成DLL可以不使用.def文件。只需要在VC++的函数定义前要加__declspec(dllexport)修饰就可以了。但是使用__declspec(dllexport)和使用.def文件是有区别的。如果DLL是提供给VC++用户使用的,只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果DLL是供VB、PB、Delphi用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会进行名称转换,如下面的函数: 
        __declspec(dllexport) int __stdcall IsWinNT() 
        会转换为IsWinNT@0,这样你在VB中必须这样声明: 
        Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long 
        @的后面的数由于参数类型不同而可能不同。这显然不太方便。所以如果要想避免这种转换,就要使用.def文件方式。 参考:http://blog.chinaunix.net/u/18517/showart_309975.html
      

  6.   

    其实一般的DLL都行,只不过方法有简单有复杂的
    其他的参照5楼所说即可,一般情况下只需要dll
      

  7.   

    给你写个例子
    /**VcDllTest.h**/#ifndef VcDllTest_H
    #define VcDllTest_H
    extern "C" int __declspec(dllexport) Sum(int x, int y);
    #endif/**VcDllTest.cpp**/#include "VcDllTest.h"int Sum(int x, int y)
    {
        return x + y;
    }
    delphi调用的时候记得声明为stdcall
      

  8.   

    VcDllTest.rar下载
      

  9.   

    你是通过下面的方法生成的是MFC DLL
    MFC AppWizard (dll) -> Regular Dll Using Share MFC Dll还是通过下面的方法生成非MFC DLL 呢?
    Win32 Dynamic~Lind Library -> An empty Dll Project