使用_stdcall将更改dll中导出函数的名称

时间:2014-06-27 13:05:41

标签: c++ dll visual-studio-2013 export

我正在尝试为Profilab创建模块(dll)。要实现这一点,应该有一个导出名称列表,例如

// return number of inputs
unsigned char NumInputs()

在查看C++ Builder的示例时,它会像这样声明

extern "C" __declspec(dllexport) unsigned char _stdcall NumInputs();

当我在Visual Studio 2013 Express(?)C ++项目中以相同方式声明时,我得到这样的名称导出(使用依赖walker检查):

_NumInputs@0

哪个不适用于Profilab

删除_stdcall部分会生成正确的名称(NumImputs),但软件会崩溃,我认为是由于缺少_stdcall部分。

我该怎么办?如何同时导出NumInputs并拥有_stdcall

1 个答案:

答案 0 :(得分:1)

使用正确的调用约定(stdcall)定义函数。

因此,你不会崩溃。

但是,您还需要正确的名称或者它不会链接,因此use a def-file明确列出了应使用什么名称(如果有)和/或指定的序号导出哪个函数。

LIBRARY   BTREE
EXPORTS
   Insert   @1
   Delete   @2
   Member   @3
   Min   @4

此示例是从链接的文档中复制的。所有导出语句都遵循以下模式:

entryname[=internalname] [@ordinal [NONAME]] [[PRIVATE] | [DATA]]