我有一个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++的深层.