2

我目前使用以下代码从 C# Dll 调用函数,该代码在 Visual C++ 中完美运行。

#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();
}

问题是,当我将它移动到 Code::Blocks (我更熟悉 - 因为我所做的小 C++ 是原生的)时,会引发很多编译器错误。

最初的编译器错误是因为它找不到 header mscoree.h。我在 .NET SDK 中找到了这个,所以我把它复制到了解决这个问题的 mingw 包含目录,然后我对它找不到的所有其他头文件做了同样的事情。

在复制了所有标题之后,它开始给出一大堆其他错误,与我刚刚移动的标题中的代码有关 - 与下面的代码无关。

为什么当 VS 直接运行时 Code::Blocks 很难运行它?

谢谢

4

2 回答 2

5

Code::Blocks是用于 C++ 编程的出色 IDE,但您显然是在这里进行 Windows 编程。尽管它是相同的编程语言,但它们之间的编译器并不兼容。

如果您使用 gcc 编译器或单个 CodeBlocks IDE 下载了 CodeBlocks 版本,则需要配置 CodeBlocks 才能使用 MS C++ 编译器。为此,请转到Settings >> Compiler and debugger >> Toolchain executables

此外,在同一选项中,查找搜索目录并将 MS C++ 编译器头文件的路径放在那里。

完成后,您将能够编译您的程序。

于 2013-01-14T11:17:30.473 回答
0

Code::Blocks 与 Visual Studio 的编译器完全不同,编译时对源代码的解码和编码不同,虽然它们是相同的编程语言,但无法相互识别。

于 2016-10-23T00:45:26.970 回答