我在Internet的帮助下编写了一些本机C ++代码,该代码加载.NET Runtime并public static int MethodNameHere(String pwzArgument)
从托管程序集中的类调用具有签名的方法:
但是,我似乎无法使用Visual Studio将代码编译到本机DLL(64位)中,因为CLRCreateInstance()似乎存在链接问题,即使我包含"MetaHost.h"
在.cpp源文件中也是如此。
这是完整的代码:
#include "MetaHost.h"
extern "C" {
__declspec(dllexport) DWORD __stdcall CallManagedMethod(LPCWSTR managedDLLPath, LPCWSTR classPathInAssembly, LPCWSTR methodName, LPCWSTR parameter) {
// Bind to the CLR runtime..
ICLRMetaHost* pMetaHost = nullptr;
CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*) &pMetaHost);
ICLRRuntimeInfo* pRuntimeInfo = nullptr;
pMetaHost->GetRuntime(L"v4.0.30319", IID_ICLRRuntimeInfo, (LPVOID*) &pRuntimeInfo);
ICLRRuntimeHost* pClrRuntimeHost = nullptr;
pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*) &pClrRuntimeHost);
pClrRuntimeHost->Start();
// Okay, the CLR is up and running in this (previously native) process.
// Now call a method on our managed C# class library.
DWORD dwRet = 0;
pClrRuntimeHost->ExecuteInDefaultAppDomain(managedDLLPath, classPathInAssembly, methodName, parameter, &dwRet);
// Don't forget to clean up.
pClrRuntimeHost->Release();
pRuntimeInfo->Release();
pMetaHost->Release();
return dwRet;
}
}
有什么帮助吗?
.h文件不能解决链接问题,它只会添加它们。您链接到的MSDN文章弄乱了记录包含和链接提示的常用方式,“包含为资源”是完全没有帮助的。在C ++中,您必须链接mscoree.lib
才能解析符号。它是mscoree.dll的导入库,包含在SDK中。
最简单的方法是#pragma comment(lib, "mscoree.lib")
在#include之后添加。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句