我目前使用以下代码来调用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 ++本机)会引发很多编译错误。
原始编译器错误是因为找不到标头mscoree.h
。我在.NET SDK中找到了这个,所以我把它复制到mingw include目录中解决了这个问题,然后我对它找不到的所有其他头文做了同样的事情。
在复制了所有标题后,它开始给出一大堆其他错误,与我刚刚移动的标题中的代码有关 - 与下面的代码无关。
为什么Code :: Blocks在VS直接运行时很难运行这个?
由于
答案 0 :(得分:5)
Code :: Blocks 是一个很棒的C ++编程IDE,但你显然在这里做Windows编程。虽然它是相同的编程语言,但编译器之间并不兼容。
如果您使用gcc编译器或单个CodeBlocks IDE下载了CodeBlocks版本,则需要配置CodeBlock以使用MS C ++编译器。为此,请转到设置&gt;&gt;编译器和调试器&gt;&gt;工具链可执行文件。
此外,在同一选项中,查找搜索目录并在其中放置MS C ++编译器标头的路径。
完成后,您将能够编译您的程序。
答案 1 :(得分:0)
Code :: Blocks与Visual Studio完全不同的编译器,编译时源代码的解码和编码是不同的,虽然它们是相同的编程语言但却无法识别。