将Qt API转换为LabView的Plain C DLL

时间:2016-11-16 10:55:02

标签: c++ c qt dll

我想编写一个普通的C DLL来连接到SOAP服务器以在那里读/写数据。 (需要是普通的C,因为这个DLL将在LabView中使用)

我必须使用一个用Qt编写的API。此API提供了各种方法来建立所述连接。所以我要做的就是将API功能转换为C语言。

我试着这样做:

头文件中的

typedef void* plainc_testlistwrapper;
#ifdef __cplusplus
extern "C"{
#endif
__declspec(dllexport) plainc_testlistwrapper testlistwrapper_init(const char* srv);
__declspec(dllexport) void testlistwrapper_destroy(plainc_testlistwrapper tlw);
__declspec(dllexport) const char *testlistwrapper_get_admin(plainc_testlistwrapper self);

#ifdef __cplusplus
}
#endif // EXTERN C
cpp文件中的

__declspec(dllexport) plainc_testlistwrapper testlistwrapper_init(const char* srv)
{
    return new TestListWrapper(TestListWrapper::SoapSecure, QString::fromUtf8(srv));
}

__declspec(dllexport) void testlistwrapper_destroy(plainc_testlistwrapper tlw)
{
    TestListWrapper* toDelete = static_cast<TestListWrapper*>(tlw);
    delete toDelete;
}


//This function will give back the servers admin without the need to be logged in.
__declspec(dllexport) const char* testlistwrapper_get_admin(plainc_testlistwrapper self)
{
    TestListWrapper* tmp = static_cast<TestListWrapper*>(self);
    return tmp->serverAdministrator().toStdString().c_str();
}

如下所示: How to call C++ function from C

让我在这里问的问题

将此代码编译成DLL工作正常(mingw_4.9.2 32bit,Qt 5.6.1) 但是当我试图在另一个应用程序中使用某些代码时(Qt控制台应用程序更具体),我只是得到一个带有_符号闪烁的黑色终端。当我尝试调试代码时没有任何反应,调试器只是说应用程序正在运行。

我希望我没有忘记提及任何重要内容。

提前感谢您的回答!

修改

我将库包含在下面

INCLUDEPATH += C:/Path/to/Lib/PlainCLib
LIBS += -LC:/Path/to/Lib/PlainCLib/debug -lPlainCLib

main.cpp 中我只是做了

#include "plainclib.h"

当我从lib中添加任何种方法时,会出现空闲终端。我强调任何因为我添加了一个add-method只是为了确保它不是实现的API,如下所示:

__declspec(dllexport) int add(int a, int b){return a+b;}

我这样调用了add方法:

std::cout << add(5, 7) << std::endl;

注意:包含需要翻译的API是正确的,因为我在其他项目中成功使用了此API。

0 个答案:

没有答案