0

我正在尝试创建一个导出许多函数的 Windows DLL,但是我的所有函数都被导出,但只有一个!

我想不通。

我使用的宏就是这个简单的:

__declspec(dllexport) void myfunction();

它适用于我的所有功能,除了一个。我查看了 Dependency Walker 内部,除了一个之外,它们都在这里。

这个怎么可能 ?那是什么原因呢?我被困住了。

编辑:更准确地说,这是 .h 中的函数:

namespace my {
namespace great {
namespace namespaaace {

__declspec(dllexport) void prob_dump(const char *filename,
        const double    p[],  int  nx,       const double Q[],
        const double xlow[],  const char ixlow[], 
        const double xupp[],  const char ixupp[],
        const double    A[],  int  my,       const double   bA[],
        const double    C[],  int  mz,
        const double clow[],  const char iclow[],
        const double cupp[],  const char icupp[]
        );
}}}

在 .cpp 文件中是这样的:

namespace my {
namespace great {
namespace namespaaace {


 namespace {

void dump_mtx(std::ostream& ostr, const double *mtx, int rows, int cols, const char *ind = 0)
  {
       /* some random code there, nothing special, no statics whatsoever */
  }
    } // end anonymous namespace here

  // dump the problem specification into a file
  void prob_dump(
    const char *filename,
    const double    p[],  int  nx,       const double Q[],
    const double xlow[],  const char ixlow[], 
    const double xupp[],  const char ixupp[],
    const double    A[],  int  my,       const double   bA[],
    const double    C[],  int  mz,
    const double clow[],  const char iclow[],
    const double cupp[],  const char icupp[]
    )
   {

    std::ofstream fout;
    fout.open(filename, std::ios::trunc);

    /* implementation there */

    dump_mtx(fout, Q, nx, nx);
   }

}}}

谢谢

4

2 回答 2

2

我找到了解决方法:

当我添加__declspec(dllexport)到函数定义时,在 cpp 文件中,它被导出。

我绝对不知道为什么会这样,因为 MSDN 似乎没有提到这样做。

于 2013-11-05T15:50:37.613 回答
0

您关心的内容不足以真正帮助您,但这里有一些您可以检查的事情。

确保您的 .dll 文件是通过手动删除它并重建项目来生成的。

您是否还使用 .def 文件?

只能导出类中的公共成员函数。

于 2013-11-05T14:23:46.443 回答