我想用curl发送电子邮件。我不想使用libcurl所以我尝试使用.exe文件。以下是我使用的代码:
var classAsWithEmptyAbc = Delivery
.SelectMany(x => x.Value.Where(c => string.IsNullOrEmpty(c.abc)))
.ToList();
然而,当我在Qt Creator中使用它时,无论是调试还是发布,它都能正常工作。 (我必须添加let i = arr.length;
let obj = {};
while(i--){
let [year, month, day] = arr[i].Date.split('-');
//probably a better way of initializing a hashtree.
if(!obj[year]){ obj[year] = {}; }
if(!obj[year][month]){ obj[year][month] = {}}
let occur = obj[year][month]['occurences']
let minutes = obj[year][month]['minutes']
obj[year][month]['occurences'] = (occur === undefined) ? 1 : occur + 1;
obj[year][month]['minutes'] = (minutes === undefined) ? arr[i].Minutes : arr[i].Minutes + minutes;
}
用于测试目的)在部署它时,它只是说它不被识别为有效的程序/批处理文件。请注意,它并不是QString cmd = "curl smtp://smtp.gmail.com:587 -v --mail-from \"xxxxxxxxxxx@gmail.com\" --mail-rcpt \"xxxxxxxxxxxxxx@gmail.com\" --ssl -u xxxxxxxxxxxx@gmail.com:xxxxxxxxxxxxx-T \"msg.txt\" -k --anyauth & pause";
const char* ccmd = cmd.toStdString().c_str();
system(ccmd);
而是& pause
(某种奇怪的写作)。我猜是因为它已经编译了
以下是我的部署方法:从发布版>>复制.exe文件Qt控制台>> curl.exe isn't recognized
我还添加了curl.exe,libcurl.dll和证书文件。为什么它不起作用?谢谢大家。
编辑:目录的屏幕截图 Link
答案 0 :(得分:0)
问题不在于卷曲。这是你的C ++ :)看看这一行:
const char* ccmd = cmd.toStdString().c_str();
它做什么? cmd.toStdString()
创建临时 std::string
对象。使用c_str()
,您将获得指向std::string
对象内部的指针。在该行的末尾,准确地;
,std::string
对象被破坏,你存储的指针指向无处(=悬空)。因此,访问此指针是未定义的行为!
这种未定义的行为是有罪的,为什么它适用于您的开发机器而不是部署的机器上。您可以在收到的错误消息中看到悬空指针:$#@ $%@ ^#。
如何解决您的问题?很简单,只需复制std::string
对象:
const std::string s = cmd.toStdString();
const char* ccmd = s.c_str();
现在ccmd
有效,因为s
存在很长时间。如果这对你来说太多了,你可以写一行
system(cmd.toStdString().c_str());
该标准保证临时对象的存在直到;
,即使它在函数调用中。
快乐的编码和欢呼!