我想编写一个普通的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。