任何人都指向一个工具/实用程序将非托管C++转换为C#? 我尝试过http://www.pinvoke.net/网站,但我无法在此question上找到对此API AddUsersToEncryptedFile
的参考。将非托管C++代码转换为C#
回答
一般来说,这是真的很难,因为C++提供了不同的功能比C#: 模板,朋友,零结尾的字符串,非托管指针,COM等, 更不用说解析C++是一个婊子一份工作。要做到这一点,您需要一个完整的C++解析器,其中包含名称和类型解析,一组关于如何将每个构造(有问题或不可能)转换为等效C#代码的想法, ,以及如何处理代码翻译不好的部分(通常是“手工修复”)。
使用DMS Software Reengineering Toolkit,它提供了所有必要的机械, 我公司,语义设计,实际制造这样的工具,但从未使用过它,对于大客户是想转移的C 800K SLOC++到C#。通过该项目的2/3左右,客户对鸟笼管理层进行了重新洗牌,新经理们决定不再继续省钱(该工具本身运行良好)。
是否需要该API的声明?有一种工具可以用于PInvoke Interop Assistant,但我个人更喜欢DIY方法。这并不难。
试试下面的定义
struct EFS_CERTIFICATE_BLOB
{
public int dwCertEncodingType;
public int cbData;
public IntPtr pbData;
}
struct ENCRYPTION_CERTIFICATE
{
public int cbTotalLength;
public IntPtr pUserSid;
public IntPtr pCertBlob;
}
struct ENCRYPTION_CERTIFICATE_LIST
{
public int nUsers;
public IntPtr pUsers;
}
[DllImport("advapi32.dll", CharSet=CharSet.Unicode)]
static extern uint AddUsersToEncryptedFile(string lpFileName, ref ENCRYPTION_CERTIFICATE_LIST pUsers);
@Mattias s - 完整的代码列表在此网站: http://msdn.microsoft.com/en-us/library/aa363765(VS.85).aspx – 2009-09-01 09:14:45
如果要移植的C++代码到C#,那么你或许应该考虑非托管C++代码转换为C++/CLI。然后,您可以开始以更受控制的方式移植到C#中(例如,一次只执行一个单元 - 理想情况下单元测试将随时进行)。
转换为C++/CLI的替代方法是使用SWIG包装现有的非托管C++代码,但使用此方法迁移将变得更加困难。
- 1. 将C++非托管代码转换为C#
- 2. 将非托管C++代码从32位转换为64位
- 3. 将非托管dll的Delphi代码转换为C#
- 4. 将非托管C++代码编译为托管代码
- 5. C++托管到非托管转换
- 6. c#:通常将非托管阵列转换为托管列表
- 7. C++/cli将托管代码传递给非托管代码
- 8. 在非托管C++代码
- 9. C++/CLI将非托管本机C++列表转换为托管C++/CLI列表
- 10. 将非托管结构变为使用c托管代码#
- 11. 将C++ API转换为托管代码API
- 12. C++/CLI:从非托管枚举转换为托管枚举
- 13. 托管C#中的自由非托管C代码内存
- 14. 将非托管转换为托管过程中的托管
- 15. C++托管代码
- 16. 释放C#中的非托管代码
- 17. C#调用非托管代码
- 18. 半非托管代码与c#
- 19. 将列表转换为C++/CLI的非托管阵列
- 20. 如何将非托管IntPtr类型转换为c#字符串?
- 21. 如何将C#类对象传递给C++非托管代码?
- 22. 将位图从C#传递到C++非托管代码
- 23. 将JavaScript代码转换为C代码
- 24. 将PHP代码转换为C#代码
- 25. 将Java代码转换为C#代码
- 26. 将伪代码转换为C#代码
- 27. 托管代码与非托管代码
- 28. 如何将C#代码转换为C++
- 29. 将C++代码转换为C#
- 30. iPhone:将C#代码转换为Objective-C
听起来很有趣:) – 2009-09-01 08:59:58
结果代码的维护和习惯性如何?我花了一些时间在机器翻译的代码库中,我宁愿使用原始语言。如果“真正的程序员能够用任何语言编写FORTRAN”,那么FORTRAN的自动翻译肯定能很好地满足那个“目标”。 – AProgrammer 2009-09-01 09:48:35
它很容易构建一个糟糕的翻译器:只需将各个语言运算符直接映射到目标语言,而不考虑上下文。虽然您必须映射语言结构,但您可以考虑帐户上下文(DMS能够从应用程序中收集事实并使用它们来控制每个点处生成的内容),并且可以对翻译结果进行后优化。这两种技术都使代码更易于维护。 – 2009-09-01 09:55:08