我正在编写一个将markdown转换为html的应用程序。并为此目的构建了一个基于“cpp-markdown”的dll,命名为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关闭到我的应用程序,因为该网站说: Problem Event Name: BEX, error message
但它不起作用。
答案 0 :(得分:0)
最后,我发现我的Qt创建者的默认编译器是mingw,但是dll是用VC编译的。这两个编译器之间应该存在一些差异,并且std :: string(在我的情况下,“helloworld”)无法正确传递给DLL中的函数。
所以我的解决方案是使用相同的编译器编译所有代码。 谢谢!