c++ - 尝试将非托管 C++ 类转换为托管 C++ 类时出现奇怪的错误(用于 .net)

标签 c++ class unmanaged managed

问候,

首先,本人不是C++开发者,不足之处请见谅....

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

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

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

好吧,所以我知道这与指向更多指针和其他东西的指针有关......但这里是有问题的变量,当垃圾收集器未添加到类名时 DID 工作,现在赢了'添加它进行构建:

<<< 头文件 >>>

公共(public) __gc 类 bob { ... 民众: 字符 *img_buff; ... 初始化(无效);

<<< CPP 文件 >>>

初始化(无效) { ... nRet = is_AllocImageMem(hcam, img_wid, img_hgt, 深度, &img_buff, << 不喜欢这里 &mem_id ); ...

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

提前致谢。最良好的祝愿!!!

最佳答案

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

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

关于c++ - 尝试将非托管 C++ 类转换为托管 C++ 类时出现奇怪的错误(用于 .net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113969/

相关文章:

c++ - 无法将 std::list 迭代器与 list::back() 进行比较?

c++ - 我的时间程序不会过载。为什么?

visual-studio - VS2022 : Is there a faster way to toggle "Enable Native Code Debugging" setting?

computer-science - 托管代码与非托管代码

c++ - 非托管和托管 C++ DLL 之间的互操作性

c++ - 编译时素数列表 : specialization error

c++ - std::make_unique_for_overwrite() 相对于 std::make_unique() 有何作用?

c++ - 是否可以编写一个同时接受右值和左值的模板函数

C# 错误消息 : Cannot Implicitly convert type

java - Android 加速度计读数