当前位置:  开发笔记 > 编程语言 > 正文

将数组从C++移动到C#的最简单方法,修改它,并将其传递回C++

如何解决《将数组从C++移动到C#的最简单方法,修改它,并将其传递回C++》经验,为你挑选了0个好方法。

我有一个C#类库,其中包含需要与外部应用程序一起使用的方法.不幸的是,这个外部应用程序仅支持C/C++中的外部API.

现在我设法得到一个非常简单的COM示例在C++ DLL和C#DLL之间工作,但我仍然坚持如何移动数组数据.

这就是我到目前为止所做的,就像我通过COM在网络上找到的一个小例子:

DLL_EXPORT(void) runAddTest(int add1,long *result) {
    // Initialize COM.
    HRESULT hr = CoInitialize(NULL);

    // Create the interface pointer.
    IUnitModelPtr pIUnit(__uuidof(UnitModel));

    long lResult = 0;

    // Call the Add method.
    pIUnit->Add(5, 10, &lResult);

    *result = lResult;

    // Uninitialize COM.
    CoUninitialize();

}

这可以在我的C#类中调用add方法.如何修改它以获取并返回双精度数组?(生病也需要用绳子做下去).

我需要获取一个非托管数组,将此数组传递给C#类进行一些计算,然后将结果传递回原始函数调用(非托管)C++中指定的数组引用.

我需要公开这样的函数:


*calcin - 对双精度数组的引用

*calcOut - 对双精度数组的引用

numIN - 输入数组大小的值

DLL_EXPORT(void) doCalc(double *calcIn, int numIn, double *calcOut)
{
      //pass the calcIn array to C# class for the calcuations

      //get the values back from my C# class

      //put the values from the C# class 
      //into the array ref specified by the *calcOut reference 


}

我可以使用C++\CLI DLL作为外部应用程序,所以如果这比直接COM更容易,那么我愿意看一下.

请温柔,因为我主要是一个C#开发人员,但已被抛入Interop和C++的深层.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有