如何快速将vc++的类转换为c#/cli

来源:互联网 发布:免费的fq软件 编辑:程序博客网 时间:2024/06/05 14:17

所有需要的工具:
1. TextTemplate
2. P/Invoke Interop Assistant
3. DotNetResolver

vc++的native类一般是无法直接暴露在.net环境下用的(这里暴露的意思是其他.net可以调用)
所以我们其实总是要做一个stub,或者说adapter

对于一般的结构,我们可以通过工具,复制黏贴,转化为.net的类
这里推荐工具:
PInvoke Interop Assistant
我是从stackoverflow上了解的:这里

要注意的是,他们推荐的这个工具 P/Invoke Interop Assistant 有一些限制,我发现他可能无法识别一些注释,特别是注释中有中文,所以必须在贴入VC++代码后,删除所有注释(建议使用正则表达式), 另外由于控件本身的限制,没法输入大量的代码,这里由于源码公开,可以进入后台查看。当然,源代码是VB.net,看不懂…….于是直接使用了工具3:DotNetResolver 反汇编看代码。
P/Invoke Interop Assistant的exe是:winsiggen.exe
.net名称是: sigimplib
其中界面的分支为:
PInvoke.Controls.TranslateSnippetControl
发现其中函数GenerateCode 中有如下语句:
PInvoke.Transform.BasicConverter::ConvertNativeCodeToPInvokeCode(string)
ok, 果断引用此exe,调用此函数就可以解决之前控件造成的字符串字数限制了

最后,也是比较麻烦的就是用tt写stub了,好在结构都已经通过前面的工具转化为.net的了!

0 0