我目前使用以下代码从 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 很难运行它?
谢谢