首页 新闻 会员 周边 捐助

关于跨平台的非托管

0
悬赏园豆:100 [已解决问题] 解决于 2008-02-09 10:18
<P>我现在想使用一个其他操作系统(手机)的一个dll的功能,需要dllimport他的函数。</P> <P>我不太明白的是,对于dll的类该怎么处理,这是一段在其他平台上运行的代码的例子(我想改写成c#的):</P> <P>RSocket iSendingSocket;<BR>&nbsp;<BR>CActiveScheduler::Add(this);</P> <P><BR>1:对于RSocket的声明,这是那个平台提供的一个类,我这边怎么声明一个这样的玩意可以对应过去呢? 简单的,他使用int,我这边也用int应该没错,但是对于这种复杂的类该怎么映射呢。</P> <P>2:对于这种调用&nbsp;Add(this),怎么把c#的实例传递到另外平台里面?用指针么?</P> <P>谢谢。</P>
问题补充: 像第一种情况,如果iSendingSocket还需要执行函数该怎么办? 比如iSendingSocket.Send(xx,xx); 这样复杂的类RSocket 该如何在c#平台里面声明对应过来?
甲_乙_丙_丁的主页 甲_乙_丙_丁 | 小虾三级 | 园豆:804
提问于:2008-01-30 19:08
< >
分享
最佳答案
0
C#和C++互操作目前好像是不太可能的, 也就是说,你在C#里,通常是只能调用C函数,而不能调用C++里的类成员函数,更别提传递this指针了. 解决办法有两个: 1, 研究RSocket的源代码,我估计里面最终还是调用了操作系统,或者其它C语言开发的Lib/API. 找到它调用的是哪些C函数以后,你就可以知道这些函数存在于哪些dll文件中.此时我建议你按照RSocket使用这些函数的方法,用C#开发一个与它功能相同的类,以方便使用. 2,使用C++/CLI,做一层薄薄的包装. 推荐使用第二种,因为开发效率比第一种高得不止是一点.
deerchao | 大侠五级 |园豆:8367 | 2008-02-01 01:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册