gpt4 book ai didi

c# - 这是从 C# 调用 C++ 函数的好方法吗?

转载 作者:行者123 更新时间:2023-11-28 06:18:12 25 4
gpt4 key购买 nike

我对 C# 和 C++ 之间的语言间调用不是很有经验。但是,我创建了一个包含 2 个项目的 VS2013 解决方案。一个项目是 C# 项目。另一个项目是 C++ 项目(带 CLR 的 DLL)。我想知道我的示例代码是否正常?该示例仅显示如何将一些值从 C# 传递到 C++。 C++ 函数打印出值并写入输出数组。我验证了它的有效性,但我想知道是否有什么我错过了并且应该注意和/或注意的?

           /* This is the code in my C# file */
int val1 = 3;
int val2 = 4;
int[] input = new int[10] {1,2,3,4,5,6,7,8,9,10};
int[] output = new int[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
thisInstance = new DSPClassProxy();
thisInstance.myMethod(val1, val2, input, output);

这是在我的 .h 文件中声明“myMethod”的方式:

void myMethod(int val1, int val2, array<int>^ in, array<int>^ output);

这是该函数的实现(在我的 .cpp 文件中):

 void ClassProxy::myMethod(int val1, int val2, array<int>^ in, array<int>^ output)
{

/* Call regular C function */
myNativeMethod(m_pNativeObject, val1, val2, in, output);

}

C 函数“myNativeMethod”是这样实现的:

int myNativeMethod(void* thisInst, int val1, int val2, array<int>^ in,  array<int>^ output)
{
int n;
myClass* thisClass = (myClass*) thisInst;

printf("sample 1: %d \n", val1);
printf("sample 2: %d \n", val2);
for (n = 0; n < 10; n++)
{
printf("sample %d: %d \n", n, in[n]);
}

output[0] = 1024;
output[1] = 1024;
output[2] = 1024;
output[3] = 1024;
output[9] = 1024;

return 0;
}

最佳答案

正如 xanatos 的评论所暗示的那样,您的 native 函数/方法并不是真正的 native ,因为某些参数仍然是 C++/CLI。

如果您想包装到 native C++,我建议(就像我之前自己做的那样):

void ClassProxy::myMethod(int val1, int val2, array<int>^ in, array<int>^ output)
{
std::vector vin;
pin_ptr<in> pin(&in[0]);
int *first(pin), *last(pin + in->Length);
std::copy(first, last, vin.begin());

/* Call regular C function */
std::vector<int> voutput(output->Length);
m_pNativeObject->myNativeMethod(val1, val2, vin, voutput);

for(int i=0;i<voutput->size();i++)
output[i]=voutput[i];
}

您的 native 方法具有如下签名:

void myMethod(int val1, int val2, const std::vector<int> &in, std::vector<int> &output);

由于您的 native 方法现在是纯方法,您可以将其作为 native 类的一部分并直接从包装器中调用它。

关于c# - 这是从 C# 调用 C++ 函数的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com