首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c++builder导出用于LabView的C函数

使用c++builder导出用于LabView的C函数
EN

Stack Overflow用户
提问于 2011-12-14 02:48:31
回答 5查看 1.5K关注 0票数 1

我有一个从VC2008移植到C++生成器XE2的动态链接库。动态链接库在LabVIEW的TestStand中使用。

导入VC2008 DLL时,TestStand可以看到函数名及其参数。在使用C++生成器DLL时,它的所有sees都是函数名,而不是参数。所有导出都是C函数,并使用extern "C" declspec( dllexport )

有没有一种方法可以正确地进行导出?

我读到添加一个TLB文件就可以完成这项工作,如果这是真的,我如何创建一个只导出C函数的TLB?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-16 05:50:18

TestStand可以读取.c/.cpp文件并从该文件派生参数。仍然加载DLL并选择要调用的函数。然后‘验证’参数,并在对话框中选择.c/.cpp文件。TestStand将查找具有相同名称的函数,并自行插入参数。

函数必须非常具体,因为TestStand不能处理dllexport和dllimport的#定义,所以我必须创建一个包含原型的虚拟.c文件。它喜欢一种非常特殊的格式。对于函数:

代码语言:javascript
复制
TESTAPI bool StartTest( long inNumber ) {}

其中TESTAPIextern "C" __declspec( dllexport )extern "C" __declspec( dllimport,我必须在我的虚拟文件中写下下面这一行:

代码语言:javascript
复制
bool __declspec( dllexport ) StartTest( long inNumber ) {}

这就够了。

票数 2
EN

Stack Overflow用户

发布于 2011-12-14 11:09:42

DLL函数参数不能仅从导出中确定,除非它们由调用约定修饰(这在DLL中很少见)。如果TLB (也称为类型库)解决了这个问题,那么VC2008动态链接库很可能是进程中的ActiveX/COM对象,而不是平面C动态链接库。如果是这样,那么在C+Builder中,您可以使用“文件|新建”菜单上的集成开发环境向导来创建一个"ActiveX库“项目,然后创建一个"COM对象”来添加到库中。然后,您将拥有一个TLB,您可以用它来定义您的对象,并且IDE将生成存根代码,您可以使用对象的实现填充这些代码。

如果这不是LabViews所期望的,那么我建议您联系他们并询问。如果它只需要一个具有扁平C函数的TLB (这是非常不寻常的,因为TLB是面向对象的),那么您可以省略"COM对象“部分,只需创建一个"ActiveX库”项目来获得一个基本的TLB,然后根据需要向其中添加您的定义,然后将您的导出添加到项目中。

票数 1
EN

Stack Overflow用户

发布于 2017-11-01 21:19:20

从reference here

避免使用外部"C“语法导出符号。外部"C“语法阻止C/C++ DLL适配器获取函数和方法参数的类型信息。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8494500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档