none
.def文件的使用问题 RRS feed

  • 问题

  • 弄了几天,一直没弄明白

    //  Dll.cpp

    int add(int a,int b)
    {
     return a+b;
    }

     

    //     Dll.def

    ;Dll.def
    LIBRARY Dll
    DESCRIPTION "Learn how to use the dll."
    EXPORTS
    add @1
    Add=add @2

    ;ok

     

    我已经把这两个文件放到同一个项目的源文件中,生成的dll却是没有任何函数导出,这是什么原因?

    用的版本是免费的C++  9.0  的速成版

    还有那个导出函数序号;

    另外一个程序中:

    addFun = (lpAddFun)GetProcAddress(hDll, MAKEINTRESOURCE(1));

    提示:

    error C2664: “GetProcAddress”: 不能将参数 2 从“LPWSTR”转换为“LPCSTR”

    2008年12月8日 12:43

答案

  • 终于找到问题原因了,没有手动设置项目的模块配置文件,添加模块配置文件后还得另外设置下,是编译器设置的问题...

     

    2008年12月9日 5:32

全部回复

  • 写法不对吧~~`
    //-----------------------------------------
    ;Dll.def 文件
    LIBRARY   Dll ;你导出 DLL 库的名字.
    EXPORTS
       add ;你导出的函数名字,不用加序号,这样可以让任何语言调用.
    //-----------------------------------------

    // Dll.h

    #ifdef _cplusplus
    extern "C"
    {
    #endif

    int __declspec(dllexport) __stdcall add(int a, int b);

    #ifdef _cplusplus
    }
    #endif

    //-----------------------------------------

    //Dll.CPP

    #include <stdio.h>

    int __stdcall add(int a,int b)
    {
        return a + b;
    }
    2008年12月9日 1:09
  • 还是不对啊..,代码一样的.

    而且下载的6.0 版本项目打开后生成的就对,但是新建项目把代码原样复制过去生成的就什么也没导出

    兼容转换项目格式后这个能用:

    ;Dll2.def

    LIBRARY Dll2

    EXPORTS
    addadd=add
    subsub=subtract

     

    //Dll2.cpp

    int _stdcall add(int a,int b)
    {
     return a+b;
    }

    int _stdcall subtract(int a,int b)
    {
     return a-b;
    }

     

    会不会是编译器设置问题?.

    2008年12月9日 3:22
  • 终于找到问题原因了,没有手动设置项目的模块配置文件,添加模块配置文件后还得另外设置下,是编译器设置的问题...

     

    2008年12月9日 5:32