C# 调用C/C++;来自C的代码# 我通常使用C语言,但很乐意通过C++调用C方法。所以我写了这样的C++包装:< /P> #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0); C++头文件的样子如下: #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0); < C++代码看起来是这样的: #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0);
这给了我dll,我可以在C#中引用它。C#中的工作代码如下所示:C# 调用C/C++;来自C的代码# 我通常使用C语言,但很乐意通过C++调用C方法。所以我写了这样的C++包装:< /P> #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0); C++头文件的样子如下: #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0); < C++代码看起来是这样的: #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { return 1; } class Program { static void Main(string[] args) { SomeWrapper Wrapper = new SomeWrapper(); Console.WriteLine(Wrapper.ReturnValue()); } } struct Parameters{ double x; int y; char z1; bool z2; }; Parameters Ps; Ps.x = z2; Ps.x = 2.0; get_value(Ps, 10.0);,c#,c++,.net,visual-c++,c++-cli,C#,C++,.net,Visual C++,C++ Cli,这给了我dll,我可以在C#中引用它。C#中的工作代码如下所示: #pragma once using namespace System; namespace CSharpToCPP { public ref class SomeWrapper { public: double ReturnValue(); }; } double CSharpToCPP::SomeWrapper::ReturnValue() { retur
#pragma once
using namespace System;
namespace CSharpToCPP {
public ref class SomeWrapper
{
public:
double ReturnValue();
};
}
double CSharpToCPP::SomeWrapper::ReturnValue()
{
return 1;
}
class Program
{
static void Main(string[] args)
{
SomeWrapper Wrapper = new SomeWrapper();
Console.WriteLine(Wrapper.ReturnValue());
}
}
struct Parameters{
double x;
int y;
char z1;
bool z2;
};
Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
get_value(Ps, 10.0);
现在我想在C++方法返回值中创建一些数据,并用这个签名调用C方法:
real_T get_value(const e_struct_T parameters, real_T temp)
有人能为我指出一个正确的方向来解释什么是常量结构以及如何创建这样的数据吗?C代码是自动生成的,应该采用具有已知内容的结构。我试图在头文件中定义如下结构:
#pragma once
using namespace System;
namespace CSharpToCPP {
public ref class SomeWrapper
{
public:
double ReturnValue();
};
}
double CSharpToCPP::SomeWrapper::ReturnValue()
{
return 1;
}
class Program
{
static void Main(string[] args)
{
SomeWrapper Wrapper = new SomeWrapper();
Console.WriteLine(Wrapper.ReturnValue());
}
}
struct Parameters{
double x;
int y;
char z1;
bool z2;
};
Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
get_value(Ps, 10.0);
然后用如下数据填充它:
#pragma once
using namespace System;
namespace CSharpToCPP {
public ref class SomeWrapper
{
public:
double ReturnValue();
};
}
double CSharpToCPP::SomeWrapper::ReturnValue()
{
return 1;
}
class Program
{
static void Main(string[] args)
{
SomeWrapper Wrapper = new SomeWrapper();
Console.WriteLine(Wrapper.ReturnValue());
}
}
struct Parameters{
double x;
int y;
char z1;
bool z2;
};
Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
get_value(Ps, 10.0);
在像这样调用get_值之前:
#pragma once
using namespace System;
namespace CSharpToCPP {
public ref class SomeWrapper
{
public:
double ReturnValue();
};
}
double CSharpToCPP::SomeWrapper::ReturnValue()
{
return 1;
}
class Program
{
static void Main(string[] args)
{
SomeWrapper Wrapper = new SomeWrapper();
Console.WriteLine(Wrapper.ReturnValue());
}
}
struct Parameters{
double x;
int y;
char z1;
bool z2;
};
Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
get_value(Ps, 10.0);
这是行不通的。谢谢 必须搜索包含
e_struct
定义的头文件,包括在调用文件中,并使用该类型的变量传递到get_value
;
顺便说一下,如果你想从<代码> C > <代码>中调用的目标方法是纯代码>代码>代码>,那么你可能应该考虑更好地使用<代码> p/Unjk> < /C> >()而不是创建一个C++包装器。此外,通过简单的P/调用,您将大大简化部署(不需要额外的DLL)如果您使用C++ C++ CLI包装器,您将节省大量麻烦。(实际上,对于这样一个简单的调用,使用P/Invoke可能会更容易。)我自己刚刚发现了这一点(:。请您友好一点,提供对P/Invoke的引用,好吗?谢谢。@csetzkorn答案中有一个起点链接。我知道这可能有点令人沮丧,所以不要泄气。