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 这个最好加个编译开关解决。