2012-12-24 86 views
0

我對編寫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需要添加嗎?

+0

您的問題被標記爲「C++」,但代碼不是。你是否想用Qt項目中的本機代碼或託管.NET程序集來使用.dll? – IInspectable

+0

@Tim我希望我的Qt代碼儘可能不含Windows。所以如果可能的話,在Qt中沒有.NET或任何東西。沒有任何反對VS我只需要可移植性。我使用的是VS2012 C++,所以我認爲我正在使用的大多數是C++,在頂層對於VS做的任何預處理(就像Qt有一個MOC層)一樣。所以我認爲C++標記是合理的,因爲Qt是基於C++的,'#include'語法是特定於C/C++的 –

+0

我仍然感到困惑。雖然#include預處理器指令的確是C++,但頭文件_test-lib.h_不是。它看起來像C++/CLI - 就語法而言 - 是C++的超集。但是它不會編譯爲本地代碼,並且運行它需要.NET運行時。 – IInspectable

回答

1

假設你的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)