2013-01-14 40 views
2

我有以下代碼,我目前使用的是從C#Dll中調用函數,該函數在Visual C++中完美工作。Visual C++代碼不能在Code :: Blocks中工作

#include <mscoree.h> 
#include <stdio.h> 
#pragma comment(lib, "mscoree.lib") 

void Bootstrap() 
{ 
    ICLRRuntimeHost *pHost = NULL; 
    HRESULT hr = CorBindToRuntimeEx(L"v4.0.30319", L"wks", 0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pHost); 
    pHost->Start(); 
    printf("HRESULT:%x\n", hr); 

    // target method MUST be static int method(string arg) 
    DWORD dwRet = 0; 
    hr = pHost->ExecuteInDefaultAppDomain(L"c:\\temp\\test.dll", L"Test.Hello", L"SayHello", L"Person!", &dwRet); 
    printf("HRESULT:%x\n", hr); 

    hr = pHost->Stop(); 
    printf("HRESULT:%x\n", hr); 

    pHost->Release(); 
} 

int main() 
{ 
    Bootstrap(); 
} 

的問題是,當我移動到這個代碼::塊(其中我比較熟悉的 - 爲小C++我已經做已經原生)拋出了很多編譯器錯誤的。

原始編譯器錯誤是因爲它找不到標頭mscoree.h。我在.NET SDK中發現了這個問題,所以我將它複製到了解決該問題的mingw include目錄中,然後對所有找不到的其他頭文件做了同樣的處理。

複製完所有頭文件後,它開始給出一大堆其他錯誤,用於處理剛剛移動的頭文件中的代碼 - 與下面的代碼無關。

爲什麼Code :: Blocks有這麼難的時候運行這個時,VS直接從蝙蝠運行它?

感謝

+0

你能發佈一些錯誤嗎?你有沒有設置項目來鏈接'mscoree.dll'? – Yuushi

+0

我會嘗試再次找到它們,從內存中它是各種頭文件中的'函數未定義'錯誤。如何將項目鏈接到'mscoree.dll'? –

+0

函數定義沒有被發現,肯定聽起來像是一個鏈接器錯誤。我從來沒有真正使用過Code :: Blocks,但也許這會有所幫助? http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/ – Yuushi

回答

5

代碼::塊是C++編程一個偉大的IDE,但你顯然做Windows程序設計在這裏。雖然它是相同的編程語言,但編譯器並不兼容。

如果您使用gcc編譯器或單個CodeBlocks IDE下載了CodeBlocks版本,則需要配置CodeBlocks才能使用MS C++編譯器。爲此,請轉至設置>>編譯器和調試器>>工具鏈可執行文件

此外,在相同的選項中,查找搜索目錄,並在那裏放置MS C++編譯器標頭的路徑。

一旦完成,您將能夠編譯您的程序。

+0

感謝您的建議。我已經切換到VS C++編譯器,並將目錄添加到包含目錄中,但在編譯後,我得到了50個錯誤和139個警告。有任何想法嗎? –

+0

在這裏你可以解釋如何在CodeBlocks中使用Visual C 6。這個過程非常相似。 http://wiki.codeblocks.org/index.php?title=Integrating_Microsoft_Visual_C_6_with_Code::Blocks_IDE – Baltasarq

0

Code :: Blocks與Visual Studio完全不同的編譯器,編譯期間源代碼上的解碼和編碼是不同的,儘管它們是相同的編程語言,但它們不能識別對方。