Трудно отследить ошибку LabView при вызове некоторых функций QT DLL [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Трудно отследить ошибку LabView при вызове некоторых функций QT DLL [закрыто]

Сообщение Anonymous »

Я пишу C DLL, чтобы вызвать библиотеку C ++ QT из LabView (Windows10, 64-бит). Я делал C DLL для LV раньше, но здесь все делает странный поворот. Простые вызовы, такие как передача/возвращение целочисленной работы, но что -то более сложное дает ошибку 1097 в LabView.
Сама библиотека QT довольно сложна (Mutithreaded сетевые операции), но вызовы C не являются, и просто выполнение C -вызовов без подчиненного C ++ работает нормально (так что это не в STDCall/CDECL -проблема). Материал C ++/QT работает нормально. Поэтому я думаю, что есть кое -что, что делает QT, что мешает LV (или наоборот), но после большого количества проб и ошибок я не могу точно его определить. На данный момент у нас закончились идеи. < /P>
Изменить: добавление очень упрощенного кода < /p>
struct wrapper {
void *obj;
};

static QCoreApplication *coreApp = NULL;

wrapper_t *MaBo_create(const char* DebugFile) {
wrapper_t *m;
TmainBoard_API *obj;

if (coreApp==NULL) {
int argc = 0;
coreApp = new QCoreApplication(argc, 0);
}

m=(typeof(m))malloc(sizeof(*m));
obj=new TmainBoard_API();
m->obj=obj;

return m;
}

void MaBo_destroy(wrapper_t *m) {
if (m==NULL)
return;
delete static_cast(m->obj) ;
free (m); m=NULL;

if (coreApp!=NULL) {
coreApp->exit();
delete coreApp;
coreApp = NULL;
}
}

int MaBo_connectClient(wrapper_t *m, const char* addStr, int port, const char* description) {
TmainBoard_API *obj;
if (m==NULL)
return -1;

obj=static_cast(m->obj) ;
try {
obj->connectClient(QString::fromStdString(addStr), port, QString::fromStdString(description));
} catch (const TIPbusError& e) {
qDebug() disconnect();
}

uint16_t MaBo_ReadfwVersion(wrapper_t *m) {
TmainBoard_API *obj;
if (m==NULL)
return 0;

obj=static_cast(m->obj) ;
return obj->ReadfwVersion();
}

// All the calls above work. This one returns the error.
// TpwrControlBlockReal is just a simple struct of a few doubles
void MaBo_getPwrControlBlockReal(wrapper_t *m, bool ihmAreaAccess, struct TpwrControlBlockReal *MBTCBR) {
TmainBoard_API *obj;

obj=static_cast(m->obj) ;
TpwrControlBlockReal M=obj->getPwrControlBlockReal(ihmAreaAccess);
memcpy(MBTCBR, &M, sizeof(TpwrControlBlockReal));
// We tested the alignment and that's not the issue
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»