dll - 在 RAD Studio 的命名空间下调用 DLL 函数
问题描述
我是使用 RAD Studio 的新手,因为我目前必须将它用于当前项目。我想做的是调用我在 RAD Studio C++ 项目的 Visual Studio 中生成的 DLL 文件中定义的函数。
按照下面这个问题的建议 在 Embarcadero RAD Studio XE 中使用 Visual Studio DLL? 我已经使用他们的命令将我从 Visual Studio 生成的 C++ DLL 文件转换为 RAD Studio 支持的文件:
mkexp pub-sub-sample.a pub-sub-sample.dll
我可以像执行命令转储一样验证我的函数是否已导出。
Turbo Dump Version 6.5.4.0 Copyright (c) 1988-2016 Embarcadero Technologies, Inc.
Display of File pub-sub-sample.dll
EXPORT ord:0001='?DisconnectCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VDisconnectCallbackContextData@awsiotsdk@@@6@@Z'
EXPORT ord:0002='?GetCurrentPath@ConfigCommon@awsiotsdk@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ'
EXPORT ord:0003='?InitializeCommon@ConfigCommon@awsiotsdk@@SA?AW4ResponseCode@2@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z'
EXPORT ord:0004='?InitializeTLS@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0005='?LogParseError@ConfigCommon@awsiotsdk@@KAXAEBW4ResponseCode@2@AEBV?$GenericDocument@U?$UTF8@D@rapidjson@@V?$MemoryPoolAllocator@VCrtAllocator@rapidjson@@@2@VCrtAllocator@2@@rapidjson@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z'
EXPORT ord:0006='?ReconnectCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VReconnectCallbackContextData@awsiotsdk@@@6@W443@@Z'
EXPORT ord:0007='?ResubscribeCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$shared_ptr@VResubscribeCallbackContextData@awsiotsdk@@@6@W443@@Z'
EXPORT ord:0008='?RunPublish@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@H@Z'
EXPORT ord:0009='?RunSample@PubSub@samples@awsiotsdk@@QEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0010='?Subscribe@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'
EXPORT ord:0011='?SubscribeCallback@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0V?$shared_ptr@VSubscriptionHandlerContextData@mqtt@awsiotsdk@@@6@@Z'
EXPORT ord:0012='?Unsubscribe@PubSub@samples@awsiotsdk@@IEAA?AW4ResponseCode@3@XZ'
而且它正在一个 Visual Studio 项目下构建和运行,我可以从生成的 DLL 文件中调用 RunSample() 函数。
#include <iostream>
#include "PubSub.hpp"
int main()
{
awsiotsdk::samples::PubSub object1;
object1.RunSample();
}
我的问题是如何移植上面的示例代码以在 RAD studio C++ 项目中运行?我尝试在 awsiotsdk::samples::PubSub object1 前面使用 extern "C" __declspec(dllimport) 但它不起作用。
解决方案
推荐阅读
- html - 静态视口宽度
- javascript - 为什么 JQuery $.post 提交两次?
- c++ - 如何在 autoconf 中为 clang 检查支持编译标志
- ruby-on-rails - 基于条件和来自不同数组的部分渲染
- qt - 具有两个不同边框和自定义半径的 QML 按钮
- php - php在使用AJAX上传表单后返回额外空间
- python - 标识符中的无效字符 (SyntaxError)
- javascript - 创建记忆游戏按照最后一步更新卡片正面和背面的网格现在网格显示不正确
- mysql - 创建函数时出现语法错误
- powershell - Microsoft Access DoCmd.OutputTo 无法识别 acOutPutQuery