bada 2D游戏编程之一――图形绘制
2012-07-04 21:07
393 查看
非托管C++代码调用C#编写的dll方法 CLR VIA C#这本书里面的内容,在网上好像很少关于这方面的内容,贴出来以后留着看。 C#调用C++编写的dll,一般都是直接用dllimport,这个资料很多。C++调用C#编写的dll,一般方法都是先用托管C++将C#的dll进行一次封装,然后由非托管C++调用封装好的dll。 CLR VIA C#在讲寄宿和应用程序域的内容时,提供了一个非托管C++直接调用的方法。原理就是,在非托管代码中手动启动CLR加载应用程序域来运行托管的dll,从而调用其中的方法。 代码如下: #include <Windows.h> #include <MSCorEE.h> #include <stdio.h> #pragma comment(lib,"mscoree.lib") int _tmain(int argc, _TCHAR* argv[]) { ICLRRuntimeHost *pClrHost; HRESULT hr = CorBindToRuntimeEx(NULL, NULL,0, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (PVOID*)&pClrHost); //启动CLR pClrHost->Start(); DWORD retVal=0; //将dll加载到默认应用程序域中,并调用其中的方法 hr = pClrHost->ExecuteInDefaultAppDomain(L"test.dll",L"test.MyType",L"TestMethod", L"TestStringParam",&retVal); if(S_OK==hr) wprintf(L"Managed code returned %d\n",retVal); else wprintf(L"failed to call csharp dll.\n"); getchar(); return 0; } C#编写的test.dll如下: namespace test { class MyType { public static Int32 TestMethod(String s) { Console.WriteLine("Managed assembly: {0}",s); return s.Length; } } } 代码输出: Managed assembly: TestStringParam Managed code returned 15 可以看到c++成功调用了test.DLL中的方法,并且可以传入参数和接收返回值。 想深入的了解,可以看下面的内容: http://msdn.microsoft.com/zh-cn/vstudio/9x0wh2z3.aspx
相关文章推荐
- bada 2D游戏编程之一——图形绘制
- bada 2D游戏编程之二――图像绘制(1)
- bada 2D游戏编程之二――图像绘制(2)
- bada 2D游戏编程之二——图像绘制
- bada 2D游戏编程之四——设计游戏循环
- bada 2D游戏编程——开篇说明
- bada 2D游戏编程之四――设计游戏循环
- D3D之2D游戏编程(一)——D3D图形管道
- bada 2D游戏编程之五――一个基于定时器的游戏循环
- bada 2D游戏编程之五——一个基于定时器的游戏循环
- Win32 OpenGL编程系列 2D例子 -- 七巧板图形绘制
- bada 2D游戏编程之六――一个基于线程的游戏循环
- 【图形学与游戏编程】开发笔记-入门篇3:图形绘制
- bada 2D游戏编程之八——逐帧动画
- bada 2D游戏编程之三――游戏的基本结构
- bada 2D游戏编程之六——一个基于线程的游戏循环
- bada 2D游戏编程之三——游戏的基本结构
- android游戏编程--图形绘制(2)
- android游戏编程--绘制图形
- bada 2D游戏编程之十——关键帧动画原理