Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用C++;来自C的类# 我想我必须创建一个托管C++代码来封装本机C++。但是,在试图封装函数类型中使用的数组时,我遇到了问题,函数类型的定义是在本机C++中定义的。本机C++代码如下: //unmanageCPP.h class __declspec(dllexport) unmanageMoney { public: unmanageMoney(int a, int b) { rmb = a; dollar = b; } unmanageMoney() { rmb = 0; dollar = 0; } int rmb; int dollar; }; class __declspec(dllexport) unmanageSum { public: //how to wrap this funciton? int addDollar(unmanageMoney a[], unmanageMoney b[]); }; //unmanageCPP.cpp #include "unmanaged.h" int unmanageSum::adddollar(unmanageMoney a[], unmanageMoney b[]) { return a[0].dollar + b[0].dollar; }_C#_C++_C++ Cli - Fatal编程技术网

C# 如何调用C++;来自C的类# 我想我必须创建一个托管C++代码来封装本机C++。但是,在试图封装函数类型中使用的数组时,我遇到了问题,函数类型的定义是在本机C++中定义的。本机C++代码如下: //unmanageCPP.h class __declspec(dllexport) unmanageMoney { public: unmanageMoney(int a, int b) { rmb = a; dollar = b; } unmanageMoney() { rmb = 0; dollar = 0; } int rmb; int dollar; }; class __declspec(dllexport) unmanageSum { public: //how to wrap this funciton? int addDollar(unmanageMoney a[], unmanageMoney b[]); }; //unmanageCPP.cpp #include "unmanaged.h" int unmanageSum::adddollar(unmanageMoney a[], unmanageMoney b[]) { return a[0].dollar + b[0].dollar; }

C# 如何调用C++;来自C的类# 我想我必须创建一个托管C++代码来封装本机C++。但是,在试图封装函数类型中使用的数组时,我遇到了问题,函数类型的定义是在本机C++中定义的。本机C++代码如下: //unmanageCPP.h class __declspec(dllexport) unmanageMoney { public: unmanageMoney(int a, int b) { rmb = a; dollar = b; } unmanageMoney() { rmb = 0; dollar = 0; } int rmb; int dollar; }; class __declspec(dllexport) unmanageSum { public: //how to wrap this funciton? int addDollar(unmanageMoney a[], unmanageMoney b[]); }; //unmanageCPP.cpp #include "unmanaged.h" int unmanageSum::adddollar(unmanageMoney a[], unmanageMoney b[]) { return a[0].dollar + b[0].dollar; },c#,c++,c++-cli,C#,C++,C++ Cli,谁能告诉我怎么写manageCPP.h?非常感谢 更新 我编写manageCPP.h如下,但我不知道如何编写addDollar() 使用创建C++/CLI源文件 public ref class SomethingOrOther { //... }; 并将编译选项设置为使用/clr选项 除了这个之外,它与编写本地C++几乎是一样的。你将使用代码< >代码>你要重用的类的头文件,创建实例并调用它们的成员函数,就像普通C++一样。但是ref类中的任何内容都将对C#可见 并且您没有在类上放置

谁能告诉我怎么写manageCPP.h?非常感谢

更新

我编写manageCPP.h如下,但我不知道如何编写addDollar()


使用创建C++/CLI源文件

public ref class SomethingOrOther
{
    //...
};
并将编译选项设置为使用
/clr
选项

除了这个之外,它与编写本地C++几乎是一样的。你将使用代码< >代码>你要重用的类的头文件,创建实例并调用它们的成员函数,就像普通C++一样。但是

ref类
中的任何内容都将对C#可见


并且您没有在类上放置
\uu declspec(dllexport)
。从来没有。它对函数有用,但在使用类时会产生痛苦。

谢谢回答,但是如果成员函数中的C++类型定义了参数类型,那么会怎样?我也需要包装参数类型吗?@CDBean:是的。在本机类型和托管类型之间进行1:1映射并不总是有意义的(有时将结构参数拆分为多个参数或类似的内容可能有意义),但您需要提供某种形式的转换。我不知道为什么不应该在类上放置u declspec(dllexport)。我尝试删除它,但结果是错误的,错误为“missing module”@CDBean如果您有问题的更新或更多详细信息要提供,请编辑原始问题以包含新数据。您可能需要
cli::array a
作为
addDollar
的参数,这将在C中显示为
manageMoney[]a
。对于
unmanagedSum::adddollar
,是否确实要
unmanagedMoney a[]
而不是
const unmanagedMoney&a
?您似乎只需要数组中的第一项,这可以用引用(或指针)代替。@Ben Voigt是的,我也发现了。那么,我们该如何处理这个论点呢?我当前的解决方案是创建另一个类型为unmanageMoney的数组,并从数组^a复制其值。有没有更简单的方法?顺便问一下,这里的“^”是什么意思?@乔纳森·桑普森谢谢你的提醒
public ref class SomethingOrOther
{
    //...
};