【问题标题】:Getting strange error when attempting to convert Unmanaged C++ class to Managed C++ class (for use in .net)尝试将非托管 C++ 类转换为托管 C++ 类时出现奇怪的错误(用于 .net)
【发布时间】:2010-06-25 07:16:34
【问题描述】:

您好,

首先,我不是 C++ 开发者,所以请原谅我的缺点......

我正在尝试获取另一个开发人员的 C++ 非托管代码并对其进行重新处理,以便可以从我们的 c#.net 应用程序的托管 DLL 调用它。请记住,我是一名 .net 开发人员,我已经有 12 年没有接触过 C++ 了。当我这样做的时候……我做了一个石头剪刀布游戏。 :(

无论如何...我在一个论坛上发现了另一个开发人员的一个很好的小注释,建议我们继续在 .h 文件中的类中添加一个垃圾收集器,并使用“Public __gc”。好吧,我正在尝试将两个类转换为托管代码,所以我继续这样做了……其中一个立即起作用了!另一个......好吧,正在抛出这个错误:

'无法将参数 5 从 'char *__gc *' 转换为 'char **'

好的,所以我知道这与指向更多指针和东西的指针有关......但是这里有问题的变量,当垃圾收集器没有添加到类名时,DID 工作,现在赢了't build with it added:

>>

public __gc 类 bob { ... 上市: 字符 *img_buff; ... 初始化(无效); }

>>

int 初始化(无效) { ... nRet = is_AllocImageMem(hcam, img_wid, img_hgt, 深度, &img_buff,

有什么建议或想法吗?我只是对 C++ 中的“*”和 & 以及指针和其他东西知之甚少。

提前致谢。祝你好运!!!

【问题讨论】:

    标签: c++ class unmanaged managed


    【解决方案1】:

    你有什么版本的 Visual Studio? __gc 的东西是托管 C++,这很糟糕。您需要 C++/CLI,其中的神奇词汇是 public ref class。尽管如此,无论您采用哪种方式,您都必须对指针有所了解,因为您将拥有“我采用本机指针”的代码,并且您打算将托管引用交给垃圾收集堆上的东西。您必须更改该代码才能使其正常工作。

    我很确定使用 PInvoke 对您来说是一个更好的计划,因为它不需要对 C++ 代码进行太多调整。如果您在团队中有 C++ 专业知识,我的答案会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多