当前位置: 代码迷 >> QT开发 >> Qt调用带参数的dll输出函数崩溃解决方案
  详细解决方案

Qt调用带参数的dll输出函数崩溃解决方案

热度:133   发布时间:2016-04-25 04:56:21.0
Qt调用带参数的dll输出函数崩溃
Qt程序隐式调用如下dll,如果不带参数,编译运行正常。
但一带参数,编译通过,一运行就崩溃。
请教问题出在什么地方?

//.pro中:
C/C++ code
LIBS            += -L ./ -lop


//op.h
C/C++ code
#ifndef OP_H#define OP_H#include <string>extern "C" __declspec(dllexport) void excute(std::wstring url);#endif // OP_H


Qt调用代码:
C/C++ code
std::wstring url=qstr_url.toStdWString();excute(url);



VS2010制作的dll代码如下,

// op.cpp : 定义 DLL 应用程序的导出函数。
//
C/C++ code
#include "stdafx.h"extern "C" __declspec(dllexport) void excute(std::wstring url ){    STARTUPINFO start_info;    PROCESS_INFORMATION proc_info;    ::ZeroMemory(&start_info, sizeof(start_info));    start_info.cb = sizeof(start_info);    ::ZeroMemory(&proc_info, sizeof(proc_info));        std::wstring browser = L"C:/Program Files/Internet Explorer/iexplore.exe";    //std::wstring url = L"http://china.com";    std::wstring command = browser + L" " + url;    LPWSTR command_line = new WCHAR[command.size() + 1];    wcscpy_s(command_line, command.size() + 1, command.c_str());    command_line[command.size()] = L'\0';    ::CreateProcess(NULL, command_line, NULL, NULL, FALSE, 0, NULL, NULL, &start_info, &proc_info);    if (proc_info.hThread != NULL) {      ::CloseHandle(proc_info.hThread);    }    if (proc_info.hProcess != NULL) {      ::CloseHandle(proc_info.hProcess);    }


------解决方案--------------------
为了使用同一个头文件。 一边要用 dllexport 一边要用 dllimport 这个最好加个编译开关解决。
  相关解决方案