在非VS项目中包含VS DLL
问题描述:
我对编写DLL或Visual Studio没有太多经验。基本上我想在非VS(即Qt)项目中使用在Visual Studio中创建的DLL。该.h
文件默认DLL(VS2010)是:在非VS项目中包含VS DLL
// test-lib.h
#pragma once
using namespace System;
namespace testlib {
public ref class Class1
{
//...
};
}
我能够生成DLL没有任何问题,但我不知道怎么把它列入我的Qt项目。也就是说,当我尝试编译它,我得到
..\test-lib.h:6: error: C2871: 'System' : a namespace with this name does not exist ..\test-lib.h:10: error: C2059: syntax error : 'public' ..\test-lib.h:11: error: C2143: syntax error : missing ';' before '{' etc.
尽管这是事实,我与VS2012的编译器和我的Qt版本编译与它建为好。有谁知道我该如何做这项工作?在我的.pro
文件中,我目前已将dll添加到LIBS
,还有其他dll需要添加吗?
答
假设你的DLL写在C与符号出口等
typedef void (*NameOfMyDLLFunction)(double* data, int size);
QLibrary* myLibrary = new QLibrary("NameOfMyLibraryFile", this);
myLibrary->load();
NameOfMyDLLFunction dllFunction = reinterpret_cast<NameOfMyDLLFunction(myLibrary->resolve("dllFunction "));
现在你可以打电话给你dllFunction(double* data, int size)
。
您的问题被标记为“C++”,但代码不是。你是否想用Qt项目中的本机代码或托管.NET程序集来使用.dll? – IInspectable
@Tim我希望我的Qt代码尽可能不含Windows。所以如果可能的话,在Qt中没有.NET或任何东西。没有任何反对VS我只需要可移植性。我使用的是VS2012 C++,所以我认为我正在使用的大多数是C++,在顶层对于VS做的任何预处理(就像Qt有一个MOC层)一样。所以我认为C++标记是合理的,因为Qt是基于C++的,'#include'语法是特定于C/C++的 –
我仍然感到困惑。虽然#include预处理器指令的确是C++,但头文件_test-lib.h_不是。它看起来像C++/CLI - 就语法而言 - 是C++的超集。但是它不会编译为本地代码,并且运行它需要.NET运行时。 – IInspectable