小编Jam*_*ard的帖子

HOWTO:在WindowsCE Compact Framework上从非托管C++调用托管C#接口

我有丰富的非托管的Windows CE 5的C++代码,提供,我想通过它写在托管C#在Windows CE 6和Compact Framework的大量新业务和通讯逻辑相结合的新产品使用的UI.

UI可能知道业务逻辑,但我希望业务逻辑不知道UI,以便我以后可以用托管版本或我选择作为前端的任何其他UI替换它.

我发现了一篇文章,描述了如何使用COM作为Windows世界中的桥梁,但我在WinCE下的.NET CF中应用它时遇到了困难.在过去,我已经导入了类型库并使用COM调用(CoInitialize(),CoCreateInstance())来获取指向其他Windows平台上的接口的指针,这就是我目前正在追求的策略:直接使用COM假设在WinCE中提供相同的工具,非托管C++库来访问托管库中的C#接口.

这是我的问题:typelib.它在我的托管C#库中不可用,因为我过去通过'#import"SomeCPPLibrary.dll"声明使用它.我相信它隐藏在.dll程序集中,以不同于过去的方式存储,因此,不能通过库本身的#import直接获得.我认为我可以#IMPORT类型库,但我不能找到一种方法,从我的管理.dll文件中提取类型库,而我也许能破解在一起的接口定义文件(的.idl),并使用该平台的MIDL.EXE从它生成一个.tlb,不能保证我的.idl,以及由此产生的.tlb真正匹配我的C#.dll中的内容.我甚至不知道平台midl.exe是否以这种方式工作,但我认为它确实如此.

  1. 我吠叫错了树吗?是否可以通过相应的COM接口在非托管C++中使用托管C#接口?

  2. 是否设置[组件:标记有ComVisible特性(真)在其AssemblyInfo.cs文件属性使托管程序集的所有接口可以通过COM在不可控制的世界通过GUID的AssemblyInfo.cs中定义,或做我必须做更多的东西?

  3. 如何从托管的.dll中获取typelib,以便我的非托管C++库可以#import它?

  4. 我尝试将我的托管C#库项目添加为非托管C++库项目中的参考,但这似乎没有帮助.在这种情况下,这样的参考是否相关?

  5. 有没有更好的方法来解决从非托管C++世界调用托管C#代码的基本问题?我刚刚在这里阅读的是一个混合模式库,带有托管翻译层来桥接非托管/托管差距.我不知道这是一个很好的策略,呼叫响应速度的一个重要因素,但可能它是从长远来看更好,因为我打算在某个时候重写UI来管理C#,从而把所有的精力的扔掉用户界面而不是用更永久的商业/通信逻辑来捣乱?无论这个问题的答案如何,我仍然想解决使用COM的问题,如果没有其他原因而不是好奇心.

com compact-framework unmanaged managed windows-ce

6
推荐指数
1
解决办法
2157
查看次数

标签 统计

com ×1

compact-framework ×1

managed ×1

unmanaged ×1

windows-ce ×1