Я пишу приложение для преобразования метокда в html. И построил dll на основе "cpp-markdown" для этой цели, названной markdown2html.dll. DLL хорошо работает в моей тестовой программе, но не работает в моем приложении qt. Здесь код:
QString tNotesTextEditor::markdown2html(QString articleContents){
QLibrary convertLib(tr("markdown2html.dll"));
std::string result;
if(convertLib.load()){
QMessageBox::information(NULL, "OK", "DLL load is OK!");
typedef std::string (*Fun)(std::string);
Fun convertFunc = (Fun)convertLib.resolve("markdown2HTML");
if(convertFunc){
QMessageBox::information(NULL, "OK", "Function is found");
std::string locale_text = articleContents.toLocal8Bit().constData();
QMessageBox::information(NULL, "OK", "to stdstring is well");
result = convertFunc("helloworld");
QMessageBox::information(NULL, "OK", "Function works well");
//QMessageBox::information(NULL, "OK", QString::fromLocal8Bit(result.c_str()));
return QString::fromStdString(result.c_str());
} else {
QMessageBox::information(NULL, "OK", "Function not found");
return NULL;
}
} else {
QMessageBox::information(NULL, "OK", "Lib not found");
return NULL;
}
}
Сообщение "хорошо работает" никогда не показывалось, и я получаю сообщение об ошибке:
问题事件名称: BEX
应用程序名: tNotes_client.exe
应用程序版本: 0.0.0.0
应用程序时间戳: 532af665
故障模块名称: StackHash_0a9e
故障模块版本: 0.0.0.0
故障模块时间戳: 00000000
异常偏移: 0028d3c9
异常代码: c0000005
异常数据: badc0de1
OS 版本: 6.1.7601.2.1.0.256.48
区域设置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789
Я закрыл DEP для своего приложения, так как сайт говорит: Проблема Название события: BEX, сообщение об ошибке
но это не сработает.
Наконец, я понял, что компилятор по умолчанию моего создателя Qt является mingw, но dll скомпилирован с VC. Между этими двумя компиляторами должно быть несколько различий, а std :: string (в моем случае, "helloworld") не может корректно перейти к функции в DLL.
Поэтому мое решение компилирует все коды с одним и тем же компилятором. Благодарю!