我正在尝试为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
?
答案 0 :(得分:1)
使用正确的调用约定(stdcall)定义函数。
因此,你不会崩溃。
但是,您还需要正确的名称或者它不会链接,因此use a def-file明确列出了应使用什么名称(如果有)和/或指定的序号导出哪个函数。
LIBRARY BTREE
EXPORTS
Insert @1
Delete @2
Member @3
Min @4
此示例是从链接的文档中复制的。所有导出语句都遵循以下模式:
entryname[=internalname] [@ordinal [NONAME]] [[PRIVATE] | [DATA]]