Пишу dll, есть необходимость делать асм вставки. AT&T асм мне не понравился,
но при переключение в режим интел асма начинают возникать ошибки на пустом(
) месте.
Вот урезанный код dll'ки для вывода MessageBox`a.
При стандартном билде, без флага интела, все работает нормально.
При переходе в интел асм вылетают ошибки. Если закомментировать блок вывода
MessageBox`a(выделен в коде) то ошибок не возникает в любом варианте.
#include <QtGui/QMessageBox>
#include <QApplication>
#include <windows.h>
void WorkerThread()
{
QApplication *pApp;
int argc = 0;
pApp = new QApplication(argc, 0);
//###################
QMessageBox m;
m.setText("111111");
m.show();
//###################
pApp->exec();
delete pApp;
}
extern "C"// __declspec(dllexport)
bool WINAPI DllMain( HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpvReserved*/ )
{
if ( dwReason == DLL_PROCESS_ATTACH )
{
HANDLE hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkerThread, NULL, 0, NULL);
if (hWorkThread == NULL)
{
MessageBoxA(0,"Thread not start","",MB_OK);
ExitProcess(0);
return true;
}
}
// if ( dwReason == DLL_PROCESS_DETACH );
return true;
}
.pro file:
TEMPLATE = lib
CONFIG += dll
#флаг для перехода
#QMAKE_CXXFLAGS += -masm=intel
SOURCES = main.cpp
TARGET = qtdll
вот что выдает QtCreator
error: Assembler messages:
error: Error: no such instruction: `decl DWORD PTR [eax]'
error: Error: no such instruction: `decl DWORD PTR [edx]'
я так понял что происходит ошибка при доступе к членам класса.
но не понятно почему это происходит.